今天要测试一下hcheck,就自己模拟了一下创建了一个表空间
CREATE TABLESPACE TAB_CHECK_TEST1
DATAFILE 'D:\opt\oracle\product\10.2.0\oradata\orcl\CHECK_TEST1.DBF' SIZE 10M
AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;
scott>create table check_test(id number) tablespace TAB_CHECK_TEST;
SELECT COUNT(*) FROM DBA_TABLES WHERE TABLESPACE_NAME='TAB_CHECK_TEST';
结果:1
SELECT * FROM obj$ WHERE NAME='CHECK_TEST';
查到obj#=60671
select * from tab$ WHERE OBJ#=60671;
delete from obj$ where name='CHECK_TEST';
commit;
这里obj$里与表CHECK_TEST相关的记录被删除了,而tab$中相关的记录仍然存在。
sys>@d:\hOut.sql
sys>@hcheck3.sql
信息如下:
H.Check Version 9i+/hc3.35
---------------------------------------
Catalog Version 10.2.0.4.0 (1002000400)
---------------------------------------
Catalog Fixed
Procedure Name Version Vs Release Run
------------------------------ ... ---------- -- ---------- ---
.- SynLastDDLTim ... 1002000400 > 1001000200 : n/a
.- LobNotInObj ... 1002000400 > 1000000200 : n/a
.- MissingOIDOnObjCol ... 1002000400 <= *All Rel* : Ok
.- SourceNotInObj ... 1002000400 > 1002000100 : n/a
.- IndIndparMismatch ... 1002000400 <= 1102000100 : Ok
.- InvCorrAudit ... 1002000400 <= 1102000100 : Ok
.- OversizedFiles ... 1002000400 <= *All Rel* : Ok
.- TinyFiles ... 1002000400 > 900010000 : n/a
.- PoorDefaultStorage ... 1002000400 <= *All Rel* : Ok
.- PoorStorage ... 1002000400 <= *All Rel* : Ok
.- MissTabSubPart ... 1002000400 > 900010000 : n/a
.- PartSubPartMismatch ... 1002000400 <= 1102000100 : Ok
.- TabPartCountMismatch ... 1002000400 <= *All Rel* : Ok
.- OrphanedTabComPart ... 1002000400 > 900010000 : n/a
.- ZeroTabSubPart ... 1002000400 > 902000100 : n/a
.- MissingSum$ ... 1002000400 <= *All Rel* : Ok
.- MissingDir$ ... 1002000400 <= *All Rel* : Ok
.- DuplicateDataobj ... 1002000400 <= *All Rel* : Ok
.- ObjSynMissing ... 1002000400 <= *All Rel* : Ok
.- ObjSeqMissing ... 1002000400 <= *All Rel* : Ok
.- OrphanedUndo ... 1002000400 <= *All Rel* : Ok
.- OrphanedIndex ... 1002000400 <= *All Rel* : Ok
.- OrphanedIndexPartition ... 1002000400 <= *All Rel* : Ok
.- OrphanedIndexSubPartition ... 1002000400 <= *All Rel* : Ok
.- OrphanedTable ... 1002000400 <= *All Rel* : Ok
.- OrphanedTablePartition ... 1002000400 <= *All Rel* : Ok
.- OrphanedTableSubPartition ... 1002000400 <= *All Rel* : Ok
.- MissingPartCol ... 1002000400 <= *All Rel* : Ok
.- OrphanedSeg$ ... 1002000400 <= *All Rel* : Ok
.- OrphanedIndPartObj# ... 1002000400 <= 1101000600 : Ok
.- DuplicateBlockUse ... 1002000400 <= *All Rel* : Ok
.- HighObjectIds ... 1002000400 > 801060000 : n/a
.- PQsequence ... 1002000400 > 800060000 : n/a
.- TruncatedCluster ... 1002000400 > 801070000 : n/a
.- FetUet ... 1002000400 <= *All Rel* : Ok
.- Uet0Check ... 1002000400 <= *All Rel* : Ok
.- ExtentlessSeg ... 1002000400 <= *All Rel* : Ok
.- SeglessUET ... 1002000400 <= *All Rel* : Ok
.- BadInd$ ... 1002000400 <= *All Rel* : Ok
.- BadTab$ ... 1002000400 <= *All Rel* : Ok
.- BadIcolDepCnt ... 1002000400 <= 1101000700 : Ok
.- WarnIcolDep ... 1002000400 <= 1101000700 : Ok
.- OnlineRebuild$ ... 1002000400 <= *All Rel* : Ok
.- DropForceType ... 1002000400 > 1001000200 : n/a
.- TrgAfterUpgrade ... 1002000400 <= *All Rel* : Ok
.- FailedInitJVMRun ... 1002000400 <= *All Rel* : Ok
.- TypeReusedAfterDrop ... 1002000400 > 900010000 : n/a
.- Idgen1$TTS ... 1002000400 > 900010000 : n/a
.- DroppedFuncIdx ... 1002000400 > 902000100 : n/a
.- BadOwner ... 1002000400 > 900010000 : n/a
.- UpgCheckc0801070 ... 1002000400 <= *All Rel* : Ok
.- BadPublicObjects ... 1002000400 <= *All Rel* : Ok
.- BadSegFreelist ... 1002000400 <= *All Rel* : Ok
.- BadCol# ... 1002000400 > 1001000200 : n/a
.- BadDepends ... 1002000400 <= *All Rel* : Ok
.- CheckDual ... 1002000400 <= *All Rel* : Ok
.- ObjectNames ... 1002000400 <= *All Rel* : Ok
.- BadCboHiLo ... 1002000400 <= *All Rel* : Ok
.- ChkIotTs ... 1002000400 <= *All Rel* : Ok
.- NoSegmentIndex ... 1002000400 <= *All Rel* : Ok
.- BadNextObject ... 1002000400 <= *All Rel* : Ok
.- OrphanIndopt ... 1002000400 > 902000800 : n/a
.- UpgFlgBitTmp ... 1002000400 > 1001000100 : n/a
.- RenCharView ... 1002000400 > 1001000100 : n/a
.- Upg9iTab$ ... 1002000400 > 902000400 : n/a
.- Upg9iTsInd ... 1002000400 > 902000500 : n/a
.- Upg10gInd$ ... 1002000400 > 1002000000 : n/a
.- DroppedROTS ... 1002000400 <= *All Rel* : Ok
.- ChrLenSmtcs ... 1002000400 <= 1101000600 : Ok
.- FilBlkZero ... 1002000400 <= *All Rel* : Ok
Found 0 potential problem(s) and 0 warning(s)
PL/SQL 过程已成功完成。
竟然没有检查到错误!!!
delete from tab$ where obj#=60671;
commit;
DROP TABLESPACE TAB_CHECK_TEST including contents;
却报错:
SQL 错误: ORA-01561: 无法删除指定表空间中的所有对象
01561. 00000 - "failed to remove all objects in the tablespace specified"
*Cause: Failed to remove all objects when dropping a tablespace
*Action: Retry the drop tablespace until all objects are dropped
这个郁闷了,情况没有模拟出来,表空间也删除不了。。。。看来数据字典的信息并没有那么简单,这样模拟应该是不可以的。哎。。。。。
CREATE TABLESPACE TAB_CHECK_TEST1
DATAFILE 'D:\opt\oracle\product\10.2.0\oradata\orcl\CHECK_TEST1.DBF' SIZE 10M
AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;
scott>create table check_test(id number) tablespace TAB_CHECK_TEST;
SELECT COUNT(*) FROM DBA_TABLES WHERE TABLESPACE_NAME='TAB_CHECK_TEST';
结果:1
SELECT * FROM obj$ WHERE NAME='CHECK_TEST';
查到obj#=60671
select * from tab$ WHERE OBJ#=60671;
delete from obj$ where name='CHECK_TEST';
commit;
这里obj$里与表CHECK_TEST相关的记录被删除了,而tab$中相关的记录仍然存在。
sys>@d:\hOut.sql
sys>@hcheck3.sql
信息如下:
H.Check Version 9i+/hc3.35
---------------------------------------
Catalog Version 10.2.0.4.0 (1002000400)
---------------------------------------
Catalog Fixed
Procedure Name Version Vs Release Run
------------------------------ ... ---------- -- ---------- ---
.- SynLastDDLTim ... 1002000400 > 1001000200 : n/a
.- LobNotInObj ... 1002000400 > 1000000200 : n/a
.- MissingOIDOnObjCol ... 1002000400 <= *All Rel* : Ok
.- SourceNotInObj ... 1002000400 > 1002000100 : n/a
.- IndIndparMismatch ... 1002000400 <= 1102000100 : Ok
.- InvCorrAudit ... 1002000400 <= 1102000100 : Ok
.- OversizedFiles ... 1002000400 <= *All Rel* : Ok
.- TinyFiles ... 1002000400 > 900010000 : n/a
.- PoorDefaultStorage ... 1002000400 <= *All Rel* : Ok
.- PoorStorage ... 1002000400 <= *All Rel* : Ok
.- MissTabSubPart ... 1002000400 > 900010000 : n/a
.- PartSubPartMismatch ... 1002000400 <= 1102000100 : Ok
.- TabPartCountMismatch ... 1002000400 <= *All Rel* : Ok
.- OrphanedTabComPart ... 1002000400 > 900010000 : n/a
.- ZeroTabSubPart ... 1002000400 > 902000100 : n/a
.- MissingSum$ ... 1002000400 <= *All Rel* : Ok
.- MissingDir$ ... 1002000400 <= *All Rel* : Ok
.- DuplicateDataobj ... 1002000400 <= *All Rel* : Ok
.- ObjSynMissing ... 1002000400 <= *All Rel* : Ok
.- ObjSeqMissing ... 1002000400 <= *All Rel* : Ok
.- OrphanedUndo ... 1002000400 <= *All Rel* : Ok
.- OrphanedIndex ... 1002000400 <= *All Rel* : Ok
.- OrphanedIndexPartition ... 1002000400 <= *All Rel* : Ok
.- OrphanedIndexSubPartition ... 1002000400 <= *All Rel* : Ok
.- OrphanedTable ... 1002000400 <= *All Rel* : Ok
.- OrphanedTablePartition ... 1002000400 <= *All Rel* : Ok
.- OrphanedTableSubPartition ... 1002000400 <= *All Rel* : Ok
.- MissingPartCol ... 1002000400 <= *All Rel* : Ok
.- OrphanedSeg$ ... 1002000400 <= *All Rel* : Ok
.- OrphanedIndPartObj# ... 1002000400 <= 1101000600 : Ok
.- DuplicateBlockUse ... 1002000400 <= *All Rel* : Ok
.- HighObjectIds ... 1002000400 > 801060000 : n/a
.- PQsequence ... 1002000400 > 800060000 : n/a
.- TruncatedCluster ... 1002000400 > 801070000 : n/a
.- FetUet ... 1002000400 <= *All Rel* : Ok
.- Uet0Check ... 1002000400 <= *All Rel* : Ok
.- ExtentlessSeg ... 1002000400 <= *All Rel* : Ok
.- SeglessUET ... 1002000400 <= *All Rel* : Ok
.- BadInd$ ... 1002000400 <= *All Rel* : Ok
.- BadTab$ ... 1002000400 <= *All Rel* : Ok
.- BadIcolDepCnt ... 1002000400 <= 1101000700 : Ok
.- WarnIcolDep ... 1002000400 <= 1101000700 : Ok
.- OnlineRebuild$ ... 1002000400 <= *All Rel* : Ok
.- DropForceType ... 1002000400 > 1001000200 : n/a
.- TrgAfterUpgrade ... 1002000400 <= *All Rel* : Ok
.- FailedInitJVMRun ... 1002000400 <= *All Rel* : Ok
.- TypeReusedAfterDrop ... 1002000400 > 900010000 : n/a
.- Idgen1$TTS ... 1002000400 > 900010000 : n/a
.- DroppedFuncIdx ... 1002000400 > 902000100 : n/a
.- BadOwner ... 1002000400 > 900010000 : n/a
.- UpgCheckc0801070 ... 1002000400 <= *All Rel* : Ok
.- BadPublicObjects ... 1002000400 <= *All Rel* : Ok
.- BadSegFreelist ... 1002000400 <= *All Rel* : Ok
.- BadCol# ... 1002000400 > 1001000200 : n/a
.- BadDepends ... 1002000400 <= *All Rel* : Ok
.- CheckDual ... 1002000400 <= *All Rel* : Ok
.- ObjectNames ... 1002000400 <= *All Rel* : Ok
.- BadCboHiLo ... 1002000400 <= *All Rel* : Ok
.- ChkIotTs ... 1002000400 <= *All Rel* : Ok
.- NoSegmentIndex ... 1002000400 <= *All Rel* : Ok
.- BadNextObject ... 1002000400 <= *All Rel* : Ok
.- OrphanIndopt ... 1002000400 > 902000800 : n/a
.- UpgFlgBitTmp ... 1002000400 > 1001000100 : n/a
.- RenCharView ... 1002000400 > 1001000100 : n/a
.- Upg9iTab$ ... 1002000400 > 902000400 : n/a
.- Upg9iTsInd ... 1002000400 > 902000500 : n/a
.- Upg10gInd$ ... 1002000400 > 1002000000 : n/a
.- DroppedROTS ... 1002000400 <= *All Rel* : Ok
.- ChrLenSmtcs ... 1002000400 <= 1101000600 : Ok
.- FilBlkZero ... 1002000400 <= *All Rel* : Ok
Found 0 potential problem(s) and 0 warning(s)
PL/SQL 过程已成功完成。
竟然没有检查到错误!!!
delete from tab$ where obj#=60671;
commit;
DROP TABLESPACE TAB_CHECK_TEST including contents;
却报错:
SQL 错误: ORA-01561: 无法删除指定表空间中的所有对象
01561. 00000 - "failed to remove all objects in the tablespace specified"
*Cause: Failed to remove all objects when dropping a tablespace
*Action: Retry the drop tablespace until all objects are dropped
这个郁闷了,情况没有模拟出来,表空间也删除不了。。。。看来数据字典的信息并没有那么简单,这样模拟应该是不可以的。哎。。。。。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23065269/viewspace-714857/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/23065269/viewspace-714857/