RDS for SQL Server收缩数据库

yoshine 发表于 2020/04/30 09:31:53 2020/04/30
【摘要】 操作场景 华为云SQL Server提供存储过程,用于收缩数据库的数据文件和日志文件,以释放磁盘部分空间。操作步骤 连接RDS for SQL Server实例,执行以下命令,进行数据库收缩。 EXEC [master].[dbo].[rds_shrink_database] @DBName = 'myDBName'; 参数 myDBName:...

操作场景

     华为云SQL Server提供存储过程,用于收缩数据库的数据文件和日志文件,以释放磁盘部分空间。

操作步骤

     连接RDS for SQL Server实例,执行以下命令,进行数据库收缩。

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

 

    参数

       myDBName: 要收缩的数据库名称。如果未指定,则默认对所有数据库进行收缩。

       结果

A.结果集

返回多个结果集,每个结果对应指定数据库(或所有数据库)的每个文件的相关信息。结果集结构如下:

列名称

说明

DbId

当前收缩的文件的数据库标识号。

FileId

当前收缩的文件的文件标识号。

CurrentSize

文件当前占用的 8 KB 页数。

MinimumSize

文件最低可以占用的 8   KB 页数。 此数字对应于文件的大小下限或最初创建大小。

UsedPages

文件当前使用的 8 KB 页数。

EstimatedPages

数据库引擎估计文件能够收缩到的 8 KB 页数。

 

B. 消息

打印命令执行进度。

最佳实践

Ø  在执行会产生大量未用空间的操作(如重启)后,执行收缩操作最有效

Ø  大多数数据库都需要一些可用空间,以供常规日常操作使用。 如果反复收缩数据库,并且它的大小再次增长,那么常规操作可能需要收缩空间。 在这种情况下,反复收缩数据库是一种无谓的操作。

Ø  收缩操作不保留数据库中索引的碎片状态,通常还会在一定程度上增加碎片。 此类碎片是不要反复收缩数据库的另一个原因。

故障排除

l  文件未收缩

1.     如果在执行存储过程后文件大小未改变,请运行以下SQL,验证文件是否有足够的可用空间:

SELECT name, size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0 AS AvailableSpaceInMB FROM sys.database_files;

 

2.     如果要收缩的数据库文件大小不超过50MB,对该文件的收缩将不起作用。且会打印相关提示。如:

 

l  收缩操作受阻

基于行版本控制的隔离级别下运行的事务可能会阻止收缩操作。若要解决此问题,请执行下列任务之一:

²  终止阻止收缩操作的事务。

²  终止收缩操作。 如果收缩操作终止,所有已完成的工作都会保留。

²  不执行任何操作,并允许收缩操作等到阻塞事务完成。

示例

     收缩指定数据库

       以下示例将 dbtest2 数据库进行收缩。

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

执行结果如下:

 

收缩所有数据库

以下示例将收缩所有数据库。

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


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。