我们在使用sqlserver操作数据的时候,会生成Ldf的日志文件和Mdf数据文件,久而久之,会让硬盘可用空间变小,那么时间长了,我们就需要清除一些日志文件和压缩Mdf数据文件,释放出一些硬盘可用空间
注意:清除数据库Ldf日志文件,将会使数据库之前的操作变得不可逆,Ldf文件有助于我们查找之前执行的脚本,或者生成逆向脚本还原数据库。具体教程将后续说明
压缩数据库Ldf文件
打开数据库文件所在位置,找到需要压缩的Ldf文件,如:我们觉得MY_RelationMgmt_log.ldf文件过大,需要压缩执行以下Sql脚本即可。
USE [master]
GO
ALTER DATABASE MY_RelationMgmt SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE MY_RelationMgmt SET RECOVERY SIMPLE --先进入简单用户模式
GO
USE [MY_RelationMgmt]
GO
DBCC SHRINKFILE (N'MY_RelationMgmt_Log' , 2, TRUNCATEONLY)
GO
再三说明:此脚本一但执行,将无法查询定位以及回滚之前的操作数据库记录
压缩数据库Mdf文件
打开数据库文件所在位置,找到需要压缩的mdf文件,如:我们觉得MY_RelationMgmt_log.mdf文件过大,需要压缩
因为mdf是数据库数据文件,我们得先查看该数据库当前的每个库表硬盘使用情况
先执行以下sql
use [MY_RelationMgmt]
IF OBJECT_ID('tempdb..#TablesSizes') IS NOT NULL
DROP TABLE #TablesSizes
CREATE TABLE #TablesSizes
(
TableName sysname ,
Rows BIGINT ,
reserved VARCHAR(100) ,
data VARCHAR(100) ,
index_size VARCHAR(100) ,
unused VARCHAR(100)
)
DECLARE @sql VARCHAR(MAX)
SELECT @sql = COALESCE(@sql, '') + '
INSERT INTO #TablesSizes execute sp_spaceused ''' + QUOTENAME(TABLE_SCHEMA,
'[]') + '.'
+ QUOTENAME(Table_Name, '[]') + ''''
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
PRINT ( @SQL )
EXECUTE (@SQL)
SELECT *
FROM #TablesSizes
ORDER BY Rows DESC
看下执行结果,这时候,我们可以看到,每个表的使用情况,比如,我们这2张备份表实际上已经不在使用了,我们可以删除,这时候,我们可以先进行drop table或者Delete Row操作。
删除多余的表和数据行以后,在左侧资源管理器选中对应数据库,右键——Tasks——Shrink——DateBase———-
我们看到出现收缩后的库,占当前的比例了,点击OK,完成收缩