У мене є база даних [Моя БД], яка містить таку інформацію:
Розмір MDF
SQL Server 2008
: 30 ГБ
Розмір LDF: 67 ГБ
Я хотів максимально зменшити файл журналу, і тому я розпочав своє прагнення, щоб зрозуміти, як це зробити. Застереження: Я не DBA (і навіть не наближаюся до DBA), і прогресував, відчуваючи це завдання.
По-перше, я просто зайшов у SSMS, властивості БД, Файли та відредагував значення початкового розміру (МБ) до 10. Це зменшило файл журналу до 62 ГБ (не зовсім тих 10 МБ, які я ввів). Отже, я підключив SQL Profiler, побачив, що викликається DBCC SHRINKFILE. Потім я ввів цю команду в редактор запитів, і ось результати.
DBCC SHRINKFILE (N'My DB_Log' , 10)
І результат був:
Cannot shrink log file 2 (My DB_Log) because the logical log file located at the end of the file is in use.
DbId FileId CurrentSize MinimumSize UsedPages EstimatedPages
------ ----------- ----------- ----------- ----------- --------------
8 2 8044104 12800 8044104 12800
(1 row(s) affected)
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Потім я провів кілька досліджень з цього приводу і виявив таке:
http://support.microsoft.com/kb/907511
Це говорить про те, що мені потрібно зробити резервну копію файлу журналу до shrinkfile, щоб файли віртуального журналу були звільнені, і shrinkfile міг виконати свою роботу - я не знаю, що це означає ... Я просто перефразую тут :)
Отже, я вирішив спробувати зробити резервну копію файлу журналу, а потім зробити DBCC SHRINKFILE (і я змінив новий розмір файлу журналу на 12800, оскільки це був мінімальний розмір, визначений у результатах попередньої команди DBCC SHRINKFILE)
BACKUP LOG [My DB] TO DISK = 'D:\SQLBackup\20110824-MyDB-Log.bak'
GO
DBCC SHRINKFILE (N'My DB_Log' , 12800)
GO
Результат був таким же, як і перший обхід. Я можу отримати лише файл журналу до 62 ГБ.
Я не впевнений, що я роблю неправильно і що мені слід спробувати далі.