【SqlServer】日志收缩
BACKUP LOG 语句以备份事务日志
DBCC SHRINKFILE ( { file_name | file_id } { [ , EMPTYFILE ] | [ [ , target_size ] [ , { NOTRUNCATE | TRUNCATEONLY } ] ] } ) [ WITH NO_INFOMSGS ]
file_name
要收缩的文件的逻辑名称
file_id
要收缩的文件的标识 (ID) 号。 若要获取文件 ID,请使用 FILE_IDEX 系统函数,或查询当前数据库中的 sys.database_files 目录视图。
target_size
整数,文件的新大小(以 MB 为单位)。 如果未指定或为 0,DBCC SHRINKFILE 缩小到文件创建大小。
NOTRUNCATE
无论是否指定 target_percent,将数据文件末尾中的已分配页移到文件开头的未分配页区域中。 操作系统不会回收文件末尾的可用空间,文件的物理大小也不会改变。 因此,如果指定 NOTRUNCATE,文件看起来就像没有收缩一样。 NOTRUNCATE 只适用于数据文件。 日志文件不受影响。 FILESTREAM 文件组容器不支持此选项。
TRUNCATEONLY
将文件末尾的所有可用空间释放给操作系统,但不在文件内部移动任何页。 数据文件只收缩到最后分配的区。 如果使用 TRUNCATEONLY 指定,则会忽略 target_size。
TRUNCATEONLY 选项不会移动日志中的信息,但会删除日志文件末尾的失效 VLF。 FILESTREAM 文件组容器不支持此选项。
DBCC SQLPERF ( [ LOGSPACE ] | [ "sys.dm_os_latch_stats" , CLEAR ] | [ "sys.dm_os_wait_stats" , CLEAR ] ) [WITH NO_INFOMSGS ]
SELECT name ,size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0 AS AvailableSpaceInMB FROM sys.database_files;
1 BACKUP LOG [Email] TO DISK='NUL:'; 2 DBCC SHRINKFILE(Email_log,10); 3 DBCC ShRINKFILE(Email_log,0,TRUNCATEONLY)
如果日志较大,可以逐级收缩
以上信息仅用于学习交流,如有错误欢迎指正;大佬勿喷,谢谢;