web-dev-qa-db-ja.com

Oracle expdpはINDEXESをLOGGINGモードにします

スキーマ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モードにしようとする理由を知りたいのですが。そしてそれを修正する方法?

2
egor7

これは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を個別に処理することです。

8
Balazs Papp