工作用使用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 的所有信息性消息。
示例:
![]() |
SHRINKFILE 参数解析:
语法SQL复制 参数file_name file_id target_size 备注 可以使用 DBCC SHRINKFILE target_size 缩小空文件的默认大小。 例如,如果创建一个 5 MB 的文件,然后在文件仍然为空的时候将文件收缩为 3 MB,默认文件大小将设置为 3 MB。 这只适用于永远不会包含数据的空文件。 FILESTREAM 文件组容器不支持此选项。 EMPTYFILE 对于 FILESTREAM 文件组容器,无法使用 ALTER DATABASE 删除文件,除非 FILESTREAM 垃圾回收器已运行,并删除了 EMPTYFILE 已复制到另一个容器的所有不必要文件组容器文件。 有关详细信息,请参阅 sp_filestream_force_garbage_collection (Transact-SQL) 备注 有关删除 FILESTREAM 容器的信息,请参阅 ALTER DATABASE 文件和文件组选项 (Transact-SQL) 中的相应章节 NOTRUNCATE TRUNCATEONLY WITH NO_INFOMSGS |
示例:
示例:
![]() |