Управління файлами може бути повністю онлайн-операцією. У вас є два шляхи, залежно від потреби зберегти інформацію журналу для цілей відновлення:
Точне відновлення часу не потрібне
- Перетворити базу даних на
SIMPLEвідновлення. Виконайте контрольну точку для запису транзакцій на диск.
- Зрівняти колоду.
- Змініть розмір журналу до відповідного розміру.
Я також рекомендую встановити фіксовану кількість росту та необмежений приріст (щоб допомогти краще керувати своїм журналом). Зауважте, фіксований розмір зростання дуже великий, це залежить від суми, я б рекомендував спочатку запустити 1-2 ГБ, залежно від того, який приріст цей журнал може очікувати. В ідеалі ваш журнал не буде сильно рости, тому це не повинно мати великого впливу. Якщо ваш журнал регулярно зростає, можливо, вам доведеться переглянути свій розмір.
Здійснено за допомогою:
ALTER DATABASE [foo]
SET RECOVERY SIMPLE;
CHECKPOINT;
DBCC SHRINKFILE (foo_log,0);
ALTER DATABASE [foo]
MODIFY FILE (NAME=foo_log,SIZE=8000MB,MAXSIZE=UNLIMITED,FILEGROWTH=1000MB);
--Optional if you want the database in full recovery mode
--for point in time recovery going forward
ALTER DATABASE [foo]
SET RECOVERY FULL;
Потрібно вказати час відновлення
Найбільшим підключенням буде те, що ви не можете зменшити свій журнальний файл минулого свого активного сегменту VLF. Щоб побачити це, ви можете використовувати DBCC LOGINFOв контексті бази даних. Будь-який сегмент зі статусом = 2 активний. Щоб очистити активні сегменти, вам потрібно буде виконати резервну копію журналу транзакцій, коли в цьому сегменті зараз немає активних транзакцій. Ваші кроки:
- Запустіть резервну копію журналу транзакцій.
- Стисніть файл. (Ідеально вирівнюйте, але якщо ваша база даних активна, це буде важко зробити).
- Повторюйте кроки 1 і 2, поки ваш журнал не набере відповідного розміру, в ідеалі як можна менше.
- Змініть розмір журналу до відповідного розміру.
Здійснено за допомогою:
BACKUP LOG [foo] TO DISK='<Location of t-log backup>';
DBCC SHRINKFILE (foo_log,0);
--Repeat the above until your log file is small "enough"
ALTER DATABASE [foo]
MODIFY FILE (NAME=foo_log,SIZE=8000MB,MAXSIZE=UNLIMITED,FILEGROWTH=1000MB);
Деякі додаткові ресурси, щоб зрозуміти, що тут відбувається: