Управління файлами може бути повністю онлайн-операцією. У вас є два шляхи, залежно від потреби зберегти інформацію журналу для цілей відновлення:
Точне відновлення часу не потрібне
- Перетворити базу даних на
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);
Деякі додаткові ресурси, щоб зрозуміти, що тут відбувається: