Назад | Перейти на главную страницу

Соединение SQL с зеркальным отображением все еще работает после аварийного переключения

У меня есть приложение службы Windows, которое установлено на двух серверах, SQL01 и SQL02. На обоих серверах есть SQL-сервер (X1 и X2) с одинаковым содержимым. Партнерство по зеркалированию было установлено для одной базы данных, которая называется Интерфейс.

Обе службы подключаются к своей локальной базе данных и, следовательно, не знают друг друга. Сервис довольно прост, он читает из базы данных и выполняет некоторые манипуляции перед отправкой в ​​удаленную базу данных (то же самое для обоих экземпляров). Простая функция используется, чтобы определить, доступна ли база данных или нет, с помощью фиктивного SELECT. Если ответ базы данных, значит он доступен, иначе нет.

Когда мы начали все это в первый раз, очевидно, что работает только одна база данных (из-за партнерства). Однако, когда мы выполняем аварийное переключение вручную, кажется, что база данных все еще доступна! если я перезапускаю службу, она перестает делать это и перезапускается, чтобы работать должным образом.

Насколько я могу судить, я не поддерживаю никаких соединений с базой данных. Я открываю и закрываю их, как только закончу с запросом.

Кто-нибудь знает, что может происходить?

Спасибо,

Что происходит, так это то, что при успешном подключении к первичному серверу SQL Server отправляет партнера по отработке отказа клиенту, который затем кэширует этого партнера по отработке отказа на стороне клиента. И это то, что будет использоваться при отказе. Однако, когда основной сервер не работает при первоначальном подключении, клиент будет пробовать партнера по отработке отказа в строке подключения. Если это будет успешным, SQL Server отправит клиенту «нового» партнера по аварийному переключению, который затем кэширует этого партнера по аварийному переключению на стороне клиента. Это означает, что то, что было исходным первичным сервером, теперь хранится на клиенте в качестве партнера по отработке отказа.

http://blogs.msdn.com/b/spike/archive/2010/12/08/clarification-on-the-failover-partner-in-the-connectionstring-in-database-mirror-setup.aspx

Другими словами, клиент SQL автоматически обрабатывает отработку отказа (вам необходимо повторить все транзакции, которые выполняются во время отработки отказа), но если вы не укажете партнера по отработке отказа и принципал недоступен, тогда это когда релевантная часть строки подключения «Партнер по отработке отказа».