设为首页 收藏本站
查看: 971|回复: 0

[经验分享] SQL Server 2008中新增的Service Broker事件通知

[复制链接]

尚未签到

发表于 2015-6-29 16:02:11 | 显示全部楼层 |阅读模式
  SQL
Server 2008中SQL应用系列--目录索引

  
  Service Broker的事件通知
  事件通知是集成到Service Broker的功能,使用它可以在SQL
Server实例中异步捕捉SQL事件,将事件消息路由到特定的队列中。只需最小的系统开销,就可以跟踪发生在SQL
Server实例中的事件,比如用户登录、存储过程编译、权限修改、对象处理(例如对数据库、程序集、角色或表的Create/Alter/Drop事件)。
  不像创建自己的Service Broker应用程序,因为可以控制发起方组件,使用事件通知后只需创建队列和Service
Broker组件。用来捕捉和发送事件通知的发起方组件(消息类型和约定)已经内建在SQL Server中。
  使用CREATE EVENT NOTIFICATION(http://msdn.microsoft.com/en-us/library/ms189453.aspx)
  关于SQL Trace,相信很多人都用过Profiler,即SQL Server提供的查询跟踪器。关于SQL
Trace及profiler(即事件跟踪器)的更多用法,请查看MSDN:http://msdn.microsoft.com/en-us/library/ms187929.aspx
    [重要说明]:事件通知功能与SQL Trace相似,不同之处在于,它是异步的,并且对SQL
Server实例整体性能影响最小。

  下面是一个示例,演示了如何通过事件通知捕捉所有在SQL Server实例中执行的Create Login、Alter Login、和Drop
Login命令。




/**************************downmoon 3w@live.cn***********************/
-- Capturing Login Commands
--创建示例数据库
IF EXISTS (SELECT name FROM sys.databases WHERE name = 'EventTracking')
drop database EventTracking
GO
CREATE DATABASE EventTracking
GO
USE EventTracking
GO
--创建队列
Create QUEUE SQLEventQueue
WITH STATUS=ON;
GO
--创建服务,并关联到内建的事件通知约定
CREATE SERVICE [//AP4/TrackLoginModificationService]
ON QUEUE SQLEventQueue
([http://schemas.microsoft.com/SQL/Notifications/PostEventNotification]);
GO
--对系统目录视图sys.databases进行查询
select service_broker_guid
from sys.databases
WHERE name = 'EventTracking'
/*
service_broker_guid
18FD2712-E551-4B6A-BC88-58E16D8D5BCD
*/
--在Server范围内创建事件通知来跟踪所有登录名的创建、修改和删除操作

----DROP EVENT NOTIFICATION EN_LoginEvents
----ON Server;

Create EVENT NOTIFICATION EN_LoginEvents
ON SERVER
FOR CREATE_LOGIN, ALTER_LOGIN, DROP_LOGIN
TO SERVICE '//AP4/TrackLoginModificationService',
'18FD2712-E551-4B6A-BC88-58E16D8D5BCD';
--测试新的事件通知,创建一个登录名
----DROP login TrishelleN
----go

Create LOGIN TrishelleN WITH PASSWORD = 'AR!3i2ou4'
GO
--使用Select或Recieve(其中Recieve会删除队列中的事件消息)查询队列
SELECT CAST(message_body as xml) EventInfo
FROM dbo.SQLEventQueue
/*

DROP_LOGIN
2011-05-05T17:10:50.610
52
AP4\AGRONET09
AP4\Administrator
TrishelleN
LOGIN
us_english
master
SQL Login
ukcT55ooZECq0+bpBuvi1A==


DROP login TrishelleN



*/
http://yuzrqa.bay.livefilestore.com/y1pIq_U1jS8K80fFuR5CuMONsrs2K-ILgZlHRhB1eGD8etUI28u8MBxGpXfBtYl-0rW7WHMNn2AnjXMOrOIykCaYTJ6qfscl0ea/2011-5-5%2017-12-41.png?psid=1

  小结
  本例演示了通过执行如下步骤来设置事件通知:
  1、在已有数据库中创建新队列
  2、创建绑定到新队列和内建事件通知约定的新服务
  3、使用CREATE EVENT NOTIFICATION命令跟踪一个或多个事件或事件组
  事件通知功能提供了跟踪SQL Server实例、数据库、或Service
Broker应用程序级别的活动的低开销的方法。正如示例中所见,跟踪事件只需要极少量的代码。这个新功能对于IT安全或业务级别审计需求特别有用。例如,当捕获到登录名创建事件时,也会捕获到创建它的用户,以及登录名的类型(SQL登录名)、默认数据库、语言和新登录名的安全标识符。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-81619-1-1.html 上篇帖子: SQL Server 2008 评估期已过解决方法 下篇帖子: SQL Server(2005) 数据恢复--Log Explorer
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表