在我们使用sql server数据库或者服务器时,有时会发现数据库不到一段时间,占用磁盘空间好大,也有可能是数据的原因,也有可能是其他的原因,但如果说占用绝大部分存储空间,而且数据量又不怎么大,那么,这其中就有问题了。

工具/原料

  • sql server

方法/步骤

  1. 首先我们要清楚问题的原因之处;

    第一步:打开sql server数据库,数据库右键——属性——文件,在这个文件栏打开之后,我们会看到主数据文件和日志文件的初始大小和增长大小,如果日志文件太多,我们首先要考虑处理日志文件。

    ​编辑

  2. 对数据库事务日志已满的处理方法:

    USE [master]

    GO

    ALTER DATABASE 数据库名称 SET RECOVERY SIMPLE WITH NO_WAIT

    GO

    ALTER DATABASE 数据库名称 SET RECOVERY SIMPLE

    GO

    USE 数据库名称

    GO

    DBCC SHRINKFILE (N'数据库名称_log' , 11, TRUNCATEONLY)

    GO

    USE [数据库名称] 
    
    GO 
    ALTER DATABASE 数据库名称 SET RECOVERY SIMPLE WITH NO_WAIT 
    GO 
    DBCC SHRINKFILE (N'数据库名称_log' , 400, TRUNCATEONLY) 
    GO 
    DBCC SHRINKDATABASE(N'数据库名称' ) 
    GO
    ALTER DATABASE 数据库名称 SET RECOVERY full WITH NO_WAIT 
    GO

  3. 数据日志处理完之后,如果是日志的问题的话,这个时候磁盘的存储空间会多出来很多,如果不是这个问题的话,我们还要去查看数据库中每个表数据大小,看看是否是数据量很大这个原因导致的。

    ​编辑

  4. 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

    ​编辑

  5. 当这些配置好了之后,我们发现确实是数据原因,这个时候,我们就要适当的去删除数据量比较大的表格了,删除完了之后,我们就要对表格进行压缩了。将磁盘的可用空间释放出来。

    ​编辑

  6. 数据库右键——任务——压缩——数据库,来到上面的压缩数据库文件,这个时候我们要选择压缩的百分比了,设置好百分比之后,我们就开始执行,这个过程可能比较漫长,毕竟是对磁盘的一次重新组合,所以敬请等待,最终你会看到磁盘会空出很多可用空间。

    ​编辑步骤阅读

更多推荐