在SQL Server 2008中启用Service Broker

我正在整合SqlCacheDependency在我的LinqToSQL数据上下文中使用。

我在这里使用Linq查询的扩展类 – http://code.msdn.microsoft.com/linqtosqlcache

我已经连接了代码,当我打开页面,我得到这个exception –

“当前数据库的SQL Server Service Broker未启用,因此不支持查询通知,如果希望使用通知,请为此数据库启用Service Broker。”

它来自全球这个事件

protected void Application_Start() { RegisterRoutes(RouteTable.Routes); //In Application Start Event System.Data.SqlClient.SqlDependency.Start(new dataContextDataContext().Connection.ConnectionString); } 

我的问题是…

  1. 如何在我的SQL Server 2008数据库中启用Service Broker? 我试图运行这个查询.. ALTER DATABASE表名SET ENABLE_BROKER但它永远不会结束,永远运行,我必须手动停止它。

  2. 一旦我在SQL Server 2008中有这个设置,它会过滤到我的DataContext,还是我需要在那里configuration一些东西?

谢谢你的帮助

Truegilly

如果其他人正在寻找解决这个问题的方法,下面的命令对我来说很好。 它释放到数据库的所有其他连接,而不是等待。

 ALTER DATABASE [DBNAME] SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE 

好的,这里是如何做到这一点,如果你的禁用,或者你需要恢复备份,似乎禁用它。

只是运行这个脚本,它会杀死一个数据库正在使用的所有进程(为什么你在2008年手动杀死进程的不像2005年是超出我),然后设置经纪人

 USE master go DECLARE @dbname sysname SET @dbname = 'YourDBName' DECLARE @spid int SELECT @spid = min(spid) from master.dbo.sysprocesses where dbid = db_id(@dbname) WHILE @spid IS NOT NULL BEGIN EXECUTE ('KILL ' + @spid) SELECT @spid = min(spid) from master.dbo.sysprocesses where dbid = db_id(@dbname) AND spid > @spid END ALTER DATABASE @dbname SET ENABLE_BROKER 

在Sql Server 2012中,你可以去Properties-> Options -> Service Broker

启用S​​ervice Broker

与数据库的所有连接必须被删除,并且具有用于启用代理服务的权限的用户帐户。

以下将是理想的(replacedatabasename ):

  IF ((SELECT is_broker_enabled FROM sys.databases WHERE name = '%DATABASE_NAME%') = 1) BEGIN ALTER DATABASE %DATABASE_NAME% SET NEW_BROKER WITH ROLLBACK IMMEDIATE; END ALTER DATABASE %DATABASE_NAME% SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE; 

此外,我build议创build一个新的angular色和用户帐户与适当的权限(取代数据库login):

  --DBA creates a new role if not exists (select 1 from sys.database_principals where name='sql_dependency_subscriber' and Type = 'R') begin EXEC sp_addrole 'sql_dependency_subscriber' end --Minimum Required Permissions needed for SQLDependancy Notification to work GRANT CREATE PROCEDURE to sql_dependency_subscriber; GRANT CREATE QUEUE to sql_dependency_subscriber; GRANT CREATE SERVICE to sql_dependency_subscriber; GRANT REFERENCES on CONTRACT::[http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification] to sql_dependency_subscriber ; GRANT VIEW DEFINITION TO sql_dependency_subscriber; --Minimum Required Permissions needed for SQLDependaney Notification to work GRANT SELECT to sql_dependency_subscriber; GRANT SUBSCRIBE QUERY NOTIFICATIONS TO sql_dependency_subscriber; GRANT RECEIVE ON QueryNotificationErrorsQueue TO sql_dependency_subscriber; GRANT REFERENCES on CONTRACT::[http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification] to sql_dependency_subscriber ; EXEC sp_addrolemember 'sql_dependency_subscriber', '%DATABASE_LOGIN%'; EXEC sp_addrolemember 'sql_dependency_subscriber', 'sqldp';