刪除表空間報錯ORA-00604&ORA-02429解決過程

Hoegh發表於2015-08-27

    今天在刪除表空間時遭遇報錯ORA-00604&ORA-02429,下面分享一下解決問題的過程。

測試環境
    我在Oracle 10g+Windows Server 2008 Standard R2進行操作。

點選(此處)摺疊或開啟

  1. SQL>
  2. SQL> select * from v$version;

  3. BANNER
  4. ----------------------------------------------------------------

  5. Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
  6. PL/SQL Release 10.2.0.4.0 - Production
  7. CORE 10.2.0.4.0 Production
  8. TNS for 64-bit Windows: Version 10.2.0.4.0 - Production
  9. NLSRTL Version 10.2.0.4.0 - Production


  10. SQL>


1.刪除表空間報錯
    我在執行drop tablespace語句時,資料庫報錯,提示:
“ORA-00604: 遞迴 SQL 級別 1 出現錯誤
ORA-02429: 無法刪除用於強制唯一/主鍵的索引”。
    根據報錯,我新增了cascade constraints選項,依然報錯。過程如下:

點選(此處)摺疊或開啟

  1. SQL> drop tablespace HOEGH;
  2. drop tablespace HOEGH
  3. *
  4. 第 1 行出現錯誤:
  5. ORA-01549: 表空間非空, 請使用 INCLUDING CONTENTS 選項


  6. SQL> drop tablespace HOEGH including contents;
  7. drop tablespace HOEGH including contents
  8. *
  9. 第 1 行出現錯誤:
  10. ORA-00604: 遞迴 SQL 級別 1 出現錯誤
  11. ORA-02429: 無法刪除用於強制唯一/主鍵的索引


  12. SQL>
  13. SQL> drop tablespace HOEGH including contents cascade constraints;
  14. drop tablespace HOEGH including contents cascade constraints
  15. *
  16. 第 1 行出現錯誤:
  17. ORA-00604: 遞迴 SQL 級別 1 出現錯誤
  18. ORA-02429: 無法刪除用於強制唯一/主鍵的索引


  19. SQL>


2.查詢唯一/主鍵索引
    通常來說,同時報多個錯誤都是由其中一個引起的。接下來,我們要查一下儲存在HOEGH表空間的唯一/主鍵索引。如下所示:

點選(此處)摺疊或開啟

  1. SQL> select 'alter table '||owner||'.'||table_name||' drop constraint '||constraint_name||' ;'
  2.   2 from dba_constraints
  3.   3 where constraint_type in ('U', 'P')
  4.   4 and (index_owner, index_name) in
  5.   5 (select owner, segment_name
  6.   6 from dba_segments
  7.   7 where tablespace_name = 'HOEGH');

  8. 'ALTERTABLE'||OWNER||'.'||TABLE_NAME||'DROPCONSTRAINT'||CONSTRAINT_NAME||';'
  9. -----------------------------------------------------------------------------------------------------

  10. alter table HOEGH.HOEGH drop constraint PK_HOEGH ;
  11. alter table HOEGH1.HOEGH drop constraint PK_HOEGH ;
  12. alter table HOEGH2.HOEGH drop constraint PK_HOEGH ;

  13. SQL>
    從查詢結果來看,該表空間包含3個主鍵索引。

3.刪除唯一/主鍵索引
    根據上面的查詢結果,刪除唯一/主鍵索引。如下所示:

點選(此處)摺疊或開啟

  1. SQL> alter table HOEGH.HOEGH drop constraint PK_HOEGH ;

  2. 表已更改。

  3. SQL> alter table HOEGH1.HOEGH drop constraint PK_HOEGH ;

  4. 表已更改。

  5. SQL> alter table HOEGH2.HOEGH drop constraint PK_HOEGH ;

  6. 表已更改。

  7. SQL>


4.成功刪除表空間
    再次執行drop tablespace語句,成功。

點選(此處)摺疊或開啟

  1. SQL>
  2. SQL> drop tablespace HOEGH including contents cascade constraints;

  3. 表空間已刪除。

  4. SQL>

hoegh
15.8.27
-- The End --

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30162081/viewspace-1783766/,如需轉載,請註明出處,否則將追究法律責任。

相關文章