Представьте, что у нас есть два узла, участвующих в SQL 2012 AO. Это тестовый экземпляр. Во время одной из операций по восстановлению индекса журнал был очень большой (250 ГБ). Мы не можем создать резервную копию из-за ограниченного пространства. Что делать, если мы создадим резервную копию Tlog до Nul (просто чтобы сжать ее) - будет ли это прерываться Always On?В конфигурации SQL Server Always ON - будет ли резервное копирование журнала транзакций на Nul breaks Always On configuration?
ответ
AlwaysOn - это (маркетинговый) термин, охватывающий как группы доступности (AG), так и экземпляры отказоустойчивых кластеров (FCI). Из контекста, я полагаю, вы спрашиваете об AG?
Для обоих FCI и AG короткий ответ тот же: выполнение резервных копий журнала транзакций (независимо от места назначения) не «ломает» ваши возможности HA. Тем не менее, я хотел бы настоятельно рекомендовать вам НИКОГДА НИКОГДА НЕ ЗАВЕРШИТЬ до NUL :, если вам не нужны данные в вашей базе данных. Резервное копирование журнала в NUL: (Независимо от того, используете ли вы AG, FCI или нет), вы нарушите цепочку резервного копирования журнала и предотвратите восстановление по времени.
Если вы используете группу доступности, SQL Server не использует журнал транзакций резервные копии для синхронизации между узлами. Он сам использует журнал транзакций и поэтому не очищает журнал транзакций, если есть данные журнала, которые необходимо синхронизировать с другим узлом. Иными словами, если синхронизация вашего AG отстает, ваш журнал транзакций будет продолжать заполняться/расти до тех пор, пока не произойдет синхронизация, независимо от количества выполненных резервных копий журнала транзакций.
Существует несколько причин, по которым ваш журнал транзакций может продолжать расти, и синхронизация AG является лишь одной из причин. Если SQL Server не может повторно использовать журнал транзакций из-за несинхронизированных транзакций в AG, столбец log_reuse_wait_desc
в sys.databases
покажет значение «AVAILABILITY_REPLICA».
Возвращаясь к вашей проблеме с корнем: при восстановлении индекса ваш журнал транзакций стал действительно большим.
Когда вы выполняете ALTER INDEX...REBUILD
, SQL Server создает весь новый индекс (операцию с размером данных) и должен иметь возможность откатывать создание индекса, если он ошибочно или убит до его завершения. Таким образом, вы можете увидеть столбец log_reuse_wait_desc
в sys.databases
, показывая как «ACTIVE_TRANSACTION» во время очень большой, долговременной перестройки индекса. Само перестроечное устройство не позволит вам повторно использовать журнал и приведет к росту журнала.