更新时间:2024-09-05 GMT+08:00

收缩数据库

操作场景

使用存储过程收缩指定数据库的数据文件和日志文件的大小,以释放磁盘部分空间。

  • rds_shrink_database:收缩指定数据库的全部文件。
  • rds_shrink_database_log :收缩指定数据库的日志文件。

更多操作,请参见RDS for SQL Server收缩数据库

前提条件

  • 收缩数据库前,确保实例要预留足够的磁盘空间。
  • 成功连接RDS for SQL Server实例。通过SQL Server客户端连接目标实例,具体操作请参见通过公网连接RDS for SQL Server实例

收缩数据库

  1. 执行以下命令,进行数据库收缩。

    EXEC [master].[dbo].[rds_shrink_database] @DBName='myDbName';

    表1 参数说明

    参数

    说明

    myDbName

    收缩指定数据库的数据库名称。如果未指定,默认收缩所有数据库。

  2. 执行成功后,系统会显示执行进度,并最终进行如下提示:

    HW_RDS_Process_Successful: Shrink Database Done.

收缩日志文件

执行以下命令,收缩目标数据库的日志文件。

EXEC [master].[dbo].[rds_shrink_database_log] @dbname;

@dbname: 目标数据库。

示例

  1. 执行以下命令,对dbtest2数据库进行收缩。

    EXEC [master].[dbo].[rds_shrink_database] @DBName = 'dbtest2';

    执行结果如下图所示:

  2. 执行以下命令,对所有数据库进行收缩。

    EXEC [master].[dbo].[rds_shrink_database];

  3. 执行以下命令,收缩数据库testdb的日志文件。

    EXEC [master].[dbo].[rds_shrink_database_log]@dbname='dbtest3';

常见问题

  1. 如果执行存储过程发生报错,报错信息为“文件正在使用中”,则请稍后再执行存储过程。
  2. 如果执行存储过程后,日志文件大小未改变,请在目标数据库环境下,执行以下SQL,验证文件是否有足够的可用空间。
    SELECT name, size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0 AS AvailableSpaceInMB FROM sys.database_files WHERE type_desc='LOG';