Я разрабатываю архитектуру SQL Server с двумя серверами SQL, и я планирую реализовать зеркальное отображение базы данных между ними. Мне нужно минимизировать потерю данных в случае выхода из строя сервера (по любой причине). Я смотрю на режим повышенной безопасности SQL Server 2008 без автоматического переключения при отказе. Существует только одна рабочая база данных, которую необходимо зеркалировать, и два сервера будут на одном сайте.
В онлайн-документации указано, что в этом режиме, когда основной сервер выходит из строя, я могу заставить зеркало стать новым основным сервером, но с риском потери данных. Тогда мой вопрос: в чем смысл зеркалирования, если может произойти потеря данных (минимизация?), И что я могу сделать, чтобы свести на нет (а не минимизировать) эту потерю? Есть ли режим, в котором основной сервер не фиксирует свои данные до тех пор, пока они не будут сначала успешно записаны на зеркало?
Кроме того, к серверу SQL обычно будут обращаться клиентские приложения, которые будут настроены для подключения к определенному серверу по имени. Если есть зеркальное отображение базы данных, какое имя сервера следует использовать для доступа к зеркалу, должны ли клиенты даже знать о существовании зеркального сервера?
РЕДАКТИРОВАТЬ: должны поддерживаться следующие сценарии:
Что касается настройки зеркалирования, которая допускает потерю данных, компромисс - это производительность. То есть, если вы допускаете потерю данных, клиентскому приложению не нужно ждать фиксации транзакции у партнера по зеркалированию, прежде чем она будет считаться «выполненной». И для многих топологий зеркального отображения партнер находится в другой географической области, чем принципал. Так что задержка может быть нетривиальной. Транзакции помещаются в очередь у принципала и доставляются, когда это возможно. Но эта доставка асинхронна.
SQL server 2008 имеет два режима работы: один - это режим высокой безопасности, в котором зеркальное отображение является синхронным: транзакция не фиксируется до тех пор, пока она не будет записана в зеркало. В этом режиме - единственные данные, которые вы можете потерять в результате незавершенной транзакции.
Второй режим - высокопроизводительный. В этом режиме транзакция помечается как завершенная для принципала как можно скорее, не дожидаясь зеркала. Это позволит системе продолжить работу, даже если соединение между принципалом и зеркалом будет временно прервано, но, конечно, вы потеряете все транзакции, которые еще не были скопированы, если вы выполните аварийное переключение вручную.
Подробнее см. По этой ссылке: http://technet.microsoft.com/en-us/library/ms189852.aspx