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

删除不一致的索引、表或列

请使用以下建议来解决无法修复的索引、列或表的相关问题。

背景信息

如果 sp_iqcheckdb 报告无法修复的索引、列或表,则必须分别使用 DROP INDEXALTER TABLE DROP COLUMN 或 DROP TABLE 语句来删除这些对象。 注意 除非 SAP 技术支持部门指导您强制删除对象,否则不要尝试该操作。

如果无法删除某个不一致的对象,请设置临时的 FORCE_DROP 选项。FORCE_DROP 会使 IQ 服务器以静默方式泄漏已删除对象的磁盘存储区,而不尝试回收。您稍后可以使用 DBCC 恢复泄漏的空间。这是对不一致对象的最好处理方法,因为关于对象的存储的唯一信息存在于该对象本身,并且该信息可能就是不一致的对象。

不允许对辅助节点使用 FORCE_DROP 数据库选项。试图在辅助节点上强制执行删除操作,将返回错误。FORCE_DROP 是一个临时选项,这样选项的值在同步时就不会传播到辅助节点。

注意 在强制删除对象时,必须确保只有 DBA 连接到数据库。强制删除之后应立即重新启动服务器。 此过程使用 -gd 和 -gm 开关限制数据库的访问。-gd 开关仅限制能够在运行的服务器上启动或停止数据库的用户。要使用限制性更强的方法,请以强制恢复模式启动服务器。

过程

  1. 重新启动服务器。start_iq -n bad_db_server -x 'tcpip{port=7934}' -gm 1 -gd dba bad_db.db强制删除对象时,不能允许其他用户进行连接。使用两个服务器启动开关限制访问: 使用 -gd DBA 以便只有具备 SERVER OPERATOR 系统特权的用户才能启动和停止数据库。(请注意,客户端必须已连接到服务器才能启动或停止数据库,因此此开关不阻止连接。) 使用 -gm 1 可允许单个连接外加一个超限 DBA 连接,这样 DBA 便可在紧急情况下进行连接并断开其它连接。 有关限制连接的详细信息,请参见 SAP IQ 安装和更新指南。

  1. 使用 -gd DBA 以便只有具备 SERVER OPERATOR 系统特权的用户才能启动和停止数据库。(请注意,客户端必须已连接到服务器才能启动或停止数据库,因此此开关不阻止连接。)

  1. 使用 -gm 1 可允许单个连接外加一个超限 DBA 连接,这样 DBA 便可在紧急情况下进行连接并断开其它连接。

  1. 将 FORCE_DROP 临时选项设置为 ON。set temporary option FORCE_DROP = 'ON'

  1. 删除所有不一致的对象。根据需要使用命令 DROP INDEXALTER TABLE DROP COLUMN 或 DROP TABLE。在重新启动服务器之前,请勿输入任何其它 DDL 或 DML 命令。

  1. 重新启动服务器。请启动服务器以恢复泄漏的空间,并将分配映射更新为正确的状态。start_iq -n bad_db_server -x 'tcpip{port=7934}' -gm 1 -gd dba bad_db.db

  1. 运行 sp_iqcheckdb。sp_iqcheckdb 'dropleaks database'; 此步骤重置数据库的分配映射以计算分配映射。