删除表空间:报ORA-00604 递归sql级别1出现错误和ORA-02429:无法删除用于强制唯一/主键的索引

sys用户执行

  • 查找表空间的路径

sql> select * from dba_data_files;


查询结果1.png
  • 删除表空间(非空表空间,包含物理文件,如果其他表空间中的表有外键等约束关联到了本表空间中的表的字段,就要加上cascade constraints)

sql> drop tablespace ZWHZYQ including contents including datafiles cascade constraints;

添加了cascade constraints选项,依然报错。报以下错误


报错.jpg
解决方式】:
  1. 查询主键约束

sql> select segment_name,partition_name,tablespace_name from dba_extents where tablespace_name=upper('ZWHZYQ');


查询结果2.png
  1. 生成删除主键约束的脚本

sql> select 'alter table '||owner||'.'||table_name||' drop constraint '||constraint_name||' ;' from dba_constraints where constraint_type in ('U', 'P') and (index_owner, index_name) in (select owner, segment_name from dba_segments where tablespace_name = 'ZWHZYQ');


查询结果3.png
  1. 执行生成的脚本

sql> alter table HZBSYS.A0193_TAG drop constraint PK_A0193_TAG ;
sql> .....

  1. 删除表空间

sql> drop tablespace ZWHZYQ including contents including datafiles;

执行上面步骤后发现删除部分表空间,仍然报错,排查后才发现,忘记删除用户。
删表空间之前必须先删除使用该表空间的用户。

sql> select * from dba_users;


查询结果4.png

sql> drop user 【用户名】 cascade;
sql> drop tablespace ZWHZYQ including contents including datafiles;

你可能感兴趣的:(删除表空间:报ORA-00604 递归sql级别1出现错误和ORA-02429:无法删除用于强制唯一/主键的索引)