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