スキーマ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
プロパティを使用してインデックスを作成し、REDOの生成を回避します。最後に、インデックスを元の値(この場合はLOGGING
)に変更します。
ただし、GTTのインデックスの場合、NOLOGGING
またはLOGGING
の指定はサポートされていません。 Data Pumpは、NOLOGGING
を指定せずにインデックスを作成します(これは意味をなさないため)が、最後に、プロパティをLOGGING
に変更しようとします。
このバグは2年以上前に報告され、12.2で修正されたと言われています。
バグ18366521:IMPDPがTRANSFORM = DISABLE_ARCHIVE_LOGGING:Yを使用してエラーで終了する
12.2のインスタンスでこれを試したところ、実際に修正されました。
回避策は、transform=DISABLE_ARCHIVE_LOGGING:Y
を指定せずに、GTTを個別に処理することです。