Post はそれぞれのキュー毎に個別のプロセスIDのプロセスを持っており、以下主に 3種類のスレッドから成り立っています。
メインスレッド : (1つ)
- 自身の Post キューからメッセージを取り出してSQL文を SQLスレッド に割り当てます。
SQLスレッド: (1つ以上複数)
- Oracle Database に接続して DML、DDL を実行する役割を担います
- Out Of Sync(OOS) を検出します。
- 競合解決処理を実行します
タイマースレッド: (1つ)
- SQL スレッドの SQL 実行時間を計測して SP_OPO_MAX_OEXN_TIME パラメータの作用を制御します。
メインスレッドがSQLスレッド(達)へ複製用のメッセージを渡して、SQLスレッドがそれぞれOracle DatabaseへSQL文を投入することが主な仕組みです。
ターゲット event_logから確認
Info 2025-10-20 07:05:14.746771 14341 223570880 Poster launched, pid = 14341 (posting from o.opdbnet, queue kno819mt0, to o.opdbnet)
タイプスタンプの右隣の14341はPostキュー名 kno819mt0 のプロセスIDです。
SQLスレッドにはそれぞれセッション情報が割り当てられます。以下の例ではtruncateの指示(ODR_TRUNC)が送られた際に、SQLスレッドに対してセッション番号が割り当てられます。
Notice   2025-10-20 07:29:45.447842 14341 1301567040 s:6 Poster: Table "BPPDBUSER"."FR" will be truncated   (posting from o.opdbnet, queue kno819mt0, to o.opdbnet) [module opo]
Notice   2025-10-20 07:29:45.536317 14341 1301567040 s:6 Poster: Table "BPPDBUSER"."FR" was truncated   (posting from o.opdbnet, queue kno819mt0, to o.opdbnet) [module opo]
メインスレッドからディスパッチされたODR_TRUNCが SQLスレッドで処理され、CreateSQLされてデータベースへ送られます。
sp_ctrl> show post sessions detail
Session Session  Pending  Operations Number of    RB Ops  SID/InstID Thread ID
Number  Status   Messages Done       Transactions Skipped
------- -------- -------- ---------- ------------ ------- ---------- ---------
      5 Committe        0          0            2       0 38/1            4
      6 Committe        0          0            1       0 267/1           3
SID 38や267はターゲットOracle DatabaseでのセッションIDです。(V$SESSION のSID値)
3 Waiting 0 1 0 0 267/1 5
sp_ctrl > show post sessions detail は直近で実行したSQL文とセッション番号、スレッド番号を表示します
   Thread    Session
   ------    -------
        5          3
終わっていればThread が0の事もありますが何らかの手掛かりになります。
DML文のメッセージをログに記録するにはSP_OPO_DEBUG_FLAGなどのデバッグオプションが必要ですが、より詳細な情報を得られます。