1. 说明
如果存放用户数据的dbspace发生损坏,那么IQ在启动时可以把这个损坏的dbspace标识为Offline状态,IQ Server仍然能够启动(如果IQ_SYSTEM_MAIN发生损坏,IQ 将不能启动)。在启动之后,其它完好的dbspaces仍然可以被用户访问。
如果损坏的dbspace不能修复、需要重建的话,那么需要先删除它。如果损坏的dbspace上有用户数据,那么需要把存放在这个dbspace中的所有对象删除之后才能删除它。
删除损坏dbspace中的表不能采用通常的方法,因为dbspace已损坏不能简单的执行drop table语句。下面将介绍删除的步骤(切记不是万不得已的话千万不要这样做!)
2. 删除步骤
(1) 重启服务器
例如:
start_asiq -gm 1 -gd dba @mp2.cfg mp2.db
在这个命令行中,-gm 1仅仅允许一个用户做连接,-gd只允许DBA访问。当强制删除对象时,必须禁止其他用户连接。
(2) 打开临时选项FORCE_DROP为ON:
set temporary option FORCE_DROP = 'ON'
(3) 强制删除表(假设损坏的dbspace是MP2_MAIN_CURR)
使用DROP TABLE强制删除损坏的表。在重新启动服务器之前不要执行任何其他的DDL或者DML命令!
查看MP2_MAIN_CURR的表可以使用:
sp_iqdbspaceinfo MP2_MAIN_CURR --表多的时候很慢
或者
select creator,tname from SYSCATALOG where dbspacename = 'MP2_MAIN_CURR' and tabletype='TABLE';
为了生成删除所有表的语句,可以使用如下语句:
select 'drop table ' || '"' || creator || '"' || '.' || '"' || tname || '"' || ';' from SYSCATALOG where dbspacename = 'iq_main' and tabletype='TABLE';
(4) 重新启动服务器
例如: start_asiq -gm 1 -gd dba @mp2.cfg mp2.db
(5) 运行sp_iqcheckdb
sp_iqcheckdb 'dropleaks dbspace MP2_MAIN_CURR'
(6) 发出一个checkpoint
即执行checkpoint语句
(7) 使用正常方式停止服务器
(8) 使用正常方式启动服务器,启动后即可进行正常操作。
(9) 执行 select DBSpaceName, OkToDrop from sp_iqdbspace('MP2_MAIN_CURR')
如果OkToDrop显示为Y,则可以执行如下命令删除dbspace
drop dbspace MP2_MAIN_CURR
checkpoint
(10) 重新创建CAS_MAIN_CURR
阅读(3487) | 评论(0) | 转发(0) |