Oracle运维笔记之IMPDP导入数据报错ORA-00943

在做impdp导入表数据时,出现了ORA-00943:cluster does not exist的错误,通常在导入数据报错都是表已存在、用户名或表空间不存在等问题,这个错误很奇怪,之前从来没有遇到过。
Oracle运维笔记之IMPDP导入数据报错ORA-00943
在MOS上搜索时发现了文档ORA-943 When Importing Clusters (Doc ID 1005258.6),这个错误ORACLE是这样解释的:
Oracle运维笔记之IMPDP导入数据报错ORA-00943
简单来说就是如果导入的表是聚簇表,而目标端预先创建的表不是聚簇表的话,那么在导入时表定义检查就会失败,报错ORA-00943: cluster does not exist。
解决方案就是,创建聚簇再导入表数据。
接下来就按照解决方案来处理
1.查看表的聚簇,CLUSTER_EIS_STUDIES

SQL> select owner,table_name,cluster_name from dba_tables where table_name='EISREPORTS';
OWNER TABLE_NAME CLUSTER_NAME
------------------------------ ------------------------------ ---------------------------
RADINFO EISREPORTS CLUSTER_EIS_STUDIES

2.获取聚簇的创建语句

select dbms_metadata.get_ddl('CLUSTER','CLUSTER_EIS_STUDIES','RADINFO') from dual;

3.在目标库上创建聚簇

CREATE CLUSTER RADINFO.CLUSTER_EIS_STUDIES (
PATIENTSINDEX NUMBER(10,0) )
SIZE 2048

聚簇已经创建完毕,再次impdp导入数据,却发现仍然报错,但这次的错误和之前不同,ORA-02032: clustered tables cannot be used before the cluster index is built,
从字面理解来说就是聚簇索引创建前无法使用聚簇表。
Oracle运维笔记之IMPDP导入数据报错ORA-00943
那么接下来就要从源端查询聚簇索引信息,之后在目标端创建了。
1.在源端查询聚簇索引信息:

select index_owner,index_name,table_name,column_name from dba_ind_columns where table_name='CLUSTER_EIS_STUDIES'
INDEX_OWNER INDEX_NAME TABLE_NAME COLUMN_NAME
-------------------------- ------------------------------ -------------------------- --------------------------
RADINFO IX_CLUSTER_EIS_STUDIES CLUSTER_EIS_STUDIES PATIENTSINDEX

2.在目标端创建聚簇索引:

create index radinfo.IX_CLUSTER_EIS_STUDIES on cluster CLUSTER_EIS_STUDIES;

再次impdp导入数据,这次终于执行成功。

上一篇:Oracle运维之由杀毒软件造成的数据库无法连接


下一篇:Oracle运维笔记之创建物化视图报错ORA-08102