我正在集成在我的Linqtosql DataContext中使用的SQLCACHEDEPTINCY。

我正在使用此处找到的LINQ查询类的扩展类 - http://code.msdn.microsoft.com/linqtosqlcache

我已经连接了代码,当我打开页面时,我会得到此例外 -

“未启用当前数据库的SQL Server服务代理,因此不支持查询通知。如果您想使用通知,请启用此数据库的服务代理。”

它来自global.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数据库中启用服务经纪?我试图运行此查询。.Alter数据库TableName SET enable_broker,但它永远不会结束并永远运行,我必须手动停止它。

  2. 一旦我在SQL Server 2008中使用此设置后,它会过滤到我的DataContext,还是我也需要在那里配置一些东西?

谢谢你的帮助

truegilly

有帮助吗?

解决方案 3

好的,如果您的残疾人或您需要还原备份,这是如何做到这一点的,这似乎可以禁用它。

只需运行此脚本,它将杀死数据库正在使用的所有过程(为什么您在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

其他提示

如果其他任何人都在寻找解决此问题的解决方案,则以下命令对我有用。它发布到数据库的所有其他连接而不是等待。

ALTER DATABASE [DBNAME] SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE

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

Enable Service Broker

必须删除与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';
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top