สำหรับเพื่อนๆที่ใช้ ETL Tool ของค่าย Microsoft ซึ่งก็คือเจ้าตัว Integration Services วันนี้เราจะสร้างการเก็บ error log จาก package ซึ่งเมื่อเกิด error ขึ้นใน task ไหนก็แล้วแต่เราจะทำการ write error log เก็บไว้ใน database เพื่อใช้แก้ปัญหาต่อไปเริ่มกันเลย สามารถทำได้อย่างง่ายดังนี้

ขั้นตอนที่ 1 ) สร้าง Table สำหรับ error log

 ตัวอย่าง SQL Script
CREATE TABLE [dbo].[ErrorLog](
[ErrorLogID] [int] IDENTITY(1,1) NOT NULL,
[PackageLogID] [varchar](100) NULL,
[PackageName] [varchar](100) NULL,
[TaskName] [varchar](100) NULL,
[PrcocedureName] [varchar](100) NULL,
[ErrorCode] [varchar](250) NULL,
[ErrorMsg] [varchar](max) NULL,
[PackageDuration] [int] NULL,
[ContainerDuration] [int] NULL,
[ErrorDate] [datetime] NULL,
[Filename] [varchar](250) NULL,
CONSTRAINT [PK_ErrorLog] PRIMARY KEY CLUSTERED
(
[ErrorLogID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
)
ALTER TABLE [dbo].[ErrorLog] ADD CONSTRAINT [DF_ErrorLog_ErrorDate] DEFAULT (getdate()) FOR [ErrorDate]
GO

ขั้นตอนที่ 2 ) ดักจับ Error log ผ่าน Event Handlers
                  2.1 ทำการ open package ของเราขึ้นมาครับ แล้วไปที่ Event Handler   คลิกตามลูกศรสีแดงชี้ตามรูปข้างล่าง

2.2 ไปที่ SSIS Toolbox  เลือก Execute SQL task มาวางในพื้นที่ว่างๆ

2.3 ทำการ Double click “Execute SQL Task” ขึ้นมาจะเจอหน้าจอดังรูป

2.4 ทำการเพิ่ม Script SQL Insert  ลงใน SQLStatement เพื่อที่ใช้ดักจับ Error จาก Package  ดังรูป


ตัวอย่าง SQL Script
INSERT INTO [dbo].[ErrorLog]
([PackageName]
,[PackageLogID]
,[TaskName]
,[ErrorCode]
,[ErrorMsg]
,[PackageDuration]
,[ContainerDuration]
,[ErrorDate]
,Filename)
VALUES (‘load_facebook_data’,0,”,0,”,359,21, getdate(),”)

2.5 เราจะได้ Task ที่ใช้ดักจับ Error ของ ETL ของเราแล้วครับ ดังรูป

2.6) กรณีที่ Package ของเรารันแล้วเกิดข้อผิดพลาน Task OnError ก็จะทำการ Insert Error log เก็บลงใน table ดังรูป

TG Facebook Comments