У меня проблема с правильным переключением на зеркальную базу данных. Когда я подключен к основной базе данных (dbx) (зеркальное отображение включено и настроено), и я перехожу через основную базу данных (отключаю SQL Server для имитации сбоя), я больше не могу отправлять запросы без сбоя. Это ожидается, так как предыдущее соединение теперь потеряно.
Я хотел бы просто закрыть свои соединения и дескрипторы и заново установить новое соединение, используя ту же строку соединения, и повторно подключиться к зеркальной базе данных (dby, которая сейчас является основной базой данных).
Моя строка подключения выглядит следующим образом:
Драйвер = {Собственный клиент SQL}; Сервер = dbx; Failover_Partner = dby; База данных = db; Uid = uid; Pwd = pwd; Сеть = DBMSSOCN;
Проведя исследование, я узнал, что параметр Failover_Partner в соединении почти ничего не стоит. Он используется только в том случае, если основной сервер не работает и новое соединение устанавливается впервые. По какой-то причине Failover_Partner перезаписывается внутри, когда устанавливается соединение с принципалом, и вместо него используется mirroring_partner_instance, найденное в таблице sys.database_mirroring. Поэтому, когда я указываю Failover_Partner как dby, после того, как я устанавливаю соединение, я запрашиваю, что он считает партнером по отказоустойчивости, и он возвращает INSTANCE-имя партнера по отказоустойчивости, а не DNS-имя (dby).
Вот проблема, я не могу использовать имя INSTANCE в качестве партнера по отработке отказа. Мне необходимо использовать DNS-имя в качестве партнера по отработке отказа.
Так что мой вопрос (ы) заключается в следующем:
Я нашел ответ на этот вопрос в случае, если у кого-то есть такая же или похожая проблема.
Мне пришлось изменить свойство @@ SERVERNAME в SQL. Для него было установлено внутреннее имя экземпляра WIN -… компьютера, и я смог удалить его и добавить желаемое имя сервера с помощью следующих команд:
Получить текущее имя сервера (WIN_NAME)
SELECT @@SERVERNAME
Бросьте имя
SP_DropServer 'WIN_NAME'
GO
SP_AddServer 'SERVER_NAME',local
GO
Перезапустите SQL Server, чтобы изменения вступили в силу.