ORA-29857: domain indexes and/or secondary objects

时间:2022-12-30 21:05:58
dmp导入的时候出了问题,想把表空间和用户删除重建,然后再重新导入,却在删除表空间时报错:
 
> ORA-29857: domain indexes and/or secondary objects exist in the tablespace
 
看样子是域索引或者是还有其他用户引用了这个表空间的原因,首先检查一下域索引,用要表空间所属用户登录,执行语句:
 
>  select index_name, table_owner, table_name, tablespace_name from user_indexes where index_type='DOMAIN';
 
查出所有的当前表空间的域索引,将这些域索引删除之后便可继续drop表空间,但是在删除其中一个索引的时候报错:
 
> ORA-29868: cannot issue DDL on a domain index marked as LOADING
 
看样子这个就是导入时报错的地方,导致这个索引仍旧处在读取的状态,执行强制删除语句:
 
> DROP INDEX <index_name> FROCE;
 
如果这样还不行,就重启数据库后再强制删除,然后再使用DROP语句删除表空间重建即可。
 
上述是域索引导致删除报错的问题,如果是表空间同时被其他用户引用了的话,可以通过下面语句查出:
 
> select distinct owner from dba_tables where tablespace_name='<tablespace_name>'
 
如果有其他用户的话,可以将其他用户的表空间改为其他或删除用户,这样就可以继续执行表空间的删除和重建了
dmp导入的时候出了问题,想把表空间和用户删除重建,然后再重新导入,却在删除表空间时报错:
1
> ORA-29857: domain indexes and/or secondary objects exist in the tablespace
看样子是域索引或者是还有其他用户引用了这个表空间的原因,首先检查一下域索引,用要表空间所属用户登录,执行语句:
1
select index_name, table_owner, table_name, tablespace_name from user_indexes where index_type='DOMAIN';
查出所有的当前表空间的域索引,将这些域索引删除之后便可继续drop表空间,但是在删除其中一个索引的时候报错:
1
> ORA-29868: cannot issue DDL on a domain index marked as LOADING

看样子这个就是导入时报错的地方,导致这个索引仍旧处在读取的状态,执行强制删除语句:

1
> DROP INDEX <index_name> FROCE;

如果这样还不行,就重启数据库后再强制删除,然后再使用DROP语句删除表空间重建即可。

上述是域索引导致删除报错的问题,如果是表空间同时被其他用户引用了的话,可以通过下面语句查出:
1
> select distinct owner from dba_tables where tablespace_name='<tablespace_name>'
如果有其他用户的话,可以将其他用户的表空间改为其他或删除用户,这样就可以继续执行表空间的删除和重建了