DDLのALTER TABLEを複製せず、TRUNCATE TABLEは複製させる目的でSP_OCT_REPLICATE_DDL=2に設定していますがソース側で実行されたALTER TABLE TRUNCATE PARTITIONがターゲット側へ複製されて実行されます。
結果としてターゲット側でPostが存在しないパーティションをTruncateしようとしてORA-02149を受けて停止してしまうことがあります。
SharePlex 9.0.2 for Oracle 10gのみで確認される問題です。SharePlex 9.0.2 for Oracle 11gおよび新しいバージョンでは発生しません。
応急処置: 停止したPostはsp_ctrlからstart postで起動できます。起動してプロセスを再開してください。
SP_OCT_REPLICATE_DDL=2が設定された環境では、複製対象(=Configで指定)のオブジェクトについて ALTER TABLE(truncate partitionも対象)は複製されず、TRUNCATE TABLEは複製されることが本来の動作となります。
しかしながら、Oracle 10g 用 の SharePlex 9.0.2 ではこのDDLが複製される事象が発生します。
Oracle 11g 用 の SharePlex 9.0.2 では複製されません。より新しいバージョンのSharePlexにおいても複製されません。
SharePlex の 9.0.2より新しいリリースではOracle10gには対応していません(例 SharePlex 9.2 と Oracle 10gの組み合わせは存在しない)。この問題は9.1以上のSharePlexでは該当しません。
SharePlex 9.0.2は2020年12月9日にサポート終了しており、開発元による修正などの取り組みは行われません。
サポートからはお客様へ回避策をご提案できるのみとなります。
例:SP_OCT_REPLICATE_DDL=2の構成を維持する場合
想定: SharePlexで転送されないようなユーザーにALTER TABLE TRUNCATE PARTITIONを実行させ、
そのユーザーのアクションはSharePlexのキャプチャ対象から外させる設定を行います。
以下のSQLはappdbuserユーザのテーブル GAPN2 のパーティション GAPN2P10 を truncateしますが
SharePlexには複製を拒否させたいために専用のスキーマユーザー(名前の例 TPUSER)を用意し、
このユーザーでのみALTER TABLE TRUNCATE PARTITIONを実行させる運用へ変更した上で、SP_OCT_DENIED_USERID パラメータ にてこのユーザーを複製対象から除外します。
SQL> ALTER TABLE APPDBUSER.GAPN2 TRUNCATE PARTITION GAPN2P10;SP_OCT_REPLICATE_DDL=2なので本来は複製されませんが不本意ながらOracle10gとこのSharePlexバージョンの組み合わせではTPUSERのALTER TABLE TRUNCATE PARTITION実行も複製されてターゲットでも実行されます
ocap_ddl 2021-11-16 11:44:00.594117 27077 3007874240 User Name: "TPUSER" Status: Replicated
ocap_ddl 2021-11-16 11:44:00.594117 27077 3007874240 DDL = ALTER TABLE APPDBUSER.GAPN2 TRUNCATE PARTITION GAPN2P10
ocap_ddl 2021-11-16 11:44:00.594117 27077 3007874240 Oracle Time: 11/16/21 11:43:58 object=APPDBUSER.GAPN2
1. SharePlexには無視させたいユーザーTPUSERのユーザーIDを確認します。
SQL> select username,user_id from all_users where username='TPUSER';USERNAME
--------------------------------------------------------------------------------
USER_ID
----------
TPUSER
59
この例では59をセットします。
2. sp_ctrlから SP_OCT_DENIED_USERID パラメータを設定します
sp_ctrl> set param SP_OCT_DENIED_USERID 59Notice 2021-11-16 11:45:33.751148 27077 3007874240 Capture: Setting User ID 59 as denied-user (capturing from o.orcl) [module oct]
3. 再度専用のユーザーからSQLを実行します
今度はTPUSERによる実行のステータスは Not Replicated(複製されない)となります。
SQL> ALTER TABLE appdbuser.gapn2 TRUNCATE PARTITION GAPN2P10;ocap_ddl 2021-11-16 11:47:06.903642 27077 3007874240 User Name: "TPUSER" Status: Not Replicated
ocap_ddl 2021-11-16 11:47:06.903642 27077 3007874240 DDL = ALTER TABLE APPDBUSER.GAPN2 TRUNCATE PARTITION GAPN2P10
ocap_ddl 2021-11-16 11:47:06.903642 27077 3007874240 Oracle Time: 11/16/21 11:47:04 object=APPDBUSER.GAPN2