到數據庫的所有連接都必須被丟棄,並與權限的用戶帳戶用於啓動代理服務。
以下是理想的(更換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';
其他有用信息:查看是否啓用運行... SELECT is_broker_enabled FROM sys.databases WHERE name ='Database name'; - 其中「數據庫名稱」是要查詢的數據庫的名稱。' – Myster 2011-05-27 02:07:08