关于数据库恢复后Service Broker不能使用的问题
来源:互联网 发布:appscan sql文件注入 编辑:程序博客网 时间:2024/06/05 03:06
如果我们在服务器A上有一个数据库DB1,该数据库启用了Service Broker并部署了消息队列,我们把DB1备份后到服务器B上进行恢复,假设恢复后的数据库为DB2,这时我们会发现DB2上的Service broker不起作用了。
BOL上有这么一段话:
Service Broker 标识符在同一网络上的所有实例中应是唯一的。否则,消息可能被误传。
那么怎么能让数据库DB2也能使用Service Broker呢?方法很简单:
第1种方法是在Restore database 语句里指明New_Broker选项;
第2种方法是在恢复后的数据库里执行:
ALTER DATABASE DB2 SET NEW_BROKER
ALTER DATABASE DB2 SET ENABLE_BROKER
这样就可以启用DB2的Service Broker了。
如果此时还不能启用,请查看一下SQL Server的日志,如果显示下面的信息:
An exception occurred while enqueueing a message in the target queue. Error: 15517, State: 1. Cannot execute as the database principal because the principal "dbo" does not exist, this type of principal cannot be impersonated, or you do not have permission.
这是因为最初创建数据库的Windows用户不再可用的缘故,所以需要改变数据库的拥有者到一个合法的登录,因此执行下面的语句后才能启用DB2的Service Broker:
ALTER AUTHORIZATION ON DATABASE::DB2 TO sa;
这里需要把DB2改为你自己的数据库名称即可。
另外,你也可以使用sp_changedbowner来更改该数据库的拥有者,不过还是建议你使用上面的方法。sp_changedbowner可能会在以后的版本里不再提供。
注意:
启动任何数据库中的 SQL Server Service Broker 都需要数据库锁。所以当有其他用户连到数据库后,你可能需要等待这些用户断开后才能开启Service Broker,在此期间会一直等待。
若要启动 msdb 数据库中的 Service Broker,首先请停止 SQL Server 代理,这样 Service Broker 才能获得必需的锁。
BOL上有这么一段话:
Service Broker 标识符在同一网络上的所有实例中应是唯一的。否则,消息可能被误传。
那么怎么能让数据库DB2也能使用Service Broker呢?方法很简单:
第1种方法是在Restore database 语句里指明New_Broker选项;
第2种方法是在恢复后的数据库里执行:
ALTER DATABASE DB2 SET NEW_BROKER
ALTER DATABASE DB2 SET ENABLE_BROKER
这样就可以启用DB2的Service Broker了。
如果此时还不能启用,请查看一下SQL Server的日志,如果显示下面的信息:
An exception occurred while enqueueing a message in the target queue. Error: 15517, State: 1. Cannot execute as the database principal because the principal "dbo" does not exist, this type of principal cannot be impersonated, or you do not have permission.
这是因为最初创建数据库的Windows用户不再可用的缘故,所以需要改变数据库的拥有者到一个合法的登录,因此执行下面的语句后才能启用DB2的Service Broker:
ALTER AUTHORIZATION ON DATABASE::DB2 TO sa;
这里需要把DB2改为你自己的数据库名称即可。
另外,你也可以使用sp_changedbowner来更改该数据库的拥有者,不过还是建议你使用上面的方法。sp_changedbowner可能会在以后的版本里不再提供。
注意:
启动任何数据库中的 SQL Server Service Broker 都需要数据库锁。所以当有其他用户连到数据库后,你可能需要等待这些用户断开后才能开启Service Broker,在此期间会一直等待。
若要启动 msdb 数据库中的 Service Broker,首先请停止 SQL Server 代理,这样 Service Broker 才能获得必需的锁。
From: http://www.windbi.com/showtopic-789.aspx
- 关于数据库恢复后Service Broker不能使用的问题
- 关于重装系统后后,SQL Server2000数据库的恢复问题
- 关于重装系统后后,SQL Server2000数据库的恢复问题
- TFS - 恢复数据库后,Analysis数据库无法使用的问题
- 关于Qt使用SQL模型类数据修改后不能写入数据库的问题
- 数据库开启 Service broker
- Service Broker 无法工作的问题修复
- 解决Service Broker连接出错的问题
- 关于重新编译内核后VirtualBox不能使用的问题
- 未启用当前数据库的 SQL Server Service Broker,因此查询通知不受支持。如果希望使用通知,请为此数据库启用 Service Broker
- 未启用当前数据库的 SQL Server Service Broker,因此查询通知不受支持。如果希望使用通知,请为此数据库启用 Service Broker
- 未启用当前数据库的 SQL Server Service Broker,因此查询通知不受支持。如果希望使用通知,请为此数据库启用 Service Broker
- 使用SqlDependency时提示当前数据库未启用Service broker
- 使用SqlDependency时提示当前数据库未启用Service broker
- 使用SqlDependency时提示当前数据库未启用Service broker
- 使用SqlDependency时提示当前数据库未启用Service broker
- Service Broker 的实现
- 关于更改ip后dbconsole服务不能启动(em不能使用)问题的根本解决方法
- 使用数据库SQL语句获得当前月的天数
- 天天进步
- 向多个Server上拷贝文件
- 系统程序员成长计划-组合的威力(四)
- java连接mysql
- 关于数据库恢复后Service Broker不能使用的问题
- Erlang程序的跨平台问题
- 加密壳的一般脱壳步骤与实例演示
- snmp监控window
- C#命名规范
- ARM处理器上电/复位操作
- 深入浅出C++之private/public/protected
- 将Htm和Html文件图标改回默认图标
- Java 小例子:通过 Socket 发送和接收文件