Log-Shipping: Почему вы выбрали режим "Нет восстановления"?
При настройке LogShipping для SQL Server вы можете выбрать, чтобы вторичная база данных находилась в режиме отсутствия восстановления или в режиме ожидания. Нет восстановления означает, что у вас нет доступа к базе данных, когда идет судоходство. В режиме ожидания предоставляется доступ только для чтения, и если вы выберите вариант отключения пользователей всякий раз, когда произойдет восстановление, похоже, не будет мешать процессу доставки журнала. Это выглядит для меня дополнительным преимуществом режима ожидания, но, насколько я вижу, в документе упоминаются отрицательные последствия.
Поэтому мне интересно, почему кто-то решил использовать режим No Recovery? Единственные правдоподобные причины, о которых я могу думать, - это режим ожидания, вызвавший значительное ухудшение производительности (но в документах ничего не упоминается), или если есть какое-то требование безопасности, чтобы активно запрещать кому-либо видеть содержимое вторичной базы данных (например, что кажется редким/маловероятным).
Может кто-нибудь просветить меня, каково преимущество выбора режима отсутствия восстановления?
Ответы
Ответ 1
Когда вы используете режим NORECOVERY
, целевой базе данных не будет предоставлен доступ, поэтому базе данных не нужно заботиться о незавершенных транзакциях. Журнал можно просто восстановить "как есть" и оставить в этом состоянии.
Когда вы используете режим STANDBY
, база данных восстанавливается как NORECOVERY
, затем анализирует и откатывает все незафиксированные транзакции в журнале. Затем он может предоставлять доступ только для чтения пользователям. Когда следующий журнал будет восстановлен, база данных отключит всех пользователей и перематывает незавершенные транзакции из последнего журнала вперед перед восстановлением.
Как вы можете видеть, STANDBY
имеет потенциально большие дополнительные накладные расходы при восстановлении в зависимости от объема транзакции.
Подробнее в этой статье в My World of SQL.