Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

4 cách để nhận lịch sử công việc máy chủ SQL

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ới sysjobs_view xem hoặc sysjobs 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()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_timerun_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ờ.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách hoạt động của hàm STRING_ESCAPE () trong SQL Server (T-SQL)

  2. Làm cách nào để kiểm tra xem một chuỗi có phải là mã định danh duy nhất hay không?

  3. Cách định dạng số trong SQL Server

  4. T-SQL Bỏ qua Thủ tục Đã Lưu trữ

  5. Kết quả SQL động vào bảng tạm thời trong thủ tục SQL Stored