Вики IT-KB

Пошаговые руководства, шпаргалки, полезные ссылки...

Инструменты пользователя

Инструменты сайта


microsoft-sql-server:t-sql-script-samples:how-to-shrink-dynamic-variables-ms-sql-server-database

Как выполнить shrink (сжать, обрезать) транзакционного лога базы данных SQL Server с динамической переменной

Меняем один раз <database name> названием вашей базы и запускаем скрипт.

DECLARE @DBName nvarchar(250)
SET @DBName = '<database name>'
 
DECLARE @SQLText nvarchar(MAX)
 
SET @SQLText = 
'
 
USE {DBNAME}
ALTER DATABASE {DBNAME} SET RECOVERY SIMPLE
DBCC SHRINKFILE ({DBNAME}_log, 50);
ALTER DATABASE {DBNAME} SET RECOVERY FULL
'
SET  @SQLText = REPLACE (@SQLText ,  '{DBNAME}' ,  @DBName) 
EXECUTE  (@SQLText)

Автор первичной редакции:
Евгений Лейтан
Время публикации: 06.03.2016 16:56

Обсуждение

Алексей МаксимовАлексей Максимов, 06.03.2016 17:42, 06.03.2016 17:46
А разве для SHRINK нужно переводить базу данных в режим восстановления SIMPLE? И потом, если моя база данных работает в режиме восстановления SIMPLE (так нужно), то после такого вот "шринка" режим восстановления станет FULL, что ни есть хорошо.
Евгений ЛейтанЕвгений Лейтан, 06.03.2016 17:57, 06.03.2016 17:57
"А разве для SHRINK нужно переводить базу данных в режим восстановления SIMPLE?"
По-другому у меня не получалось, только при "SIMPLE".

Если база уже в "SIMPLE", то тогда скрипт уменьшается на пару строчек :)

режим "Full" рекомендуется производителем ПО, т.е. Microsoft. А инкрементальное резервное копирование не дает лог файлу разрастись в размерах!
Александр НикитинАлександр Никитин, 09.03.2016 09:18
Я конечно дико извиняюсь, но все таки логом БД нужно "управлять", а не шринкать его туды сюды. Если ваши запросы к БД такие что лог распухает аки сдоба то проблема не в логе, а в запросах. Нужно оптимизировать, ну и считать размеры лога и ограничивать его в максимальном размере. Если получится найти цикл статей по логам SQL - дам ссылку.
Eugene LeitanEugene Leitan, 09.03.2016 09:57
Саня, это все понятно, но данный скрипт используется, если уже край (ни место добавить, чтобы рез копирование провести, ни еще что-либо)!

И в тест. среде тоже частенько используется, п.ч. админы SQL (1С) это другие люди!
d3f4u7td3f4u7t, 28.08.2024 17:48
Почему просто не делать бэкап лога в trn регулярно? Это же освобождает место для записи транзакций внутри самого файла, не давая ему расти. А потом просто shrink файл лога до разумного размера чтобы уменьшить фрагментацию файлов. то есть



backup log MAIN_BD to Disk = "MAIN_BD_LOG_BAK.trn";

dbcc shrinkfile (MAIN_BD_log, 50);



это как у меня в голове сложилось. Единственное это если делать восстановление с транзакциями то нужно будет применять всем попутные файлы бэкапа транзакций чтобы цепочку не нарушать
Ваш комментарий:
 
microsoft-sql-server/t-sql-script-samples/how-to-shrink-dynamic-variables-ms-sql-server-database.txt · Последнее изменение: 20.08.2017 12:46 — Алексей Максимов

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki