Breaking News
Loading...
28/12/2013

Tạo Alert trong SQL Server

Làm việc như một database administrator, tôi muốn được nhận cảnh báo (qua email chẳng hạn) càng nhiều càng tốt về các sự kiện xảy ra bên trong máy chủ SQL Server, ví dụ như:
  • Vừa có một database vừa được tạo ra bởi 1 user có quyền sysadmin.
  • Vừa có một user vừa thay đổi thuộc tính cấu hình của 1 database nào đó.
  • Vừa có một table vừa bị thay đổi, ví dụ như thêm cột mới, xóa cột, thay đổi kiểu dữ liệu của một column nào đó.
  • Những câu truy vấn đang gây ra deadlock, blocking...

Kèm theo đó là những thông tin khác như user, thời gian...

Để tạo được những cảnh báo như trên, qua tìm hiểu tôi thấy ta có thể cấu hình đơn giản và dễ dàng dùng công nghệ WMI như các bài viết tham khảo bên dưới.


https://www.simple-talk.com/sql/database-administration/sql-server-alerts-soup-to-nuts/
http://technet.microsoft.com/en-us/library/ms186385.aspx
http://www.sqlservergeeks.com/blogs/Abhay_c/sql-server-bi/474/sql-server-real-time-monitoring-using-wmi-classes-part-2

Đây là hướng dẫn tạo alert khi có blocking xảy ra trong một khoảng thời gian nào đó
http://www.practicalsqldba.com/2012/07/sql-server-instant-blocking-alert-using.html

http://www.sqlservercentral.com/blogs/practicalsqldba/2012/07/16/sql-server-instant-deadlock-alert-using-wmi-in-your-mailbox/
http://technet.microsoft.com/en-us/library/ms186385.aspx
http://technet.microsoft.com/en-us/library/ms366332.aspx
http://technet.microsoft.com/en-us/library/ms186449%28v=sql.105%29.aspx (the importance link)
http://www.mssqltips.com/sqlservertip/3095/monitor-sql-server-databases-changes-using-wmi-alerts/?utm_source=dailynewsletter&utm_medium=email&utm_content=text&utm_campaign=20131217

Một ví dụ về tạo Alert khi dung lượng file của Tempdb tăng lên quá cao



Các câu truy vấn dùng WQL tạo Alert bằng WMI



-- for "CREATE DATABASE"
select * from CREATE_DATABASE
-- for "ALTER DATABASE"
select * from ALTER_DATABASE
-- for "DROP DATABASE"
select * from DROP_DATABASE
--
SELECT * FROM ALTER_TABLE
WHERE DatabaseName = "AdventureWorks2012" 
    AND SchemaName = "Person"
    AND ObjectName = "Person"
    AND ObjectType = "TABLE";

SELECT * FROM ALTER_TABLE 
WHERE DatabaseName = 'AdventureWorks' AND SchemaName = 'Sales' 
    AND ObjectType='Table' AND ObjectName = 'SalesOrderDetail'
--
SELECT * FROM DDL_DATABASE_LEVEL_EVENTS WHERE DatabaseName = 'AdventureWorks'

Tìm hiểu thêm ở đây: http://www.sqlservergeeks.com/blogs/Abhay_c/sql-server-bi/474/sql-server-real-time-monitoring-using-wmi-classes-part-2

0 comments:

Post a Comment

 
Toggle Footer