您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

恢复泄漏的空间

在 dropleaks 模式中,使用 sp_iqcheckdb 存储过程来恢复指定数据库内泄漏的存储空间。

背景信息

服务器使用分配映射来确定某个页面是否正在 IQ 内使用。无论是通过系统故障还是由于使用强制恢复打开数据库所致,数据库的分配映射可能不会如实反映其使用情况的分配状况。发生这种情况时,我们假设该数据库有“泄漏”的存储区或“泄漏的块”。通常,当出现少量泄漏的块时,您无需太在意。如果泄漏的块达到了数兆字节,则可能需要恢复该空间。

在恢复泄漏的存储区期间,会更改分配映射的其它事务都被排除在外。此类操作包括修改数据库的检查点和命令。

恢复泄漏的存储区与强制恢复二者既可以同时进行,也可以分别进行。要在不进行强制恢复的情况下恢复数据库内泄漏的空间,请使用 DBCC 修复分配问题。要在执行强制恢复后恢复数据库内泄漏的空间,请使用以下过程恢复泄漏的空间。

如果使用 DBCC 修复分配问题无法恢复泄漏的存储区,请使用以下过程。

注意 此过程使用 -gd 和 -gm 开关限制数据库的访问。要使用限制性更强的方法,请以强制恢复模式启动服务器。

过程

  1. 结合 -iqfrec 选项使用 start_iq 命令启动服务器。start_iq -n my_db_server -x 'tcpip{port=7934}' -gd dba -gm 1 -iqfrec my_db /work/database/my_db.db需在同一行中两次指定数据库名称,一次是将其指定为要启动的数据库,一次是指定为要进行强制恢复的数据库。-iqfrec 选项要求提供数据库名称。

  1. 连接到正在恢复的数据库。

  1. 以沙漏模式运行存储过程 sp_iqcheckdb。sp_iqcheckdb 'dropleaks database'如果没有报错并且 sp_iqcheckdb 显示消息空闲列表已更新,则说明泄漏的空间已恢复并且是强制执行的恢复。继续下一步操作。 如果发现不一致性,请删除不一致的索引、表或列。然后,再次运行 sp_iqcheckdb 恢复泄漏的空间。

  1. 发出检查点。

  1. 使用常规方法停止服务器。

  1. 使用常规方法重新启动服务器,然后继续正常的处理。