sqlserver利用存储过程,收缩数据库文件,释放磁盘空间
查看当前数据库文件使用率信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | USE 数据库名 GO SELECT a. name as 逻辑文件名, size /128 [totalspace文件大小(兆)], FILEPROPERTY(a. name , 'SpaceUsed' )/128 [usedspace已用空间(兆)], size /128 - FILEPROPERTY(a. name , 'SpaceUsed' )/128 [未用空间(兆)], FILEPROPERTY(a. name , 'SpaceUsed' )*100.0/ size [使用率(%)] FROM sys.database_files a cross join ( select recovery_model_desc, log_reuse_wait,log_reuse_wait_desc,is_auto_shrink_on from sys.databases where name =DB_NAME())b WHERE type=0; |
创建存储过程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | CREATE PROCEDURE dbo.ShrinkDataFile @logicalFileName NVARCHAR(128) AS BEGIN SET NOCOUNT ON ; DECLARE @initialSize INT ; DECLARE @targetSize INT ; DECLARE @shrinkSize INT ; DECLARE @usedSpace INT ; DECLARE @minSize INT ; SELECT @initialSize = size / 128, @usedSpace = FILEPROPERTY( name , 'SpaceUsed' ) / 128 FROM sys.master_files WHERE name = @logicalFileName; SET @minSize = @usedSpace + 1000; -- 可收缩最大空间+1000 SET @shrinkSize = 1024; -- 每次释放1G空间 SET @targetSize = @initialSize - @shrinkSize; IF @targetSize < @minSize SET @targetSize = @minSize; DBCC SHRINKFILE (@logicalFileName, @targetSize); SELECT size / 128 AS CurrentSizeMB FROM sys.master_files WHERE name = @logicalFileName; END GO |
调用存储过程
1 | EXEC dbo.ShrinkDataFile @logicalFileName = 'test' ; |
1 | logicalFileName 为第一条查询语句得出的结果。 |
本文作者:亲爱的焦糖玛奇朵
本文链接:https://www.cnblogs.com/elanjie/p/18670154
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix