Tùy chọn khả thi:
Bạn cần sử dụng Logging
tính năng trong SSIS. Nó cho phép bạn định cấu hình các sự kiện mà bạn muốn ghi lại các thông điệp. Tôi thường thích nhật ký OnWarning
và OnError
để theo dõi tất cả các cảnh báo và thông báo lỗi xảy ra trong gói. Bạn có nhiều nhà cung cấp khác nhau để lưu dữ liệu ghi nhật ký. Tôi thích sử dụng SQL Server để có thể truy vấn thông tin ghi nhật ký.
Các tùy chọn ghi nhật ký được hiển thị từ SSIS 2012:
Để bật đăng nhập một gói, bạn cần nhấp vào gói Business Intelligence Development Studio (BIDS)
nếu bạn đang phát triển các gói trong SSIS 2005-2008 R2 hoặc SQL Server Data Tools (SSDT)
nếu bạn đang phát triển các gói trong SSIS 2012.
Nhấp vào SSIS
và sau đó nhấp vào Logging...
Bạn sẽ thấy hộp thoại Định cấu hình nhật ký SSIS.
Ở phía bên trái, bạn có thể kiểm tra gói hoặc các tác vụ riêng lẻ để ghi dữ liệu sự kiện.
Trên Nhà cung cấp và Nhật ký , bạn có thể chọn một nhà cung cấp thích hợp mà bạn có thể lưu thông tin nhật ký. Ảnh chụp màn hình bên dưới cho thấy thông tin sự kiện được ghi lại trong cơ sở dữ liệu SQL Server bằng trình quản lý kết nối OLEDB_PracticeDB
.
Trên Chi tiết , bạn có thể chọn những sự kiện bạn muốn ghi lại. Ảnh chụp màn hình dưới đây cho thấy rằng tôi đang ghi lại các sự kiện sau.
- OnError
- Thông tin về
- OnTaskFailed
- OnWarning
Cảm ơn @William Todd Salzman
để đề xuất OnTaskFailed
sự kiện
Hình minh họa gói mẫu:
Giả sử chúng ta có một gói có tên là SO_15004109.dtsx
với Nhiệm vụ luồng dữ liệu và Nhiệm vụ tập lệnh . Nhiệm vụ luồng dữ liệu chỉ là một hình giả không có thành phần nào bên trong.
Tác vụ script có đoạn mã sau trong phương thức Main để kích hoạt thông tin tùy chỉnh, cảnh báo và thông báo lỗi để chúng ta có thể quan sát cách nó được ghi lại trong nguồn dữ liệu ghi nhật ký. Mã được viết cho SSIS 2012 nên bạn có thể cần phải thay đổi nó cho SSIS 2005. Tôi đã chọn VB.NET
thay vì C#
bởi vì bạn đã gắn thẻ câu hỏi này trong sql-server-2005
và SSIS 2005 chỉ hỗ trợ VB.NET.
Mã tác vụ tập lệnh trong VB.NET cho SSIS 2005 trở lên.
#Region "Imports"
Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Runtime
#End Region
<Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute()> _
<System.CLSCompliantAttribute(False)> _
Partial Public Class ScriptMain
Inherits Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
Public Sub Main()
Dim fireAgain As Boolean = False
Dts.Events.FireInformation(101, "Custom Script Information", "This is a test information message.", String.Empty, 0, fireAgain)
Dts.Events.FireWarning(201, "Custom Script Warning", "This is a test warning message.", String.Empty, 0)
Dts.Events.FireError(201, "Custom Script Error", "This is a test error message.", String.Empty, 0)
Dts.TaskResult = ScriptResults.Success
End Sub
#Region "ScriptResults declaration"
Enum ScriptResults
Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success
Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
End Enum
#End Region
End Class
Nếu chúng tôi thực thi gói, gói sẽ không thành công vì chúng tôi đã phát sinh lỗi trong Tác vụ tập lệnh .
Nếu bạn điều hướng đến nguồn dữ liệu nơi bạn ghi lại lỗi, bạn sẽ thấy rằng SSIS tạo một bảng để ghi thông tin nếu bạn chọn nhà cung cấp ghi nhật ký SQL Server. Bảng dưới đây liệt kê bảng ghi nhật ký mà SSIS tạo trong cơ sở dữ liệu SQL Server được chọn làm nhà cung cấp nhật ký.
SSIS Version Log table name Table type
-------------- ---------------- ----------
SSIS 2005 dbo.sysdtslog90 User
SSIS 2008 dbo.sysdtslog100 User
SSIS 2008 R2 dbo.sysssislog System
SSIS 2012 dbo.sysssislog System
Truy vấn bên dưới đã được thực thi trong cơ sở dữ liệu để xem các sự kiện được gói mẫu này nắm bắt. Bạn sẽ nhận thấy một số thông báo hai lần vì các sự kiện được ghi lại cho từng vùng chứa và nhiệm vụ. Bảng có tên là dbo.sysssislog
vì gói đã được tạo trong SSIS 2012.
select id, event, source, message from dbo.sysssislog;
Kinh nghiệm cá nhân với việc ghi nhật ký:
Tôi đã thành công khá tốt khi chỉ xem thông báo lỗi ghi nhật ký để hiểu điều gì đã xảy ra. Theo tôi, việc gỡ lỗi các gói trong môi trường sản xuất là không nên. Tuy nhiên, tốt hơn là ghi lại các sự kiện nhật ký.
Khi tôi làm việc trong SSIS 2005 và 2008, tôi đã tạo các báo cáo dựa trên SSRS truy vấn bảng nhật ký để tạo báo cáo hàng ngày về việc thực hiện công việc và gửi tệp đính kèm PDF cho những người quan tâm.
Mọi thứ đã được cải thiện trong SSIS 2012 khi công cụ này đi kèm với khả năng báo cáo tích hợp với Danh mục dịch vụ tích hợp
tạo cơ sở dữ liệu có tên SSIDB
.