Oracle expdp 将 INDEXES 置于 LOGGING 模式

ego*_*or7 2 oracle datapump impdp

我在架构 LARRY 中创建了一个表

create global temporary table TT1 (N number);
create index TT_IX1 on TT1 (N);
Run Code Online (Sandbox Code Playgroud)

然后导出它,并尝试在架构 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
Run Code Online (Sandbox Code Playgroud)

但是我在 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
Run Code Online (Sandbox Code Playgroud)

我也检查过

SELECT force_logging FROM v$database;
Run Code Online (Sandbox Code Playgroud)

它给NO.

我试图在互联网上搜索这个问题,但没有找到答案。我很好奇为什么 Oracle 尝试将 INDEXES(以及 TEMPORARY 表的索引)置于 LOGGING 模式?以及如何修复它?

Bal*_*app 8

这是由transform=DISABLE_ARCHIVE_LOGGING:Y. 由于该参数,数据库创建带有NOLOGGING属性的索引以避免生成重做,最后将索引更改为原始值,在本例中为LOGGING

但是对于 GTT 上的索引,不支持指定NOLOGGINGLOGGING。数据泵设法在没有指定的情况下创建索引NOLOGGING(因为这没有意义),但最后,它仍然尝试将其属性更改为LOGGING

这个bug是2年多前报道的,据说12.2修复了。

错误 18366521:IMPDP 以错误结束,使用 TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y

我刚刚在 12.2 实例中尝试过这个,它确实是固定的。

一种解决方法是单独处理 GTT,而不指定transform=DISABLE_ARCHIVE_LOGGING:Y.