linq 在SQL Server 2008中启用Service Broker

bxfogqkk  于 6个月前  发布在  SQL Server
关注(0)|答案(7)|浏览(83)

我正在集成SqlCacheDependency以在我的LinqToSQL脚本中使用。
我正在使用一个扩展类,用于在这里找到的Linq查询-http://code.msdn.microsoft.com/linqtosqlcache
我把代码连接起来,当我打开页面时,我得到了这个异常-
未启用当前数据库的SQL Server Service Broker,因此不支持查询通知。如果要使用通知,请为此数据库启用Service Broker。
它来自全球的这一事件。asax

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 tablename SET ENABLE_BROKER,但它永远不会结束并永远运行,我必须手动停止它。
1.一旦我在SQL Server 2008中设置了这个设置,它会过滤到我的DataContext吗?或者我也需要在那里配置一些东西吗?
谢谢你的帮助
特吕吉利

q35jwt9p

q35jwt9p1#

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

ALTER DATABASE [DBNAME] SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE

字符串

nwnhqdif

nwnhqdif2#

在SQL Server 2012中,您可以转到Properties-> Options -> Service Broker


的数据

q7solyqu

q7solyqu3#

这里是如何做到这一点,如果你是禁用或您需要恢复备份,这似乎禁用它.
只要运行这个脚本,它将杀死所有进程的数据库正在使用(为什么你在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

字符串

monwx1rj

monwx1rj4#

必须删除到DB的所有连接,并使用具有权限的用户帐户来启用代理服务。
以下是理想的(替换databasename):

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;

字符串
另外,我建议创建一个新的角色和具有适当权限的用户帐户(替换数据库登录):

--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';

wvt8vs2t

wvt8vs2t5#

我们可以通过ALTER DATABASE语句和数据库属性>选项> Service Broker > Broker Enable:True/False启用Broker服务。
但这里的问题,而启用代理:进程正在运行与特定的数据库,我们必须杀死那些,只有在此之后,我们才能启用代理服务.回答**@JGilmartin**将完美的工作,但要确保它会杀死所有正在进行的进程的数据库,在生产上使用此脚本之前,请检查流量或进程的严重性.

4c8rllxm

4c8rllxm6#

  1. Service Broker外发错误。图1
    1.要修复此问题,请使用SSMS启用Service broker,图2
    1.在设置为true之后,Service Broker错误现在应该消失了,请参见我的图3

lnxxn5zx

lnxxn5zx7#

如果代理已经启用,请尝试以下操作:

ALTER DATABASE <DBName> SET NEW_BROKER WITH ROLLBACK IMMEDIATE;

字符串

相关问题