ПРОСТО или ПОЛНАЯ модель восстановления для баз данных?

38

Когда я должен использовать модель полного восстановления, а когда я должен использовать простую модель восстановления для баз данных?

Я всегда использовал модель полного восстановления, потому что она используется по умолчанию, но сегодня я столкнулся с этой ошибкой:

Поставщик Microsoft OLE DB для SQL Server (0x80040E14) Журнал транзакций для базы данных «ИМЯ БАЗЫ ДАННЫХ» заполнен. Чтобы выяснить, почему пространство в журнале нельзя использовать повторно, см. Столбец log_reuse_wait_desc в sys.databases

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

Чтобы сжать журнал и снова сделать базу данных доступной, я изменил модель восстановления с FULL на SIMPLE и сжал логический файл журнала, выполнив следующую команду

alter database myDbName SET recovery simple
go
dbcc shrinkfile('LOG FILE LOGICAL NAME', 100)
go

Это помогло, но теперь мне нужно понять, ПОЧЕМУ это помогло, КАК эта ситуация началась и КАК предотвратить это в будущем?

РЕДАКТИРОВАТЬ:

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

set @Filename = 'D:\backup\' + convert(varchar, getDate(), 112) + ' - ' + @DBName + '.bak'
set @Description = 'Full backup of database ' + @Filename
BACKUP DATABASE @DBName TO DISK = @Filename WITH INIT , NOUNLOAD , NAME = @Description, NOSKIP , STATS = 10, NOFORMAT

Будет ли новая модель восстановления и сокращение баз данных конфликтовать с этим сценарием?

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

Беренс
источник
Стоит отметить, что сейчас это не вариант в Azure SQL - он всегда использует ПОЛНОЕ восстановление. azure.microsoft.com/en-us/blog/…
jocull

Ответы:

60

Когда я должен использовать модель полного восстановления, а когда я должен использовать простую модель восстановления для баз данных?

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

Поставщик Microsoft OLE DB для SQL Server (0x80040E14) Журнал транзакций для базы данных «ИМЯ БАЗЫ ДАННЫХ» заполнен. Чтобы выяснить, почему пространство в журнале нельзя использовать повторно, см. Столбец log_reuse_wait_desc в sys.databases

Причина, по которой вы получили эту ошибку (скорее всего), заключается в том, что вы не делали резервную копию журнала транзакций. Если резервное копирование не выполнено, то он продолжит физически увеличивать файл журнала транзакций (при условии, что авторазраст включен и maxsize позволяет), поскольку он не может повторно использовать какие-либо «части» журнала транзакций (файлы виртуального журнала). Он может пометить эти VLF только для повторного использования и разрешить "обходной" характер журнала транзакций при выполнении резервного копирования журнала транзакций (и некоторых других требований, таких как отсутствие активных транзакций, некоторые аспекты репликации и т. Д.).

Чтобы сжать журнал и снова сделать базу данных доступной, я изменил модель восстановления с FULL на SIMPLE и сжал логический файл журнала, выполнив следующую команду

......

Это помогло, но теперь мне нужно понять, ПОЧЕМУ это помогло, КАК эта ситуация началась и КАК предотвратить это в будущем?

Это помогло вам, потому что, установив для вашей базы данных простую модель восстановления, вы заявили SQL Server, что вам больше не нужно восстанавливать данные на определенный момент времени, а также требование, чтобы файлы виртуального журнала больше не нужно было сохранять и помечать как активные, теперь процесс контрольной точки помечает эти VLF как неактивные.

Выдержка / цитата взята из этой ссылки MSDN :

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

Затем вы сократили физический файл базы данных, и, поскольку в журнале транзакций было свободное место, теперь он мог физически сжать файл NTFS.

Чтение стоит потратить некоторое время на:

  1. Модели восстановления
  2. Управление журналами транзакций (Гейл Шоу)
  3. Факторы, которые могут задержать усечение журнала

РЕДАКТИРОВАТЬ после вашего редактирования :

Будет ли новая модель восстановления и сокращение баз данных конфликтовать с этим сценарием?

Эта BACKUP DATABASEкоманда будет работать с любой моделью восстановления. Что касается рутинной базы данных сжиматься ... НЕ ДЕЛАЙТЕ ЭТОГО !!!! Серьезно, измените размер вашей базы данных соответствующим образом, и если вы используете модель полного восстановления, убедитесь, что вы выполняете обычные и частые файлы журнала транзакций, не только для того, чтобы держать размер журнала транзакций в страхе, но и для соответствия объектам точки восстановления.

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

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

Что касается используемой модели восстановления (простая или полная), мы не можем принять это решение за вас. Только вы, ваша бизнес-команда и ваши SLA могут.

Томас Стрингер
источник
Вы также можете добавить, что если вы используете зеркальное отображение базы данных, вам необходимо использовать модель полного восстановления, так как она использует файл журнала для обновления зеркала.
Хольгер
Это был отличный ответ . Одна часть, которую я не понимаю, это «также встретить объекты точки восстановления». Не могли бы вы уточнить эту фразу? Сначала я подумал, что вы намереваетесь написать «цели», но я не уверен в этом предположении.
Энтони Дж. - справедливость для Моники