複製元(ソースDB)でDataPump Export を実行した場合、DataPumpが内部で作成するMasterテーブルのターゲットへの複製に関して、SP_OCT_REPLICATE_ALL_DDL パラメータ および SP_OCT_ALLOW_DP_DDLパラメータの値によってレプリケーションの挙動が異なります。
本記事では、複製対象・対象外とパラメータ値の組み合わせによる、複製の動作について記載いたします。
ソース側でDataPump Exportを実施する際に実行DBユーザーのスキーマのオブジェクトがSharePlexの複製対象である場合、
SharePlexはソース側で実施されるDataPumpマスターテーブルをターゲットへ複製します。
例
Config内容:
expand appdbuser.% appdbuser.% tgtserver@o.tgtds
Export手順:
expdp appdbuser@opdbnet dumpfile=OUTFILE.DMP directory=TESTDPDIR tables=proj1
この時、スキーマappdbuserに SYS_EXPORT_TABLE_## のような名前の表が一時的に作成されます。
Configの設定にて expand appdbuser.%のようなワイルドカードが設定されていると、このテーブルを作成するDDLがターゲットへ複製されます。
通常はターゲットでCREATE文の後でDROP文も複製されるため問題ありません。
但し以下のケースでは残ることがあります。
SP_OCT_REPLICATE_ALL_DDL 1(非デフォルト)
かつ
SP_OCT_ALLOW_DP_DDL 0 (デフォルト)
かつ
実行者のスキーマが複製対象外の場合:
具体的には、ソースのパラメータ設定が以下を満たし、
SP_OCT_REPLICATE_ALL_DDL 1 (非デフォルト)
SP_OCT_ALLOW_DP_DDL 0 (デフォルト)
そのうえで 以下のようにexpdpを複製対象外のスキーマ(ユーザー)で実行した場合です。
expdp expadmin@opdbnet dumpfile=OUTFILE.TMP directory=TESTDPDIR tables=appdbuser.proj1
この時、SP_OCT_REPLICATE_ALL_DDL 1により、expadmin.SYS_EXPORT_TABLE_01のCreate DDLはターゲットへ複製されますが、Drop文の複製が行われません。
結果としてexpadmin.SYS_EXPORT_TABLE_# がターゲットに残ってしまいます。
残ったままでは次回ソース側でexpdpが実行された時にターゲットではcreate tableがDDL実行エラーを受けてPostが停止しえます。
ターゲットevent_log:
Error 2025-09-29 05:19:00.199254 7146 471041792 s:1 Poster: [SP-OPO01002] Post process stopped due to DDL error ORA-00955: name is already used by an existing object on SQL CREATE TABLE "EXPADMIN"."SYS_EXPORT_TABLE_01" (abort_step .... <CAUSE> Post received a DDL error from the target database. Message:[subque/seq 1/3577 seqno/offset 35/39446032]. <ADVICE> While Post is stopped, fix the problem so that this error does not occur again. Then, manually execute the correct DDL on the target and restart Post. (Note: On restart, Post will skip the original DDL that caused the error.) To configure Post to continue processing after it receives a DDL error, set the SP_OPO_STOP_ON_DDL_ERR parameter to 0 before starting Post. See 'http://advice.shareplex.com/SP-OPO01002' for additional advice and support. (posting from o.opdbnet, queue kno819mt0, to o.opdbnet1) [module opo]
Info 2025-09-29 05:19:00.848619 6831 3084976064 Poster exited with code=1, pid = 7146 (posting from o.opdbnet, queue kno819mt0, to o.opdbnet1)
ターゲットで問題とされたオブジェクトが存在しない状態であることを確認してpostを再開すれば処理継続できます。
以下、パラメータおよびDataPumpマスターテーブル(のスキーマ)がコンフィグ対象かどうかの場合について、DDL複製の動作を記載いたします。
▽ SP_OCT_REPLICATE_ALL_DDL=0(デフォルト)、SP_OCT_ALLOW_DP_DDL=0(デフォルト)の場合
1) マスターテーブルが作成されるスキーマが複製対象ではない場合
・Create ~ 複製しない
・Drop ~ 複製しない
2) 複製対象のスキーマの場合
・Create ~ 複製する
・Drop ~ 複製する