none
Service Broker事件通知功能 RRS feed

  • 问题

  • -- Capturing Login Commands
    --创建示例数据库
    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'

    /*/*------------------------
    select service_broker_guid from sys.databases WHERE name = 'EventTracking'
    ------------------------*/
    service_broker_guid
    ------------------------------------
    D7B127E2-9FF0-4BFF-9D41-978F178553C9

    (1 行受影响)*/
    --在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','D7B127E2-9FF0-4BFF-9D41-978F178553C9';
     --测试新的事件通知,创建一个登录名
     ----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
    ------------------------*/
    EventInfo
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    (0 行受影响)
     为什么是空值 ? 能给分析原因出在哪里吗?


    星光总能为我指引方向

    2012年5月23日 2:05

答案

  • 你有配置有正确配置 Service broker endpoint 么?

    如果有正确配置,那么在命令提示下用 telnet 测试一下,看看端口是否打开

     telnet ip 端口

    如果不通,那么在 ip 对应的服务器命令提示符下用 netstat -na 看下对应的端口是否在监听状态,如果是,那么可能是防火墙限制了访问

    2012年5月24日 4:29

全部回复

  • 直接执行你的脚本(Service Broker ID 改成我的数据库对应的)

    测试没有问题,可以从 Queue 中查到创建 Login 的记录

    2012年5月23日 2:17
  • SERVICE Broker ID :D7B127E2-9FF0-4BFF-9D41-978F178553C9 就是对应我的EventTracking ID ,所以我不知道问题出错在哪里?


    星光总能为我指引方向

    2012年5月23日 2:24
  • 可以去查查 transmission_queue ,看看是不是在发送处理中

    SELECT * FROM msdb.sys.transmission_queue

    2012年5月23日 2:25
  • CREATE ROUTE RemotServiceRoute
     WITH SERVICE_NAME = 'RemotServiceService',
     ADDRESS = 'tcp://192.168.100.205:4022';
    GO

    SQL2008两台服务器之间SSB通讯配置

    本地操作执行以上代码,能告诉我 这个地址(192.168.100.205:4022')指的是远程服务器的吗?


    星光总能为我指引方向

    2012年5月23日 7:13
  • 问题跟上:看看能否给指点上面提出的问题

    SQL2008两台服务器之间SSB通讯配置

    在主机操作,

    CREATE ROUTE RemotServiceRoute
     WITH SERVICE_NAME = 'RemotServiceService',
     ADDRESS = 'tcp://192.168.100.205:4022';----(是备机的IP地址吗)?
    GO


    星光总能为我指引方向

    2012年5月24日 1:32
  • ADDRESS 里面指定的是你的  WITH SERVICE_NAME = 'RemotServiceService', 这里面指定的 Service 所在的服务器的 IP 和 SSB endpoint 的端口

    2012年5月24日 2:15
  • 同一个实例是不需要创建这个的

    如果跨实例(包括同一台机器上的不同实例),则需要先配置 Service Broker endpoint (这个里面涉及端口和身份验证方式),然后再在通讯的两端,为对方的Service创建 Remote Service,如果要求加密,还需要创建 remote service binding

    2012年5月24日 2:18
  • ADDRESS 里面指定的是你的  WITH SERVICE_NAME = 'RemotServiceService', 这里面指定的 Service 所在的服务器的 IP 和 SSB endpoint 的端口很高兴你的解答; 是跨实例的,你的意 ADDRESS 里面指定的是你的  WITH SERVICE_NAME = 'RemotServiceService', 指的是另外一台实力的IP地址码?
    最后执行报出这个错误信息:
    SELECT transmission_status  FROM SYS.transmission_queue

    transmission_status
    Connection attempt failed with error: '10061(由于目标计算机积极拒绝,无法连接。)'.
    Connection attempt failed with error: '10061(由于目标计算机积极拒绝,无法连接。)'.
    Connection attempt failed with error: '10061(由于目标计算机积极拒绝,无法连接。)'.
    Connection attempt failed with error: '10061(由于目标计算机积极拒绝,无法连接。)'.

    星光总能为我指引方向

    2012年5月24日 3:20
  • 你有配置有正确配置 Service broker endpoint 么?

    如果有正确配置,那么在命令提示下用 telnet 测试一下,看看端口是否打开

     telnet ip 端口

    如果不通,那么在 ip 对应的服务器命令提示符下用 netstat -na 看下对应的端口是否在监听状态,如果是,那么可能是防火墙限制了访问

    2012年5月24日 4:29