Включение посредника после восстановления базы данных Sql Server

У меня есть база данных с включенным компонентом Service Broker. Затем я хочу восстановить свою базу данных в программе из резервной копии другой базы данных, но после восстановления (я восстанавливаю по существующему имени базы данных) мой метод, включающий компонент 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.

Это мой метод:

public void TurnOnBroker()
{
    if (!this.database.BrokerEnabled)
    {
        this.server.KillAllProcesses(this.database.Name);
        this.database.BrokerEnabled = true;
        this.database.Alter();
        RefreshConnection();
    }
}

Что мне здесь исправить? Любые предложения?

31
задан marc_s 16 August 2010 в 08:12
поделиться

2 ответа

Я нашел для этого очень простое решение - просто назначьте нового брокера служб, например:

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();
        }
    }
4
ответ дан 27 November 2019 в 21:27
поделиться

Каждая база данных имеет уникальный идентификатор, используемый Service Broker. Этот идентификатор должен быть уникальным для всех баз данных в экземпляре Sql Server (ну, он должен быть уникальным в глобальном масштабе, но у Sql Server нет способа обеспечить это). При восстановлении базы данных у вас есть возможность отключить компонент Service Broker в восстановленной базе данных, включив его с помощью GUID резервной базы данных (чтобы он мог выполнять обработку сообщений из резервной базы данных) или назначить ему новый GUID. . Вы пытаетесь выполнить второй вариант, пока у вас все еще есть старая база данных, и вы сталкиваетесь с конфликтом GUID.

См. здесь для получения дополнительной информации.

8
ответ дан 27 November 2019 в 21:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: