操作场景
使用存储过程收缩指定数据库的数据文件和日志文件的大小,以释放磁盘部分空间。
rds_shrink_database:收缩指定数据库的全部文件。
rds_shrink_database_log :收缩指定数据库的日志文件。
前提条件
收缩数据库前,确保实例要预留足够的磁盘空间。
成功连接RDS for SQL Server实例。通过SQL Server客户端连接目标实例。
收缩数据库
步骤 1 执行以下命令,进行数据库收缩。
EXEC [master].[dbo].[rds_shrink_database] @DBName='myDbName';
表8-32 参数说明
| 参数 | 说明 |
|---|---|
| myDbName | 收缩指定数据库的数据库名称。如果未指定,默认收缩所有数据库。 |
步骤 2 执行成功后,系统会显示执行进度,并最终进行如下提示:
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';