SQL Server (2005/2008): обрезает ли полное резервное копирование журнал в режиме полного восстановления

41

Я только что прочитал много документации MSDN и думаю, что понимаю различные модели восстановления и концепцию цепочки резервного копирования. У меня все еще есть один вопрос:

Обрезает ли полная резервная копия базы данных журнал транзакций (в режиме полного восстановления)?

  • Если да: где это упоминается в MSDN? Все, что я мог найти, это то, что только BACKUP LOG усекает журнал.

  • Если нет: почему? Поскольку полное резервное копирование базы данных запускает новую цепочку резервного копирования, какой смысл сохранять транзакции, которые были завершены до полного резервного копирования, активными в журнале?

Heinzi
источник

Ответы:

43

Нет, определенно нет. Только вещь , которая позволяет журнал , чтобы очистить / усечение в моделях полного восстановления или BULK_LOGGED не является резервной копией журнала - без исключений. У меня был этот аргумент некоторое время назад, и я опубликовал длинный и подробный пост в блоге с объяснением и сценарием, который вы можете использовать, чтобы доказать это самому себе в « Заблуждениях о журнале» и «Резервное копирование журнала: как убедить себя» .

Не стесняйтесь задавать дополнительные вопросы. Кстати, также смотрите длинную статью, которую я написал для TechNet Magazine о понимании ведения журнала и восстановления в SQL Server .

Благодарность

Пол Рэндал
источник
Большое спасибо, сэр, за ваш СУПЕР-ОТВЕТ и за статью, на которую я ответил на миллион вопросов.
М.Али
13

Полная резервная копия НЕ обрезает журнал, вы должны выполнить операцию резервного копирования журнала. Полная резервная копия НЕ переустанавливает цепочку журналов - это полностью испортило бы репликацию / доставку журналов и т. Д.

Вы должны внимательно посмотреть, как SQL Server выполняет резервное копирование, но знаете, что выполняемые в полете / длительные транзакции не включаются в резервную копию (в противном случае резервное копирование может никогда не завершиться), поэтому не совсем точно сказать, что полная резервная копия онлайн-база данных гарантированно сделает следующую резервную копию журнала устаревшей.

http://msdn.microsoft.com/en-us/library/ms175477.aspx

Мэтт Рогиш
источник
8

Насколько я понимаю, единственное, что усекает журнал транзакций, - это резервная копия журнала .

Полная резервная копия копирует только достаточное количество журнала, чтобы обеспечить его согласованность транзакций, поскольку для завершения операции резервного копирования требуется некоторое время, и за это время скопированные страницы могли измениться.

Вам все еще нужны резервные копии журналов для восстановления на определенный момент времени.

У меня нет ссылки на MSDN, но я могу связать вас с блогом Пола Рэндала , который был разработчиком команды SQL Server, написал DBCC CHECKDB и часть Books Online.

Он также отвечает на вопросы на этом форуме, так что это будет еще лучшим авторитетом, чем информация от 2-й / 3-й руки от меня :)

Ник Кавадиас
источник
5

Люди часто имеют неправильное представление о полном резервном копировании и резервном копировании журнала. Чтобы резервное копирование работало в FULLмодели резервного копирования, необходимо использовать t-журналы, так как во время резервного копирования все еще могут происходить транзакции в базе данных (если вы не выполняете так называемое COLDрезервное копирование при закрытии базы данных). Oracle использует ту же концепцию, когда у вас есть база данных в ARCHIVELOGрежиме. Последовательность резервного копирования сводится к следующему:

  1. Начать резервное копирование - приостановить все действия в реальных файлах и записывать в t-логи.
  2. Выполните резервное копирование - все транзакции продолжаются, но не записываются в реальные файлы, они записываются в t-журналы
  3. Завершить резервное копирование - возобновить запись транзакций базы данных в реальные файлы.
  4. При необходимости сбросьте то, что находится в T-логах, в реальные файлы.

По этой причине t-журналы по умолчанию не усекаются / сокращаются, так как они являются важной частью продолжения транзакции на этапе резервного копирования.

Питер
источник
1

Не путайте усечение журнала с сокращением журнала.

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

  • Чтобы сжать журнал, чтобы уменьшить фактический размер файла журнала. Это делается с помощью команд DBCC.


источник
1

По сути, вам не нужно каждый раз автоматически сокращать журнал транзакций, потому что журналам транзакций нужно место для работы, и если вы усекаете их автоматически, они останутся практически одинаковыми по размеру.


источник