vts*_*123 31 sql-server service-broker database-restore sql-server-2008
我有启用Service Broker的DataBase.然后我想在程序中从其他数据库的备份恢复我的数据库,但在恢复(我恢复现有数据库名称)后,我的方法,whitch启用Service Broker,放置此错误:
Msg 9772, Level 16, State 1, Line 1
The Service Broker in database "ServeDB2" cannot be enabled because there is already an enabled Service Broker with the same ID.
Msg 5069, Level 16, State 1, Line 1
ALTER DATABASE statement failed.
Run Code Online (Sandbox Code Playgroud)
这是我的方法:
public void TurnOnBroker()
{
if (!this.database.BrokerEnabled)
{
this.server.KillAllProcesses(this.database.Name);
this.database.BrokerEnabled = true;
this.database.Alter();
RefreshConnection();
}
}
Run Code Online (Sandbox Code Playgroud)
我应该在这里解决什么?有什么建议吗?
DAE*_*MYO 63
记下这些选项
ALTER DATABASE mydb SET ENABLE_BROKER
ALTER DATABASE mydb SET DISABLE_BROKER
ALTER DATABASE mydb SET NEW_BROKER
Run Code Online (Sandbox Code Playgroud)
如果你得到这样的东西已经是一个具有相同ID的启用的Service Broker,请转到NEW_BROKER
小智 31
ALTER DATABASE [Database_name] SET NEW_BROKER WITH ROLLBACK IMMEDIATE;
Run Code Online (Sandbox Code Playgroud)
这将创建新的服务代理
小智 5
运行此查询以找出哪些其他数据库正在使用与您正在使用的数据库相同的服务代理(例如,对于名为 DATABASE_NAME 的数据库)...
SELECT name, is_broker_enabled, service_broker_guid FROM sys.databases
WHERE service_broker_guid IN (SELECT service_broker_guid FROM sys.databases where name = 'DATABASE_NAME');
Run Code Online (Sandbox Code Playgroud)
... 返回 ...
name, is_broker_enabled, service_broker_guid
DATABASE_NAME_OTHER, 1, KBHDBVJH-SDVHIOHD-SODIVDIOH-UHDSV
DATABASE_NAME_ANOTHER, 0, KBHDBVJH-SDVHIOHD-SODIVDIOH-UHDSV
DATABASE_NAME, 0, KBHDBVJH-SDVHIOHD-SODIVDIOH-UHDSV
Run Code Online (Sandbox Code Playgroud)
然后运行以下查询以获取数据库的新代理...
ALTER DATABASE DATABASE_NAME SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
ALTER DATABASE DATABASE_NAME SET NEW_BROKER;
ALTER DATABASE DATABASE_NAME SET MULTI_USER;
Run Code Online (Sandbox Code Playgroud)
再次运行第一个查询,您的数据库应该是列表中唯一的一个...
SELECT name, is_broker_enabled, service_broker_guid FROM sys.databases
WHERE service_broker_guid IN (SELECT service_broker_guid FROM sys.databases where name = 'DATABASE_NAME');
Run Code Online (Sandbox Code Playgroud)
……现在回来了……
name, is_broker_enabled, service_broker_guid
DATABASE_NAME, 1, ASJCBUHBC-7UIOSUI-IUGGUI87-IUGHUIG
Run Code Online (Sandbox Code Playgroud)
我找到了一个非常简单的解决方案 - 只需分配新的服务代理,如下所示:
public void TurnOnBroker()
{
if (!this.database.BrokerEnabled)
{
this.server.KillAllProcesses(this.database.Name);
string brokerCommand = String.Format("ALTER DATABASE {0} SET NEW_BROKER", this.database.Name);
this.database.ExecuteNonQuery(brokerCommand);
RefreshConnection();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
46848 次 |
| 最近记录: |