您的文件管理可以是完全在线的操作。您有两条路径,具体取决于您出于恢复目的保留日志信息的需要:
不需要时间点恢复
- 将数据库转换为
SIMPLE
恢复。执行检查点以将事务写入磁盘。
- 展平日志。
- 将日志大小调整为适当的大小。
我还建议设置固定的增长量和无限制的增长(以帮助更好地管理日志)。请注意,固定增长量很大程度上取决于它的数量,我建议最初使用1-2 GB,这取决于日志预期会看到多少增长。理想情况下,您的日志不会增长太多,因此不会产生太大影响。如果日志有规律地增长,则可能需要重新调整大小。
完成使用:
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);
一些其他资源可以了解此处的情况: