执行 impdp 导入时遇到如下报错
ORA-39083: Object type TABLE:“XXX”.“TABLE1” failed to create with error:
ORA-02195: Attempt to create TEMPORARY object in a NON-TEMPORARY tablespace
Failing sql is:
CREATE GLOBAL TEMPORARY TABLE “XXX”.“TABLE1” (“CERTIFYCODE” VARCHAR2(10 BYTE), “SUBCODE” VARCHAR2(2 BYTE), “RISKCODE” VARCHAR2(6 BYTE), “RISKVERSION” VARCHAR2(8 BYTE), “STARTNO” VARCHAR2(20 BYTE), “ENDNO” VARCHAR2(20 BYTE), “DMLTYPE$$” VARCHAR2(1 BYTE), “SNAPID” NUMBER(*,0), “CHANGE_VECTOR$$” RAW(255)) ON COMMIT PRESERVE ROWS
参考文档:Impdp of temporary table fails with ORA-02195: Attempt to create TEMPORARY object in a NON-TEMPORARY tablespace while remapping system tablespace to another. (文档 ID 1493317.1)
原因:
impdp 导入时,如果没有指定 REMAP_TABLESPACE
参数,默认就不会给create global temporary tables语句附加表空间信息。
然而,一旦指定了 REMAP_TABLESPACE
参数,那么就会附加 新表空间名字
到 CREATE GLOBAL TEMPORARY TABLE 语句。
将临时表从一个临时表空间映射到另一个表空间是有道理的。所以以上报错是一个预期行为,并且已提交增强请求,以便表空间重映射不会发生在临时表上。
该增强接收前,可采用如下workaround处理
Workaround 1:
- 导入时,排除掉该表空间上的临时表
- 导入后手工创建这部分临时表
Workaround 2:
-
删除源库的临时表,并将临时表创建到临时表空间,然后再执行导出。
-
导入时,通过
REMAP_TABLESPACE
重定义到目标库的临时表空间。
评论
