sqlserver 日志文件收缩

工作用使用sqlserver数据库常遇到数据库和日志wenj文件过大,简单记录下手动收缩文件大小:

执行代码:

use [master]
go
--alter database dw set recovery simple with no_wait
--go
alter database dw set recovery simple   --简单模式
go
 
use dw 
--当前数据库日记的逻辑名列表
select name,* from sys.database_files -- where type=1 代表是日记文件
go
--把DW_log日记文件收缩到5M
dbcc ShrinkFile(DW_log,5)
--减小 DW 用户数据库中数据文件和日志文件的大小,以便在数据库中留出 10% 的可用空间。
dbcc SHRINKDATABASE(DW,10)
go
 
use [master]
--go
--alter database dw set recovery full with no_wait
--go
--alter database dw set recovery full    --还原为完全模式
GO

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

SHRINKDATABASE 参数解析

语法

SQL复制

DBCC SHRINKDATABASE   
( database_name | database_id | 0   
     [ , target_percent ]   
     [ , { NOTRUNCATE | TRUNCATEONLY } ]   
)  
[ WITH NO_INFOMSGS ]  

参数

database_name | database_id | 0
要收缩的数据库名称或 ID。 0 指定使用当前数据库。

target_percent
数据库收缩后的数据库文件中所需的剩余可用空间百分比。

NOTRUNCATE
将分配的页面从文件的末尾移动到文件前面的未分配页面。 此操作会压缩文件中的数据。 target_percent 是可选的。 Azure SQL 数据仓库不支持此选项。

文件末尾的可用空间不会返回给操作系统,并且文件的物理大小也不会更改。 因此,指定 NOTRUNCATE 时,数据库似乎不会收缩。

NOTRUNCATE 只适用于数据文件。 NONTRUNCATE 不会影响日志文件。

TRUNCATEONLY
将文件末尾的所有可用空间释放给操作系统。 不移动文件内的任何页面。 数据文件仅收缩到最后指定的盘区。 如果使用 TRUNCATEONLY 指定,则会忽略 target_percent。 Azure SQL 数据仓库不支持此选项。

TRUNCATEONLY 将影响日志文件。 若要仅截断数据文件,请使用 DBCC SHRINKFILE。

WITH NO_INFOMSGS
取消严重级别从 0 到 10 的所有信息性消息。

 

示例:

sqlserver 日志文件收缩_第1张图片

 

 

 

 

 

 

 

 

 

 

 

SHRINKFILE 参数解析:

语法

SQL复制

  
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 为单位)。 如果未指定,DBCC SHRINKFILE 缩小到文件创建大小。

 备注

可以使用 DBCC SHRINKFILE target_size 缩小空文件的默认大小。 例如,如果创建一个 5 MB 的文件,然后在文件仍然为空的时候将文件收缩为 3 MB,默认文件大小将设置为 3 MB。 这只适用于永远不会包含数据的空文件。

FILESTREAM 文件组容器不支持此选项。
如果 target_size 已指定,DBCC SHRINKFILE 会尝试将文件收缩到目标大小。 要释放的文件区域中的已用页移到文件保留区域中的可用空间。 例如,对于 10MB 数据文件,target_size 为 8 的 DBCC SHRINKFILE 操作会将文件最后 2MB 中的所有已用页移到文件前 8MB 中的任何未分配页区域中。 DBCC SHRINKFILE 不会收缩已超过所需存储数据大小的文件。 例如,如果使用 10 MB 数据文件中的 7 MB,则带有 target_size 为 6 的 DBCC SHRINKFILE 语句只能将该文件收缩到 7 MB,而不能收缩到 6 MB。

EMPTYFILE
将指定文件中的所有数据迁移到同一文件组中的其他文件。 也就是说,EMPTYFILE 将指定文件中的数据迁移到同一文件组中的其他文件。 ENPTYFILE 确保不会将任何新数据添加到文件中(尽管此文件不是只读文件)。 可以使用 ALTER DATABASE 语句删除文件。 如果你使用 ALTER DATABASE 语句更改文件大小,只读标志会重置,并能添加数据。

对于 FILESTREAM 文件组容器,无法使用 ALTER DATABASE 删除文件,除非 FILESTREAM 垃圾回收器已运行,并删除了 EMPTYFILE 已复制到另一个容器的所有不必要文件组容器文件。 有关详细信息,请参阅 sp_filestream_force_garbage_collection (Transact-SQL)

 备注

有关删除 FILESTREAM 容器的信息,请参阅 ALTER DATABASE 文件和文件组选项 (Transact-SQL) 中的相应章节

NOTRUNCATE
无论是否指定 target_percent,将数据文件末尾中的已分配页移到文件开头的未分配页区域中。 操作系统不会回收文件末尾的可用空间,文件的物理大小也不会改变。 因此,如果指定 NOTRUNCATE,文件看起来就像没有收缩一样。 NOTRUNCATE 只适用于数据文件。 日志文件不受影响。 FILESTREAM 文件组容器不支持此选项。

TRUNCATEONLY
将文件末尾的所有可用空间释放给操作系统,但不在文件内部移动任何页。 数据文件只收缩到最后分配的区。 如果使用 TRUNCATEONLY 指定,则会忽略 target_size。
TRUNCATEONLY 选项不会移动日志中的信息,但会删除日志文件末尾的失效 VLF。 FILESTREAM 文件组容器不支持此选项。

WITH NO_INFOMSGS
取消显示所有信息性消息。

示例:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

示例:

sqlserver 日志文件收缩_第2张图片

 

你可能感兴趣的:(SQL,Server)