Giới thiệu
Với tất cả những cải tiến trong SQL Server và dữ liệu, thật tuyệt khi các công cụ SQL gốc như Cảnh báo và Toán tử vẫn có sẵn. Chúng là các tính năng chính của SQL Server Agent có liên quan đến bất kỳ thứ gì trong tự động hóa SQL Server.
Vai trò của họ rất rõ ràng:
- Cảnh báo, khi được định cấu hình, cho người quản trị cơ sở dữ liệu biết khi một sự kiện cụ thể đã xảy ra.
- Toán tử là một đối tượng được xác định trong SQL Server để ánh xạ bất kỳ ai hoặc một nhóm nào có thể nhận thông báo khi những sự kiện này xảy ra.
Các loại sự kiện
SQL Server ghi lại các sự kiện vào Nhật ký ứng dụng Windows - chúng ta có thể truy cập nó thông qua Windows Event Viewer ở cấp Hệ điều hành. SQL Server Agent có thể đọc Nhật ký ứng dụng và cảnh báo kích hoạt khi có sự trùng khớp giữa 2 danh mục:1) sự kiện được ghi trong nhật ký ứng dụng 2) cảnh báo do quản trị viên xác định.
Có ba loại sự kiện chính:
- Sự kiện SQL Server
- Điều kiện hiệu suất của SQL Server
- Sự kiện WMI
Tạo sự kiện máy chủ SQL
Chúng tôi bắt đầu tạo cảnh báo SQL Server Agent bằng cách nhấp chuột phải vào nút Alerts trong trình khám phá đối tượng trong SQL Server Agent. Thao tác này sẽ mở ra cửa sổ được hiển thị trong Hình 2, nơi bạn chỉ định tên của cảnh báo, loại của nó (Cảnh báo sự kiện của SQL Server trong trường hợp này), phạm vi cơ sở dữ liệu và điều kiện cảnh báo.
Cách đơn giản nhất để chỉ định một điều kiện là sử dụng mức độ nghiêm trọng. Và để có được danh sách đầy đủ các thông báo lỗi trong SQL Server, bạn cần truy vấn sys.messages. Lưu ý rằng chế độ xem này chứa 309408 hàng, vì vậy sử dụng bộ lọc là một ý tưởng tuyệt vời - đó là lý do tại sao trong truy vấn của tôi, tôi đã lọc tiếng Anh qua lệnh.
Hình. 1. Nút cảnh báo
- Liệt kê 1:Thông báo lỗi SQL Server sử dụng msdbgoSELECT * FROM sys.messages trong đó language_id =1033order theo mức độ nghiêm trọng;
Hình 2. Tạo thông báo sự kiện máy chủ SQL
Lưu ý rằng tôi cũng có thể sử dụng một thông báo lỗi cụ thể để kích hoạt cảnh báo. Như đã đề cập trước đó, tất cả các thông báo lỗi được liệt kê trong sys.messages dạng xem danh mục SQL Server. Trên màn hình Hình 2, tôi chỉ chọn các điều kiện sự kiện - trang phản hồi cho phép tôi chọn điều gì sẽ xảy ra nếu sự kiện này được ghi lại. Như bạn thấy, tôi có thể chọn tự động hóa phản hồi của mình bằng cách thực hiện một công việc hoặc chỉ cần thông báo cho người vận hành. Chúng ta sẽ khám phá việc thực hiện một công việc sau, nhưng bây giờ, hãy quan sát lý do tại sao Người vận hành được yêu cầu tiến hành với tùy chọn thay thế. Chúng tôi sẽ tạo một toán tử trong cùng một cửa sổ, nhưng Nếu chúng tôi đã có các toán tử hiện tại, chúng tôi có thể chỉ cần chọn chúng từ danh sách.
Hình 3. Chọn một câu trả lời
Hình 4. Xác định một toán tử
Hình 5. Chọn kênh cảnh báo
Trong Hình 5, chúng tôi chọn Email làm phương tiện gửi thông báo. Bạn nên định cấu hình Thư cơ sở dữ liệu một cách chính xác, nếu không, các cảnh báo đã tạo sẽ vẫn còn trong hàng đợi. Trên trang thứ ba của cửa sổ Cảnh báo mới, chúng ta có thể chọn xem thông báo lỗi có được đưa vào thông báo qua email hay không và liệu chúng ta có muốn gửi thông báo bổ sung hay không (ví dụ:hướng dẫn cho Junior DBA về các hành động khác). Chúng tôi cũng xác định khoảng thời gian giữa các cảnh báo được kích hoạt. Điều quan trọng là vì nếu bạn để nó ở giá trị mặc định (0), hộp thư của nhà điều hành sẽ đầy cảnh báo trong một khoảng thời gian ngắn.
Hình .6. Tùy chọn định cấu hình
- Liệt kê 2:Tạo cảnh báo máy chủ SQL bằng sp_add_alertUSE [msdb] GOEXEC msdb.dbo.sp_add_alert @ name =N'Alert_Insuffnough_Resources_017 ', @ message_id =0, @ precision =17, @ enable =1, @ delay_between_responses =900, @ include_event_description_in =1, @ job_id =N'00000000-0000-0000-0000-000000000000'GOEXEC msdb.dbo.sp_add_notification @ alert_name =N'Alert_Insuffnough_Resources_017 ', @ operator_name =N'Database 1GOAdme', @thod =1GOAdme ' trước>Liệt kê 2 hiển thị mã tương đương để triển khai cảnh báo này. Khi chúng tôi hoàn tất quá trình bằng cách nhấp vào OK, chúng tôi sẽ có thể xem cả cảnh báo và toán tử trong nút SQL Server Agent trong Object Explorer.
Hình 7. Đã tạo cảnh báo
Tạo cảnh báo tình trạng hiệu suất máy chủ SQL
Chúng tôi cũng có thể đi theo lộ trình thay thế và tạo cảnh báo về tình trạng hiệu suất. Ví dụ, chúng tôi chọn Cơ sở dữ liệu> Bộ đếm phần trăm nhật ký được sử dụng. Chúng tôi yêu cầu SQL Server tạo sự kiện khi Mức sử dụng tệp nhật ký vượt quá 75%. Trong trường hợp này, chúng tôi chọn "thực hiện một công việc" làm phản hồi. Liệt kê 3 hiển thị các nhiệm vụ chính đang được thực hiện bởi công việc này và Liệt kê 4 hiển thị định nghĩa đầy đủ về công việc.
Hình 8. Cảnh báo tình trạng hiệu suất
- Liệt kê 3:Thông báo lỗi SQL Server ĐĂNG NHẬP SAO LƯU [DB1] TO DISK =N'E:\ MSSQL \ Backup \ DBTransactionLog.bak'WITH RETAINDAYS =90, NOFORMAT, NOINIT, NAME =N'DB1-TransactionLog Backup ' , SKIP, NOREWIND, NOUNLOAD, STATS =10GOUSE [DB1] GODBCC SHRINKFILE (N'DB1_log ', 0, TRUNCATEONLY) ĐI - Liệt kê 4:Định nghĩa hoàn chỉnh về SQL Agent Backup JobUSE [msdb] GO / ****** Đối tượng :Job [DB1_BackupTransactionLog] Script Date:27/11/2019 7:20:22 PM ****** / BEGIN TRANSACTIONDECLARE @ReturnCode INTSELECT @ReturnCode =0 / ****** Đối tượng:JobCategory [[Chưa được phân loại (Local )]] Ngày tập lệnh:27/11/2019 7:20:23 CH ****** / NẾU KHÔNG TỒN TẠI (CHỌN tên TỪ msdb.dbo.syscategories WHERE name =N '[Uncategorized (Local)]' AND category_class =1) BEGINEXEC @ReturnCode =msdb.dbo.sp_add_category @ class =N'JOB ', @ type =N'LOCAL', @ name =N '[Chưa được phân loại (Cục bộ)]' IF (@@ LỖI <> 0 HOẶC @ ReturnCode <> 0) GOTO QuitWithRollbackENDDECLARE @jobId BINARY (16) EXEC @ReturnCode =msdb.dbo.sp_add_job @ job_name =N'DB1_BackupTransactionLog ', @ enable =1, @tify_level_eventlog =0, @ allow_level_email =3, @ Inform_level_netsend =0, @ allow_level_page =0, @ delete_level =0, @ description =N'Bôi lưu Nhật ký giao dịch cho DB1 khi mức sử dụng Nhật ký giao dịch vượt quá 75% ', @ category_name =N' [Uncategorized (Local)] ', @ owner_login_name =N'DESKTOP-CT8K40N \ kenne', @ allow_email_operator_name =N'DatabaseAdmin ', @job_id =@jobId OUTPUTIF (@@ ERROR <> 0 HOẶC @ReturnCode <> 0) GOTO Qu / ****** Đối tượng:Bước [Backup_Transaction_Log] Ngày tập lệnh:27/11/2019 7:20:23 CH ****** / EXEC @ReturnCode =msdb.dbo.sp_add_jobstep @ example @ sqldat.com, @ step_name =N ' =0, @ subsystem =N'TSQL ', @ command =N' - Liệt kê 3:Thông báo Lỗi Máy chủ SQL 90, NOFORMAT, NOINIT, NAME =N''DB1-TransactionLog Backup '', SKIP, NOREWIN D, NOUNLOAD, STATS =10GO ', @ database_name =N'master', @ flags =0IF (@@ ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback / ****** Đối tượng:Bước [DB1_Shrink_Transaction_Log_File] Ngày tập lệnh:27/11/2019 7:20:23 CH ****** / EXEC @ReturnCode =msdb.dbo.sp_add_jobstep @ example @ sqldat.com, @ step_name =N'DB1_Shrink_Transaction_Log_File ', @ step_id =2, @ cmdexec_success_code =0, @ on_success_action =1, @ on_success_step_id =0, @ on_fail_action =2, @ on_fail_step_id =0, @ retry_attempts =2, @ retry_interval =15, @ os_run_pri thâm niên =0, @ subsystem =N'TSQL ' =N'USE [DB1] GODBCC SHRINKFILE (N''DB1_log '', 0, TRUNCATEONLY) ĐI ', @ database_name =N'master', @ flags =0IF (@@ LỖI <> 0 HOẶC @ReturnCode <> 0) GOTO QuitWithRollbackEXEC @ReturnCode =msdb.dbo.sp_update_job @job_id =@jobId, @start_step_id =1IF (@@ LỖI <> 0 HOẶC @ReturnCode <> 0) GOTO QuitWithRollbackEXEC @ msgstrj @Retadjob.ddCode @server_name =N '(local)' IF (@@ ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollbackCOMMIT TRANSACTIONGOTO EndSaveQui tWithRollback:IF (@@ TRANCOUNT> 0) GIAO DỊCH ROLLBACKEndSave:GO
Hình 9. Tạo công việc cho người đã thực thi
Vì phản hồi của chúng tôi, trong trường hợp này, là thực hiện công việc, chúng tôi cũng bao gồm một thông báo trong chính công việc. Sau khi hoàn tất việc tạo công việc, chúng ta có thể xem lại các thuộc tính cảnh báo trong Object Explorer. Chúng tôi có thể kiểm tra trong Trang Lịch sử xem sự kiện đã xảy ra bao nhiêu lần.
Hình 10. Tùy chọn cho cảnh báo
Hình 11. Trang lịch sử cảnh báo
Kết luận
Trong bài viết này, chúng ta đã khám phá việc tạo ra các cảnh báo và toán tử. Bạn có thể tận dụng khả năng mạnh mẽ này trong SQL Server và thiết lập môi trường để theo dõi các sự kiện cơ bản mà không cần mua công cụ của bên thứ ba. Khả năng sử dụng các công việc để khắc phục các sự cố nhỏ giúp chúng tôi quản lý chủ động môi trường SQL Server của mình.