Trong bài viết này, tôi trình bày bốn tùy chọn để trả về dữ liệu lịch sử công việc của SQL Server Agent.
Các tùy chọn
Tôi đã bao gồm hai tùy chọn GUI và hai tùy chọn T-SQL:
- Tùy chọn 1 :Sử dụng SSMS GUI.
- Tùy chọn 2 :Sử dụng Azure Data Studio GUI (thông qua tiện ích mở rộng SQL Server Agent)
- Tùy chọn 3 :Thực thi
sp_help_jobhistory
thủ tục được lưu trữ. - Tùy chọn 4 :Truy vấn
sysjobhistory
bảng (và nối nó vớisysjobs_view
xem hoặcsysjobs
bàn).
Các đối tượng SQL Server Agent nằm trong msdb cơ sở dữ liệu, và do đó, các tùy chọn T-SQL cần được chạy trong cơ sở dữ liệu đó. Bạn có thể làm điều đó bằng cách chuyển sang msdb cơ sở dữ liệu trước tiên hoặc bằng cách định tính đối tượng một cách thích hợp (ví dụ:msdb.dbo.sysjobhistory
).
Tùy chọn 1:Sử dụng SSMS GUI
Bạn có thể sử dụng GUI SQL Server Management Studio (SSMS) để xem lịch sử công việc.
Bạn có thể thực hiện việc này bằng cách mở rộng nút SQL Server Agent trong Object Explorer, sau đó nhấp chuột phải vào Công việc và chọn Xem lịch sử từ menu ngữ cảnh:
Thao tác này sẽ mở ra một cửa sổ mới với lịch sử công việc của tất cả các công việc bên trong Trình xem tệp nhật ký:
Bạn có thể xem lịch sử của một công việc bằng cách bỏ chọn các công việc khác trong màn hình này. Ngoài ra, bạn có thể tìm công việc đó trong Trình khám phá đối tượng và nhấp chuột phải vào công việc đó từ đó.
Xem Xem lịch sử công việc của tác nhân SQL Server với SSMS để biết thêm chi tiết và ảnh chụp màn hình.
Tùy chọn 2:Sử dụng Azure Data Studio GUI
Nếu bạn sử dụng Azure Data Studio, có thể bạn không biết nhưng bạn cũng có tùy chọn để xem lịch sử công việc của SQL Server Agent.
Cách thực hiện việc này là thông qua phần mở rộng SQL Server Agent.
Đây là những gì trông giống như:
Trong màn hình này, chúng ta đang xem lịch sử của một công việc có tên là BackupKrankyKranesDB .
Lịch sử công việc được liệt kê trong ngăn bên trái. Bạn có thể nhấp vào từng mục trong ngăn lịch sử bên trái để hiển thị chi tiết của mục đó trong ngăn bên phải.
Khi viết bài này, có vẻ như bạn chỉ có thể xem lịch sử của một công việc duy nhất tại một thời điểm.
Xem Xem lịch sử công việc của tác nhân SQL Server với Azure Data Studio để biết thêm chi tiết và ảnh chụp màn hình.
Tùy chọn 3:sp_help_jobhistory
Thủ tục được lưu trữ
Nếu bạn thích (hoặc cần) thực hiện các tác vụ của mình với T-SQL, thì sp_help_jobhistory
thủ tục được lưu trữ là một lựa chọn nhanh chóng và dễ dàng cho bạn.
Khi bạn gọi sp_help_jobhistory
mà không có bất kỳ đối số nào, nó trả về lịch sử cho tất cả các công việc. Nhưng khi bạn chuyển tên hoặc ID của một công việc, nó sẽ chỉ liệt kê lịch sử của một công việc đó.
Đây là một ví dụ:
EXEC msdb.dbo.sp_help_jobhistory;
Kết quả:
Lưu ý rằng sp_help_jobhistory
nằm trong msdb cơ sở dữ liệu, vì vậy bạn cần đảm bảo rằng bạn chạy nó từ đó. Bạn có thể thực hiện việc này bằng cách chuyển sang cơ sở dữ liệu đó (ví dụ:với USE msdb
), hoặc bằng cách định tính thủ tục được lưu trữ với cơ sở dữ liệu và lược đồ (tức là msdn.dbo.sp_help_jobhistory
).
Bạn có thể lấy lịch sử của một công việc bằng cách chuyển ID hoặc tên của công việc đó làm đối số.
Ví dụ:
EXEC msdb.dbo.sp_help_jobhistory
@job_name = 'BackupKrankyKranesDB';
Bạn cũng có thể sử dụng tham số @mode parameter
để chỉ định có trả về tất cả các cột trong tập kết quả hay không (FULL
), hoặc chỉ là một bản tóm tắt (SUMMARY
).
EXEC msdb.dbo.sp_help_jobhistory
@job_name = 'BackupKrankyKranesDB',
@mode = 'FULL';
Giá trị mặc định là SUMMARY
.
Tùy chọn 4:sysjobhistory
Bảng
sysjobhistory
table là bảng lưu trữ dữ liệu lịch sử công việc.
Như với bất kỳ bảng nào, bạn có thể chỉ cần làm như sau:
SELECT * FROM msdb.dbo.sysjobhistory;
Điều đó sẽ trả về tất cả các cột trong bảng.
Tuy nhiên, bảng này không lưu trữ tên công việc (hoặc mô tả công việc, v.v.). Để lấy dữ liệu đó, bạn cần phải kết hợp bảng này với các bảng / chế độ xem khác, chẳng hạn như sysjobs_view
xem hoặc sysjobs
bàn. Điều đó sẽ cung cấp một tập hợp kết quả hoàn chỉnh hơn.
Dưới đây là một truy vấn mà bạn có thể sử dụng để trả về dữ liệu đầy đủ hơn.
SELECT jv.name AS Job,
jh.step_name AS Step,
msdb.dbo.AGENT_DATETIME(jh.run_date, jh.run_time) AS RunDateTime,
STUFF(STUFF(STUFF(RIGHT(REPLICATE('0', 8) + CAST(jh.run_duration as varchar(8)), 8), 3, 0, ':'), 6, 0, ':'), 9, 0, ':') AS RunDuration
FROM msdb.dbo.sysjobs_view jv
INNER JOIN msdb.dbo.sysjobhistory jh
ON jv.job_id = jh.job_id
ORDER BY Job, RunDateTime;
Kết quả:
Bạn có thể thêm nhiều cột hơn vào SELECT
danh sách theo yêu cầu.
Nếu bạn đang thắc mắc tại sao truy vấn này lại sử dụng nhiều thứ bổ sung, chẳng hạn như AGENT_DATETIME()
hàm STUFF()
hàm, RIGHT()
, CAST()
và REPLICATE()
, đó là do cách sysjobhistory
lưu trữ các giá trị ngày giờ của nó.
Nếu tôi không sử dụng các chức năng đó, các giá trị ngày giờ sẽ khó đọc hơn.
Đặc biệt, run_date
, run_time
và run_duration
các cột lưu trữ dữ liệu của chúng dưới dạng int các giá trị. Theo mặc định, dữ liệu trong các cột đó trông giống như sau:
Điều đó có thể khiến một số người trong chúng ta khó đọc. Đặc biệt là run_duration
cột. Do đó, chúng tôi đã sử dụng các hàm khác nhau trong truy vấn trên để trình bày các cột này ở định dạng dễ đọc hơn.
Bạn có thể nhận thấy rằng sp_help_jobhistory
thủ tục được lưu trữ gặp phải vấn đề tương tự.
Ngoài ra, tôi nên đề cập rằng AGENT_DATE()
dường như là một chức năng không có giấy tờ.