Сокращение файла журнала
Для файлов журнала компонент Database Engine использует target_size для вычисления целевого размера всего журнала; следовательно, target_size - это объем свободного места в журнале после операции сжатия. Целевой размер для всего журнала затем переводится в целевой размер для каждого файла журнала. DBCC SHRINKFILE пытается немедленно сжать каждый физический файл журнала до его целевого размера.
Однако, если часть логического журнала находится в виртуальных журналах сверх целевого размера, компонент Database Engine освобождает как можно больше места и затем выдает информационное сообщение.
В сообщении описываются действия, необходимые для перемещения логического журнала из виртуальных журналов в конце файла. После выполнения действий можно использовать DBCC SHRINKFILE, чтобы освободить оставшееся пространство.
Поскольку файл журнала можно сжать только до границы виртуального файла журнала, сжатие файла журнала до размера, меньшего, чем размер файла виртуального журнала, может быть невозможным, даже если он не используется . Размер виртуального файла журнала динамически выбирается компонентом Database Engine при создании или расширении файлов журнала.
- Устранение неполадок: файл не сжимается
Если операция сжатия выполняется без ошибок, но размер файла не изменился, убедитесь, что у файла достаточно свободного места для удаления, выполнив одну из следующих операций:
Запустите следующий запрос.
ВЫБРАТЬ имя, размер / 128.0 - CAST (FILEPROPERTY (name, 'SpaceUsed') AS)
int) /128.0 AS AvailableSpaceInMB FROM sys.database_files;
Запустите команду DBCC SQLPERF , чтобы вернуть пространство, используемое в журнале транзакций.
Если свободного места недостаточно, операция сжатия не может уменьшить размер файла.
Обычно это файл журнала, который не уменьшается. Обычно это результат файла журнала, который не был усечен.
Вы можете обрезать журнал , установив для базы данных модель восстановления значение SIMPLE или , сделав резервную копию журнала и затем запустив DBCC SHRINKFILE операция снова.
Пример:
Сокращение файла журнала до указанного целевого размера
В следующем примере файл журнала в базе данных AdventureWorks сжимается до 1 МБ. Чтобы позволить команде DBCC SHRINKFILE сжать файл, файл сначала усекается путем установки модели восстановления базы данных на SIMPLE.
Transact-SQL
USE AdventureWorks2012;
GO
- Обрезать журнал, изменив модель восстановления базы данных на SIMPLE.
ALTER DATABASE AdventureWorks2012
УСТАНОВИТЬ ВОССТАНОВЛЕНИЕ ПРОСТО;
GO
- Сократите усеченный файл журнала до 1 МБ.
DBCC SHRINKFILE (AdventureWorks2012_Log, 1);
GO
- Сброс модели восстановления базы данных.
ALTER DATABASE AdventureWorks2012
УСТАНОВИТЬ ВОССТАНОВЛЕНИЕ;
GO
Когда вы используете DBCC SHRINKFILE (файл журнала, размер), он усекается только от конца файла журнала до конца. Когда он достигает самого высокого виртуального журнала, который все еще используется, он не может сжиматься дальше. Это описано в электронной документации по SQL Server по адресу:
http://technet.microsoft.com/en-us/library/ms189493.aspx
Итак, как только верхний конец журнала станет чистым, его можно уменьшить в размере. Опять же, это будет зависеть от того, сколько журнала еще используется. Журнал может быть очищен резервными копиями, но резервные копии не будут очищать незавершенные транзакции, поэтому журнал может оставаться в высокопроизводительном VLF даже после повторных резервных копий.
Что касается увеличения и уменьшения VLF, насколько велик размер файла журнала, созданного изначально, и каковы параметры для роста файла журнала? Если он вырастет лишь на небольшое количество, он создаст больше VLF, чем кто-либо хочет.
Обычным шаблоном для сжатия файла журнала является CHECKPOINT, BACKUP, SHRINKFILE, CHECKPOINT, BACKUP, SHRINKFILE и т. Д., Пока вы не получите результаты. Существует множество причин, по которым журнал может не сжиматься, включая очень большой откат.
При переключении с простого на полный возникла проблема:
Здесь есть правила и исключения. Подробнее о долгосрочных транзакциях мы поговорим ниже.
Но следует помнить одно предостережение о режиме полного восстановления: если вы просто переключаетесь в режим полного восстановления, но никогда не выполняете первоначальное полное резервное копирование, SQL Server не выполнит ваш запрос на использование модели полного восстановления. Журнал транзакций будет продолжать работать так же, как в Simpleun, пока вы не переключитесь на модель полного восстановления и не создадите первую полную резервную копию.
Модель полного восстановления без резервных копий журнала не работает:
Итак, это самая распространенная причина неконтролируемого роста логов? Ответ. Находясь в режиме полного восстановления без каких-либо резервных копий журнала.
Это постоянно случается с людьми.
Почему это такая распространенная ошибка?
Почему это происходит постоянно? Потому что каждая новая база данных получает свои первоначальные настройки модели восстановления, глядя на базу данных модели.
Первоначальной настройкой модели восстановления модели всегда является модель полного восстановления - до тех пор, пока кто-то ее не изменит. Таким образом, вы можете сказать, что «Модель восстановления по умолчанию» - Полная. Многие люди не знают об этом, и их базы данных работают в модели полного восстановления без резервных копий журналов, и, следовательно, файл журнала транзакций намного больше, чем необходимо. Вот почему важно изменить значения по умолчанию, если они не работают для вашей организации и ее потребностей)