Введение В Microsoft SQL Server 2005 вы можете сжать файлы журнала транзакций в базе данных, чтобы удалить неиспользуемые страницы. Ядро базы данных будет эффективно повторно использовать пространство. Однако если файл журнала транзакций неожиданно увеличивается, может потребоваться вручную сжать файл журнала транзакций.
В этой статье описывается, как использовать инструкцию DBCC SHRINKFILE для ручного сжатия файлов журнала транзакций в базе данных SQL Server 2005 в модели полного восстановления. Метод, который вы используете для сжатия файла журнала транзакций в SQL Server 2005, может отличаться от метода, который вы используете для сжатия файла журнала транзакций в SQL Server 2000. Для получения дополнительных сведений о том, как сжать файлы журнала транзакций в SQL Server 2000, щелкните номер статьи ниже, чтобы просмотреть соответствующую статью в базе знаний Microsoft:
272318 ( http://support.microsoft.com/kb/272318/ ) INF: сокращение журналов транзакций в SQL Server 2000 с помощью DBCC SHRINKFILE.
Перейти к началу страницы
Дополнительная информация В SQL Server 2005 операция сжатия (DBCC SHRINKFILE) немедленно пытается сжать указанный файл журнала транзакций до необходимого размера. Чтобы вручную сжать файлы журнала транзакций в модели полного восстановления, сначала создайте резервную копию файлов журнала транзакций. Затем используйте инструкцию DBCC SHRINKFILE, чтобы сжать файл журнала транзакций.
Как правило, сжатие файлов журнала транзакций в SQL Server 2005 происходит быстрее, чем сжатие файлов журнала транзакций в SQL Server 2000. Причина в том, что диспетчер журналов SQL Server 2005 создает или повторно использует неактивные файлы виртуального журнала в зависимости от порядка хранения на физическом диске. Поэтому неактивная часть файла журнала транзакций обычно располагается в конце файла.
Например, файл журнала транзакций может содержать 100 виртуальных файлов журнала, но использовать только 2 виртуальных файла журнала. SQL Server 2000 хранит первый файл виртуального журнала, используемый в начале файла журнала транзакций, и второй файл виртуального журнала, используемый в середине файла журнала транзакций. Чтобы сжать файл журнала транзакций до двух виртуальных файлов журнала, SQL Server заполнит оставшуюся часть второго файла виртуального журнала записями виртуального журнала. SQL Server перемещает начало логического журнала в следующий доступный файл виртуального журнала, указанный менеджером журналов. Менеджер журналов может создать файл виртуального журнала в середине файла журнала транзакций, перед последним активным файлом виртуального журнала. В этом случае для успешного сжатия файла журнала транзакций до двух виртуальных файлов журнала необходимо использовать несколько операций резервного копирования журнала и несколько операций сжатия. В худшем случае вам, возможно, придется использовать 50 операций резервного копирования журнала и 50 операций сжатия, чтобы успешно сжать файл журнала транзакций до двух виртуальных файлов журнала.
Однако в SQL Server 2005 вы можете немедленно сжать файл журнала транзакций до двух виртуальных файлов журнала, выполнив инструкцию DBCC SHRINKFILE. Это связано с тем, что диспетчер журналов SQL Server 2005 создает 2 виртуальных файла журнала в том порядке, в котором они хранятся на физическом диске. Оба файла виртуального журнала расположены в начале файла журнала транзакций.
Когда вы пытаетесь сжать файл журнала транзакций, в котором в SQL Server 2005 очень мало свободного места, вам необходимо выполнить еще одну операцию резервного копирования журнала. Эта дополнительная операция резервного копирования журнала усекает файл журнала транзакций до меньшего размера. При сжатии файлов журнала транзакций в SQL Server 2000 помимо выполнения трех вышеуказанных шагов необходимо также выполнить операцию резервного копирования журнала. Дополнительные сведения см. в статье базы знаний Microsoft, упомянутой в разделе «Введение». Чтобы сжать файл журнала транзакций с очень небольшим количеством свободного места в SQL Server 2005, выполните следующие действия: 1. Создайте резервную копию файлов журнала транзакций, чтобы большинство активных файлов виртуального журнала были неактивными. Поэтому неактивные файлы виртуального журнала можно удалить на более позднем этапе. Для этого запустите инструкцию Transact-SQL, аналогичную следующей инструкции Transact-SQL. РЕЗЕРВНОЕ КОПИРОВАНИЕ ЖУРНАЛА <DatabaseName> НА ДИСК = '<BackupFile>'
Примечание. В этом операторе <DatabaseName> — это имя базы данных, для которой требуется создать резервную копию. В этом операторе <BackupFile> является заполнителем для полного пути к файлу резервной копии.
Например, выполните следующую инструкцию Transact-SQL. РЕЗЕРВНОЕ КОПИРОВАНИЕ ЖУРНАЛА TestDB НА ДИСК='C:TestDB1.bak'
2. Уменьшите файл журнала транзакций. Для этого запустите инструкцию Transact-SQL, аналогичную следующей инструкции Transact-SQL. DBCC SHRINKFILE (<имя_файла>, <TargetSize>) С NO_INFOMSGS
Примечание. В этом операторе <FileName> является заполнителем имени файла журнала транзакций. В этом операторе <TargetSize> является заполнителем для целевого размера файла журнала транзакций. Размер цели должен быть разумным. Например, вы не можете сжать файл журнала транзакций до менее чем двух виртуальных файлов журнала.
3. Если инструкция DBCC SHRINKFILE не сжимает файл журнала транзакций до целевого размера, запустите инструкцию BACKUP LOG, упомянутую в шаге 1, чтобы сделать больше виртуальных файлов журнала неактивными.
4. Запустите инструкцию DBCC SHRINKFILE, упомянутую в шаге 2. После этого файл журнала транзакций должен приблизиться к целевому размеру.
Подводя итог, можно сказать, что алгоритм, который диспетчер журналов использует для выбора следующего файла виртуального журнала, изменился в SQL Server 2005. Таким образом, сжатие файлов журнала транзакций в SQL Server 2005 отличается от сжатия файлов журнала транзакций в SQL Server 2000 следующими способами: • Если файл журнала имеет большой объем свободного места, сжатие файла журнала транзакций в SQL Server 2005 происходит быстрее, чем сжатие файла журнала транзакций в SQL Server 2000. Сжатие файлов журнала транзакций происходит быстрее.
• Сжатие файла журнала транзакций в SQL Server 2005 аналогично сжатию файла журнала транзакций в SQL Server 2000, если в файле журнала нет свободного места.
• Для сжатия файла журнала транзакций в SQL Server 2005 требуется на одну дополнительную операцию резервного копирования журнала больше, чем для выполнения этой операции в SQL Server 2000, если в файле журнала очень мало свободного места.