SQLserver2008数据库磁盘清理

时间:2024-05-19 20:50:24

今天在查看服务器运行情况的时候,无意间发现磁盘几乎被占满。之后经过排查发现是SQLserver数据库的问题,占了有20多G空间。

首先我查询了数据库实际用量,这里上网搜了各位大神分享的经验,找到一段sql语句,发现数据占了只有几十M。

语句如下:

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;

然后我选择指定数据库——右键——属性——文件,看到数据库文件的初始化大小被设置成5G,这里我是数据库文件的初始化大小设置的不对,并非数据量过大原因导致的,所以只需要修改初始化大小就可以,如果是因为数据量过大导致的,那么需要删除无用的数据量过大的数据,然后对数据库进行压缩,选择数据库右键——任务——压缩——数据库,来到上面的压缩数据库文件,这个时候我们要选择压缩的百分比了,设置好百分比之后,我们就开始执行,这个过程可能比较漫长,毕竟是对磁盘的一次重新组合,所以敬请等待,最终会看到磁盘会空出很多可用空间。(注:一定要先备份数据,再进行此步骤压缩)

SQLserver2008数据库磁盘清理

SQLserver2008数据库磁盘清理

此外,还有SQLserver实例对应生成的错误日志,ERRORLOG,ERRORLOG1...ERRORLOG6,7个文件,由于长期没有清理,日志容量会越来越大。清理方法是 执行语句  EXEC sp_cycle_errorlog GO ,默认情况下,SQLserver 只保留 7 个错误日志文件。所以这个存储过程需要执行7次,错误日志就会被清理,容量减小。

以上是我发现的问题及解决办法,在此记录一下,有任何不对的地方欢迎各位大神指点。