RDS for SQL Server收缩数据库

网友投稿 930 2022-05-29

操作场景

华为云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';

RDS for SQL Server收缩数据库

执行结果如下:

收缩所有数据库

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

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

华为云数据库 sqlserver 数据库

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:代码自动生成 --- 一切都为了提高您的工作效率,和苦逼码农说NO
下一篇:分立式arm+fpga工业核心板,高性能低成本,不香吗?
相关文章