Data Pumpインポート
Data Pumpインポート処理の実行時にはテーブルに対して更新が発生するため、REDOが生成されます。障害が発生した場合にはData Pumpの再ロードを行うことで整合性が保てるのであれば、REDOの生成を抑制してパフォーマンスを向上させることができます。Oracle Database 11gまでは、REDOの抑制はインポート先のオブジェクトに対してNOLOGGING属性を指定していました。
Oracle Database 12c以降は、impdpコマンドのtransformパラメーターにdisable_archive_loggingオプションを指定することでインポート時のREDOを抑制することができます。
使い方
transformオプションにdisable_archive_loggingを指定します。さらにこのオプションを有効化(:Y)するか、無効化(:N)するかを指定します。特定のオブジェクトのみ効果を指定する場合には、オブジェクトの種類を指定することができるようです(例disable_archive_logging:Y:TABLE)。
ただし最新の マニュアル には記述がありません。
$ impdp userid=SCOTT/password dumpfile=scott.dmp directory=DIR1 table_exists_action=TRUNCATE transform=disable_archive_logging:Y
Import: Release 19.0.0.0.0 - Production on Fri Aug 30 03:10:33 2019
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
...
Processing object type SCHEMA_EXPORT/STATISTICS/MARKER
Job "SCOTT"."SYS_IMPORT_SCHEMA_01" completed with 4 error(s) at Fri Aug 30 03:10:41 2019 elapsed 0 00:00:08
$
disable_archive_loggingパラメータを指定した場合と指定しなかった場合で、REDO発生量を比較します。V$SYSSTATビューから処理実行ごとにREDO発生量を検索して処理後に引き算します。
SQL> SELECT VALUE FROM V$SYSSTAT WHERE NAME='redo size';
VALUE
----------
57994244
処理 | REDO生成量(KB) |
---|---|
通常 | 113,199.25 |
disable_archive_logging指定 | 59,912.06 |
impdpコマンドに「transform=disable_archive_logging:Y」オプションを指定することで、REDO生成量が小さくなっていることがわかります。
FORCE LOGGINGとの併用
データベースの属性にFORCE LOGGINGがあります。FORCE LOGGING属性が設定されていると、NOLOGGING属性が指定されたオブジェクトに対してもREDOが生成させるようになります。Data Guard環境では一般的な指定です。FORCE LOGGING属性が有効なデータベースに対してdisable_archive_loggingパラメーターを指定してインポートを行いました。
SQL> SELECT FORCE_LOGGING FROM V$DATABASE;
FORCE_LOGGING
---------------------------------------
YES
処理 | REDO生成量(KB) |
---|---|
通常 | 113,352.77 |
disable_archive_logging指定 | 113,328.91 |
上記の結果から「transform=disable_archive_logging:Y」オプションを指定してもFORCE LOGGINGが指定されたデータベースではREDOの生成は抑制できないことがわかります。
その他
サポート文書 DocID: 2373293.1 にはFORCE LOGGING設定以外でもREDOが生成される条件が示されています。