![]() |
|

|
|
By: Basit Farooq | Read Comments (2) | Related Tips: More > Service Broker |
The SQL Server Database Engine returns the following error message after a service broker enabled database is restored to the same SQL Server instance with a different database name and the T-SQL command (ALTER DATABASE 'DatabaseName' SET ENABLE_BROKER) is issued to enable the Service Broker for this restored database.
This error happens when a Service Broker enabled database is restored or copied to the same SQL Server instance where the original database resides, as a result, both databases end up having the same Service Broker identifier. When we try to enable Service Broker for the restored database, we will receive this error message. Obviously, this also causes conflicts and existing service broker applications get disturbed.
As you may know, each database on a SQL Server instance contains a Service Broker identifier, which is used by a Service Broker application to uniquely identify the Service Broker instance on the network. This unique identifier also helps the Service Broker application to correctly route and deliver the Service Broker messages to the correct instance of SQL Server. The "service_broker_guid" column of sys.databases catalog view returns this unique identifier value for each database on SQL Server.
For example, when I restored a copy of AdventureWorks2012 database as AdventureWorks2012QA on the same instance where AdventureWorks2012 resides, after the restore both databases end up having the same broker identifier (See below):
USE [master] GO SELECT [name] ,[is_broker_enabled] ,[service_broker_guid] FROM [sys].[databases] GO

As can be noticed from above, Service Broker is disabled on AdventureWorks2012QA database after the restore.
When I tried to enable enable Service Broker on AdventureWorks2012QA database using "ALTER DATABASE [AdventureWorks2012QA] SET ENABLE_BROKER" T-SQL statement, I get the below error:

The only way to fix this error is to reinitialize the Service Broker identifier. You can do this as follow:
USE [master] GO ALTER DATABASE [DatabaseName] SET NEW_BROKER GO
This statement performs the following actions, upon execution:
For example, I executed this statement to enable Service Broker for the AdventureWorks2012QA database as follow:

After performing this, if you query the sys.databases catalog again, you'll notice that Service Broker is enabled and a new Service Broker identifier is specified for the database. See below for our example:

As you can see from the above, after executing the ALTER DATABASE statement, the new Service Broker identifier is assigned, and Service Broker is enabled for the AdventureWorks2012QA database.
| Wednesday, October 24, 2012 - 7:44:45 AM - Piotr | Read The Tip |
|
You can set new_broker option as a part of RESTORE DATABASE |
|
| Wednesday, January 30, 2013 - 10:41:53 AM - Pasqui | Read The Tip |
|
Thank u, very clear and useful |
|
|
privacy | disclaimer | copyright | advertise | about authors | contribute | feedback | giveaways | user groups Some names and products listed are the registered trademarks of their respective owners. Edgewood Solutions LLC | MSSharePointTips.com | MSSQLTips.com |