我在模式 LARRY 中创建了一个表
create global temporary table TT1 (N number);
create index TT_IX1 on TT1 (N);
然后导出它,并尝试在模式 LARRY2 中导入:
expdp LARRY/LARRY directory=DATA_PUMP_DIR dumpfile=01.dmp logfile=01.dmp.exp tables=TT1
impdp LARRY2/LARRY2 directory=DATA_PUMP_DIR dumpfile=01.dmp logfile=01.dmp.imp remap_schema=LARRY:LARRY2 transform=DISABLE_ARCHIVE_LOGGING:Y,oid:N
但我在 Oracle 12c 中有一个错误:
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX
ORA-39083: Object type INDEX:"LARRY2"."TT_IX1" failed to create with error:
ORA-14451: unsupported feature with temporary table
Failing sql is:
ALTER INDEX "LARRY2"."TT_IX1" LOGGING
我也检查过
SELECT force_logging FROM v$database;
它给NO
.
我试图在互联网上搜索这个问题,但没有找到答案。我很好奇为什么 Oracle 试图将 INDEXES(以及 TEMPORARY 表的索引)置于 LOGGING 模式?以及如何解决?
这是由
transform=DISABLE_ARCHIVE_LOGGING:Y
. 由于该参数,数据库创建具有NOLOGGING
属性的索引以避免生成重做,最后将索引更改为原始值,在这种情况下为LOGGING
.但是对于 GTT 上的索引,不支持指定
NOLOGGING
or 。LOGGING
数据泵设法在没有指定的情况下创建索引NOLOGGING
(因为这没有意义),但最后,它仍然尝试将其属性更改为LOGGING
.这个bug是2年前报告的,据说在12.2中修复了。
我刚刚在 12.2 实例中尝试过这个,它确实是固定的。
一种解决方法是单独处理 GTT,而不指定
transform=DISABLE_ARCHIVE_LOGGING:Y
.