pdorendオンライン再編成の追い付き反映

機能

更新可能なオンライン再編成を実行している場合に,オンライン再編成閉塞となっていたRDエリアに更新処理を反映します。

オンライン再編成の追い付き反映では,次の処理をします。

  1. pdorendコマンド実行後に,サーバごとにpdorend反映プロセスを起動します。そして,システムログからオンライン再編成閉塞のレプリカRDエリアに対する更新ログ情報を読み出し,オリジナルRDエリアに対して更新をします。
  2. 反映完了後,カレントRDエリアをレプリカRDエリアからオリジナルRDエリアに切り替え,オンライン再編成閉塞のオリジナルRDエリアを閉塞解除状態にします。また,レプリカRDエリアをコマンド閉塞状態,かつクローズ状態にします。
  3. pdorend実行中は,オリジナルRDエリアとレプリカRDエリアの状態の最終的な同期を取るため,一時的に該当するRDエリアのレプリカグループ構成に排他を掛けます。このとき,レプリカRDエリアに対する処理は排他待ちになります。詳細については,-tオプションの説明を参照してください。
  4. 排他を掛けてから,カレントRDエリアの切り替え処理が完了するまで,処理中のレプリカグループ内のRDエリアにアクセスするトランザクションは待ち状態になります。カレントRDエリアの切り替え後,トランザクションはオリジナルRDエリアにアクセスします。
  5. -uオプションを指定した場合は,追い付き反映処理を停止し,オリジナルRDエリアとレプリカRDエリアのオンライン再編成閉塞を解除します。ただし,カレントRDエリアは,レプリカRDエリアのまま切り替わりません。
  6. オンライン再編成対象のRDエリアに,被参照表,参照表,及び検査制約表がある場合,参照表及び検査制約表を検査保留状態にします。なお,-pオプションを指定した場合は,参照表及び検査制約表を検査保留状態にしません。

pdorendコマンドは,HiRDB Staticizer Optionが組み込まれていて,かつシステム定義のpd_max_reflect_process_countオペランド及びpd_inner_replica_controlオペランドを指定している場合に実行できます。

実行者

HiRDB管理者が実行できます。

形式

 pdorend 〔-s サーバ名〔,サーバ名〕…〕

     {〔-n 最大リトライ回数〕 〔-w 追い付き反映処理の最大待ち時間〕

      〔-t トランザクション処理の最大待ち時間〕

      〔-m pdorend反映プロセスの多重度〕 〔-z〕

      〔-f 追い付き反映制御ファイル名〕〔-p〕

      |〔-u〕}

オプション

レプリカRDエリアに対する更新処理をオリジナルRDエリアに反映する,レプリカグループのあるサーバの名称を指定します。

<規則>
  1. -sオプションを省略した場合,オンライン再編成閉塞のRDエリアがあるすべてのサーバに対して追い付き反映処理をします。
  2. サーバ名を重複して指定した場合,重複排除されます。
  3. 指定できるサーバの数は最大128個です。129個以上指定した場合,129個目以降のサーバ名は無視されます。
  4. pdorbeginコマンドでサーバ間横分割表を指定した場合,サーバ間で一括して処理をします。したがって,追い付き反映処理をするサーバを限定するときだけ,-sオプションを指定してください。
  5. 処理対象RDエリアに共用RDエリアがある場合に-sオプションを指定するときは,同時に-uオプションも指定してください。-uオプションを指定していない場合に-sオプションを指定するとエラーになります。
  6. 次の条件を二つとも満たす場合,-sオプションを指定してpdorendコマンドを実行してください。-sオプションを省略して実行すると,エラーとなります。
    • -tオプション指定のpdorbeginコマンドを実行している(共用表を指定している場合を除く)。
    • HiRDBの一部のユニット若しくはサーバが停止している,又は停止処理中である。

オリジナルRDエリアとレプリカRDエリアの同期を取るため,オンライン再編成閉塞のRDエリアがあるレプリカグループ構成に排他を掛けます。排他を掛けるとき,又は排他を掛けた後の,追い付き反映処理時にタイムアウトが発生した場合に,リトライするサーバごとの最大リトライ回数を指定します。

指定した最大リトライ回数を超えた場合,該当するサーバの処理はエラー終了します。リトライが発生する条件については,規則を参照してください。

レプリカRDエリアに対する更新処理をオリジナルRDエリアに反映するまでの,最大待ち時間を秒単位で指定します。

指定した追い付き反映処理の最大待ち時間を超えた場合,処理が終了していないサーバはエラー終了となります。エラーとなった場合は,-wオプションの指定値を大きくするか,又はpdorend実行中のオンライン業務のトランザクション量を抑えるかしてください。

オリジナルRDエリアとレプリカRDエリアの同期を取るための,オンライン再編成閉塞のRDエリアがあるレプリカグループ構成の排他を掛けるとき,又は排他を掛けた後の追い付き反映処理の完了までの,サーバごとの最大待ち時間を秒単位で指定します。

-tオプションを省略した場合,システム定義のpd_lck_wait_timeoutオペランドの指定値が仮定されます。トランザクション処理の最大待ち時間については,規則を参照してください。

レプリカRDエリアに対する更新処理をオリジナルRDエリアに反映する,pdorend反映プロセスのバックエンドサーバごとの多重度を指定します。

<規則>
pdorendコマンドを実行すると,次の計算式の数のpdorend反映プロセスが起動されます。

pdorend反映プロセス起動数=M×S(単位:プロセス数)

M:-mオプションの指定値
S:-sオプションの指定値(-sオプションを省略した場合,オンライン再編成閉塞のRDエリアがあるすべてのバックエンドサーバ数)

なお,HiRDB全体で保証されるpdorend反映プロセス数は,あらかじめシステム定義のpd_max_reflect_process_countオペランドで指定しておく必要があります。
<指定値の目安>
指定値は次の計算式から求めてください。なお,ログ読み込みなどのボトルネックでの最大有効多重度は8程度を仮定します。

pdorend反映プロセスの多重度=
MIN(8,↑(NLine×PLine/100)×Ntrn×(m+n)/n×TSql↑)

NLine:SDS又はBESにあるRDエリアの更新での,1トランザクション当たりの平均更新行数
PLine:SDS又はBESにあるRDエリアの更新のうち,対象となるRDエリアの更新が占める割合(単位:%)
Ntrn:SDS又はBESにあるRDエリアの更新での,1秒当たりのトランザクション量(単位:件数)
m:表の再編成の実行時間(単位はnと同じにしてください)
n:追い付き反映処理時間(単位はmと同じにしてください)
TSql:対象となるRDエリアの1行当たりの平均SQL実行時間(単位:秒)

例えば,NLine=10,PLine=20,Ntrn=50,TSql=0.003,及び追い付き反映処理時間が表の再編成の実行時間の1/5程度の場合,pdorend反映プロセスの多重度は2となります。
なお,次の場合は,反映処理の間で処理の競合が発生するため,多重度は1にすることをお勧めします。
  • 追い付き反映処理の対象表の,ngramインデクスを頻繁に更新する場合
  • 追い付き反映処理の対象表の,UNIQUE指定のインデクスを頻繁に更新する場合

障害発生時に,システムログ反映開始ポイントから再度追い付き反映処理を実行する場合に指定します。

-zオプションは,サーバで障害が発生したとき以外は指定しないでください。サーバでエラーが発生した後,再度pdorendコマンドを実行するときには指定しないでください。

<適用基準>
pdorendコマンド実行中に,オリジナルRDエリアがある正系ボリュームで障害が発生した場合,正系ボリュームを回復した後に,再度pdorbeginコマンドで設定したシステムログ反映開始ポイントから追い付き反映処理をするときに指定します。

追い付き反映処理の制御文を記述したファイル(追い付き反映制御ファイル)を,絶対パス名で指定します。-fオプションを省略した場合,追い付き反映制御ファイルに記述できる制御文の省略時仮定値が仮定されます。

追い付き反映制御ファイルに記述できる制御文を次に示します。

制御文内容指定できる個数
reflection追い付き反映処理の動作内容を指定します。1
report追い付き反映処理の実行結果を出力するファイルを指定します。1

reflection文とreport文は必ず両方とも指定してください。また,reflection文のsql_traceオペランドとreport文のsqltrc_dirオペランドは必ず両方とも指定してください。

reflection文
reflection文について説明します。
形式:
 reflection 〔sql_error={stop|skip}〕
      〔mvcelmwarn={stop|ignore}〕
      〔sql_trace={none|err|all}〕
説明:
sql_error={stop|skip}
追い付き反映処理中にSQLエラーが発生した場合の動作を指定します。
stop:
SQLエラーが発生した場合,エラー終了します。このとき,処理はロールバックされ,前回のコミット時点の状態で終了します。
skip:
SQLエラーが発生した場合,特定のSQLエラー※1は無視して追い付き反映処理を続行します。
skipを指定すると,更新可能なオンライン再編成後のオリジナルとレプリカのDBの整合性が保証できなくなります。このため,skipは,十分に運用を検討した上で指定してください。
スキップしたSQLの情報は,report文のskip_infoオペランドに指定したファイルに出力されます。このとき,スキップしたSQLを特定するため,スキップ情報中にマッピングキー※2情報を出力します。SQLをスキップした後に同じ行に対してマッピングキー更新をすると,マッピングキー情報からはスキップした行が特定できなくなります。
注※1
無視する特定のSQLエラーを次に示します。
  • キー重複エラー(SQLCODE=-803,SQLWARN6=空白)
  • 対象行なしエラー(SQLCODE=100,SQLWARN6=空白)
  • UPDATE文のADD句で追加した列の要素数が最大要素数を超えているエラー(SQLCODE=-806,SQLWARN6=空白)
注※2
レプリカRDエリアの更新行に対応するオリジナルRDエリアの反映対象行の特定には,表に定義されているユニークキー(CREATE UNIQUE INDEXで指定された列,CREATE TABLE PRIMARY KEYで指定された列,CREATE TABLE PRIMARY CLUSTER KEY,又はCREATE TABLE UNIQUE CLUSTER KEYで指定された列)のうち,その構成列すべてが非ナル値制約であるものを使用します。このキーをマッピングキーといいます。該当するユニークキーが複数ある場合は,クラスタキー,プライマリキー,インデクスIDの小さいインデクスの順番でどれか一つをマッピングキーとして使用します。
mvcelmwarn={stop|ignore}
追い付き反映処理中に,SET句又はDELETE句で繰返し列にない要素番号を指定したUPDATE文を実行した場合,警告エラーとなります。この警告エラーとなったときの動作内容を指定します。
stop:
追い付き反映処理をエラー終了します。このとき,処理はロールバックされ,前回のコミット時点の状態で終了します。
ignore:
繰返し列にない要素に対する更新を無視し,繰返し列にある要素及び列に対する更新だけをして,追い付き反映処理を続行します。
ignoreを指定すると,更新可能なオンライン再編成後のオリジナルとレプリカのDBの整合性が保証できなくなります。このため,ignoreは,十分に運用を検討した上で指定してください。
更新が無視されたSQLの情報は,report文のskip_infoオペランドに指定したファイルに出力されます。このとき,更新の一部が無視されたSQLを特定するため,スキップ情報出力ファイル中にマッピングキー情報を出力します。該当するSQLを実行した後に,同じ行に対してマッピングキー更新をすると,マッピングキー情報から該当する行が特定できなくなります。
sql_trace={none|err|all}
追い付き反映処理中にマスタのDBに対して発行したSQLのトレース情報を出力するかどうかを指定します。
none:
追い付き反映処理中にマスタのDBに対して発行したSQLのトレース情報を出力しません。
err:
追い付き反映処理中にマスタのDBに対して発行したSQLがエラーの場合,SQLのトレース情報及びスキップ情報をファイルに出力します。
all:
追い付き反映処理中にマスタのDBに対して発行したSQLのトレース情報及びスキップ情報をファイルに出力します。allを指定した場合,実行したSQLの終了状態(正常終了又は異常終了)に関係なく出力します。
<規則>
  1. このオペランドを指定する場合,report文のsqltrc_dirオペランドの指定は必須です。
report文
report文について説明します。
形式:
 report 〔skip_info=スキップ情報出力ファイル名〕
    〔sqltrc_dir=SQLトレース情報ファイル出力ディレクトリ名
          ,SQLトレース情報ファイルサイズ〕
説明:
skip_info=スキップ情報出力ファイル名 ~<パス名>((235文字以内))
reflection文にsql_error=skip,又はmvcelmwarn=ignoreを指定した場合,スキップしたSQL,又は繰返し列にない要素の更新を無視したSQLの情報を出力するファイルを,絶対パス名で指定します。なお,実際に作成されるファイル名は,"指定したファイル名_サーバ名_プロセスID"となります。
注※
サーバ名:最大8文字で,スキップ対象のSQLエラーが発生したサーバ名
プロセスID:最大10文字で,スキップ対象のSQLエラーが発生したプロセスID
<規則>
  1. スキップ情報出力ファイルを出力するディレクトリは,すべてのサーバマシンで同じにしておく必要があります。出力するディレクトリがない場合は,制御文エラーとなります。
  2. このオペランドを省略した場合,次の名称でファイルが作成されます。
    skip_infoオペランドの指定システム定義のpd_tmp_directoryオペランドの指定
    ありなし
    環境変数TMPDIRの指定
    ありなし
    ありskip_infoオペランドに指定したディレクトリ/指定したファイル名_サーバ名_プロセスID
    なしpd_tmp_directoryに指定したディレクトリ/pdskipsql_サーバ名_プロセスIDTMPDIRに指定したディレクトリ/pdskipsql_サーバ名_プロセスID/tmp/pdskipsql_サーバ名_プロセスID
    注※ init(OSのプロセス)から起動されたプロセスサーバプロセス(pdprcd)に設定される環境変数

  3. 指定したスキップ情報出力ファイルがない場合は,スキップ情報出力ファイルを作成した後,スキップ情報を出力します。指定したスキップ情報出力ファイルがある場合は,そのファイルにスキップ情報を追加出力します。
  4. スキップ情報出力中にエラーが発生した場合,処理を中断して,ロールバックした後エラー終了します。
スキップ情報出力ファイルの出力情報:
スキップ情報出力ファイルに出力される情報を次に示します。

YYYY/MM/DD HH:MM:SS  SVR(サーバ名) PID(プロセスID) [1]
**** SKIP SQL INFORMATION **** [2]
 TABLE NAME : "認可識別子"."表識別子" [3]
 SQL KIND : SQL種別 [4]
 SQLCODE : SQLコード [5]
 SQLWARN : 警告情報 [6]
 **** AFTER KEY INFORMATION **** [7]
   COLUMN NAME : "列名" [8]
     DATA LENGTH : 実データ長 [9]
     DATA : データ値 [10]
 **** BEFORE KEY INFORMATION **** [11]
   COLUMN NAME : "列名" [12]
     DATA LENGTH : 実データ長 [13]
     DATA : データ値 [14]
 **** UPDATE MULTI-VALUE COLUMN INFORMATION **** [15]
   COLUMN NAME : "列名" [16]
     UPDATE ELEMENT NO : 要素番号[,要素番号]... [17]

[説明]
スキップしたSQL数分,1~14が出力されます。
SQL種別がINSERT,及びUPDATEの場合,7~10が出力されます。また,マッピングキー列数分,8~10が出力されます。
SQL種別がUPDATE,及びDELETEの場合,11~14が出力されます。また,マッピングキー列数分,12~14が出力されます。
mvcelmwarnオプションにignoreを指定し,かつSQL種別がUPDATE SET(要素指定),UPDATE ADD,又はUPDATE DELETEの場合,15~17が出力されます。また,更新対象の繰返し列数分,16及び17が出力されます。
  1. SQLエラー発生の日時,サーバ名,及びプロセスIDです。
  2. スキップ情報のヘッダ
  3. 認可識別子,及び表識別子
  4. スキップしたSQL種別
    INSERT:挿入
    UPDATE SET,UPDATE ADD,及びUPDATE DELETE:更新
    DELETE:削除
  5. スキップしたSQLのSQLCODE
  6. 警告情報
    発生した警告情報が出力されます。警告情報が複数ある場合は,各項目の間に空白が入ります。警告情報がない場合は,「SQLWARN:」だけ出力されます。
  7. 更新後のキー情報のヘッダ
  8. 列名
  9. 実データ長(10進数)
  10. データの内容(ダンプ形式(16進数+文字列表示))※1
  11. 更新前のキー情報のヘッダ
  12. 列名
  13. 実データ長(10進数)
  14. データの内容(ダンプ形式(16進数+文字列表示))※1
  15. 繰返し列の更新情報のヘッダ
  16. 繰返し列の列名
  17. 更新対象の要素番号
    SQL種別が次のどれかの場合,更新対象の要素番号が出力されます。
    UPDATE SET(要素指定):更新対象の要素番号※2
    UPDATE ADD:追加する要素の先頭の要素番号※3
    UPDATE DELETE:削除対象の要素番号※2
    更新対象の要素が複数ある場合,コンマで区切られます。要素番号が10個以上ある場合は,9個の要素ごとに改行されます。
    注※1
    該当する列に文字集合が定義されている場合,定義された文字コードで出力されます。
    注※2
    *指定のSQLを実行した場合は,実際に更新した要素番号が出力されます。
    注※3
    *指定のSQLを実行した場合は,更新対象の要素番号に*が出力されます。
sqltrc_dir=SQLトレース情報ファイル出力ディレクトリ名,SQLトレース情報ファイルサイズ
reflection文のsql_traceオペランドにerr,又はallを指定して出力するSQLトレース情報の出力ディレクトリ,及びSQLトレース情報ファイルサイズを指定します。
SQLトレース情報ファイル出力ディレクトリ名 ~<パス名>((223文字以内))
SQLトレース情報を出力するディレクトリ名を絶対パス名で指定します。ここで指定したディレクトリに,次の二つのファイルを作成します。
  • pdorsqltrc1_サーバ名称_プロセスID
  • pdorsqltrc2_サーバ名称_プロセスID
    サーバ名称(最大8文字):SQLトレース情報の出力元の追い付き反映対象サーバ名
    プロセスID(最大10文字):SQLトレース情報の出力元の追い付き反映SQL実行プロセスのプロセスID
<規則>
  1. このオペランドを指定する場合,reflection文のsql_traceオペランドの指定は必須です。
  2. pdorendを実行する前に,追い付き反映対象サーバが存在するすべてのサーバマシンで,このオペランドに指定したディレクトリを作成しておく必要があります。ディレクトリが作成されていない場合,pdorendはエラーになります。
  3. SQLトレース情報ファイルの初回作成時に,作成対象ファイルと同名のファイルが存在した場合,そのファイルを上書きします。必要に応じて,別ディレクトリ又は別ファイル名にコピーしておく必要があります。
  4. SQLトレース情報を出力するファイルのスワップが発生した場合,切り替え先のファイルは上書きされるため,必要に応じて,切り替わる前に別ディレクトリ又は別ファイル名にコピーしておく必要があります。なお,ファイルのスワップが発生すると,syslogfile及びメッセージログファイルにKFPT01020-Iメッセージが出力されます。
  5. SQLトレース情報ファイルのアクセス処理でエラーが発生した場合,pdorendは処理を中断し,ロールバックしてからエラー終了します。
  6. 更新情報のダンプ出力時は1行出力するたびに入出力が発生します。更新情報の出力数は,SQLトレース情報ファイルサイズの<指定値の目安>の変数D(更新データ長)の説明を参照してください。
SQLトレース情報ファイルサイズ ~((0,4096~2144337920))
SQLトレース情報ファイルのサイズをバイト単位で指定します。sqltrc_dirオペランドを指定する場合,SQLトレース情報ファイルサイズは必ず指定してください。
0を指定すると,HiRDBファイルシステムの最大サイズが仮定されます。この場合,出力するSQLトレース情報サイズがHiRDBファイルシステムの最大サイズを超えるとpdorendはエラーになります。
4,096~2,144,337,920を指定した場合,SQLトレース情報ファイルが指定したファイルサイズを超えると,もう一つのファイルにスワップしてSQLトレース情報の出力を切り替えます。出力先を切り替えた時点で,切り替え元のファイルサイズは,ここで指定したファイルサイズよりも最大で3メガバイト程度大きくなる可能性があります。
<指定値の目安>
SQLトレース情報の出力量に対して過小なサイズを指定すると,SQLトレース情報ファイルのスワップが多発して性能が劣化します。次の見積もり式で求めた値を目安としてください。

 n
Σ表単位のSQLトレースサイズ
 1

n:更新可能なオンライン再編成中にレプリカのデータベースに対して更新した表の数
表単位のSQLトレースサイズ(単位:バイト):
(100+A)×B+200×B÷100
見積もり式で使用する変数について説明します。
変数説明
ASQLトレース情報サイズです。
行更新※4の場合
400+100×(1+マッピングキー列数)+C+D
列更新の場合
400+100×(更新表の構成列数※1+マッピングキー列数)+C+D
B更新SQL数です。
更新SQL数は,reflection文の指定内容によって,次の値になります。
sql_trace=errの場合
  • sql_error=stop又はsql_errorオペランド省略,mvcelmwarn=stop又はmvcelmwarnオペランド省略のとき
    1
  • sql_error及びmvcelmwarnの指定が上記以外※2のとき
    更新可能なオンライン再編成中にレプリカのデータベースの該当表の更新SQLのうち,SQLエラーになると思われる更新SQL数
sql_trace=allの場合
  • sql_error=stop又はsql_errorオペランド省略,mvcelmwarn=stop又はmvcelmwarnオペランド省略のとき
    更新可能なオンライン再編成中にレプリカのデータベースの該当表の更新SQL数+100
  • sql_error及びmvcelmwarnの指定が上記以外※2のとき
    更新可能なオンライン再編成中にレプリカのデータベースの該当表の更新SQL数×(更新SQLのうち,SQLエラーになると思われる割合÷100+1)+100
C更新データ長です。
行更新※4の場合
(表の行長÷16)×100
列更新の場合
  • 更新列だけ反映する
    {(更新列の固定長データ型の列定義長の合計※1+更新列の可変長データ型の列に対する更新データ長の合計)÷16}×100
  • 更新列以外の列も反映する
    {(更新表の構成列中で固定長データ型の列定義長の合計※1+更新表の構成列で可変長データ型の列定義長の合計※1,※3)÷16}×100
DSQLCSNA情報サイズです。SQLCSNA情報サイズは文字集合が定義された表の場合だけ加算してください。
4400+(↑(更新表の構成列数※1+マッピングキー列数)÷ 8↑×100)
注※1
繰返し列の場合,定義長×更新する要素数を加算してください。
注※2
次に示す組み合わせのときです。
・sql_error=skip,mvcelmwarn=ignore
・sql_error=skip,mvcelmwarn=stop又はmvcelmwarnオペランド省略
・sql_error=stop又はsql_errorオペランド省略,mvcelmwarn=ignore
注※3
BLOB又はBINARY型の場合,更新するときだけ更新データ長を加算してください。
注※4
既定義型以外の文字集合の列がないFIX表で,次のSQLを実行した場合,行更新をします。
・INSERT文
・UPDATE文(更新列以外の列も反映するとき)

SQLトレース情報ファイルの出力情報:
SQLトレース情報ファイルに出力される情報を次に示します。

YYYY/MM/DD HH:MM:SS  SVR(サーバ名) PID(プロセスID) [1]
**** SQL TRACE INFORMATION **** [2]
 ** EXECUTION SQL ** [3]
   UPDATE "repjobp"."ANA_0001" SET "C01"=?,"C02"=? WHERE "C01"=? [4]
 ** SQL EXECUTION RESULT ** [5]
   SQLCODE : SQLコード [6]
   SQLWARN : 警告情報 [7]
 ** SQLDA ** [8]
   Address  Loc      +0+1+2+3 +4+5+6+7 +8+9+a+b +c+d+e+f 0123456789​abcdef [9]
   400b3010 00000000​ 53514c44 41202020​ 00000000​ 00030003​ SQLDA   ........
 ** SQLVAR ** [10]
   Address  Loc      +0+1+2+3 +4+5+6+7 +8+9+a+b +c+d+e+f 0123456789​abcdef
   400b3020 00000000​ 00f40001 00020000​ 400c07b8 400c07b0 ........@...@...
   400b3030 00000010​ 00f40001 00020000​ 400c07c8 400c07c0 ........@...@...
   400b3040 00000020​ 00f40001 00020000​ 400c07a8 400c07a0 ........@...@...
                                   :
 ** SQLCSNA ** [11]
   Address  Loc      +0+1+2+3 +4+5+6+7 +8+9+a+b +c+d+e+f 0123456789​abcdef
   400b4040 00000000​ 53514c43 534e4120 00000000​ 00000000​ SQLCSNA ........
   400b4050 00000010​ 00050005​ 000a0001 00000000​ 00000000​ ................
                                   :
 ** UPDATE INFORMATION **
   Address  Loc      +0+1+2+3 +4+5+6+7 +8+9+a+b +c+d+e+f 0123456789​abcdef [12]
   400c0700 00000000​ 2a2a5442 4c552a2a 0002007​a 03000000​ **TBLU**...z....
   400c0710 00000010​ 00000000​ 00000000​ 00000001​ 00000044​ ...............D
   400c0720 00000020​ 00000002​ 00000058​ 4540236​c 45402383​ .......XE@#lE@#.
   400c0730 00000030​ 00000001​ 0000013​f 00000000​ 0000026​e .......?.......n
   400c0740 00000040​ 00000000​ 4d430001 00000000​ 000000a0 ....MC..........
   400c0750 00000050​ 000000a8 00000002​ 55430001​ 00000100​ ........UC......
   400c0760 00000060​ 00000000​ 00000000​ 00000000​ 00000000​ ................
   400c0770 00000070​ 000000b0 000000b8 00000002​ 55430002​ ............UC..
   400c0780 00000080​ 00000000​ 00000000​ 00000000​ 00000000​ ................
   400c0790 00000090​ 00000000​ 000000c0 000000c8 00000002​ ................
   400c07a0 000000a0 00000000​ 00000000​ 00010000​ 00000000​ ................
   400c07b0 000000b0 00000000​ 00000000​ 00030000​ 00000000​ ................
   400c07c0 000000c0 00000000​ 00000000​ 0001              ..........
YYYY/MM/DD HH:MM:SS  SVR(サーバ名) PID(プロセスID) [13]
**** SKIP SQL INFORMATION ****
 TABLE NAME : "認可識別子"."表識別子"
            :
            :
YYYY/MM/DD HH:MM:SS  SVR(サーバ名) PID(プロセスID) [4]
**** SQL TRACE INFORMATION ****
 ** EXECUTION SQL **
   COMMIT    

[説明]
  1. SQLを実行した日時,サーバ名,及びプロセスIDです。
  2. SQLトレース情報のヘッダ
  3. 実行したSQLの情報を示すヘッダ
  4. SQL文
    実行したSQL文及びCOMMIT文です。
    SQL文の場合は[1]~[12]の情報を出力します。COMMIT文の場合は[1]~[4]の情報を出力します。
    ただし,レプリカのデータベースを更新したSQLとは異なるSQL文が出力される場合があります。例を示します。
    ・追い付き反映時,更新列だけ反映する指定をしなかった場合
    ・更新列数+マッピングキー列数が30000(?パラメタの最大数)を超える場合
    ・ロールバックのSQLの場合
    ・行更新の場合(行更新については,SQLトレース情報ファイルサイズの<指定値の目安>の注を参照してください)
  5. 実行したSQLの結果を示すヘッダ
  6. 実行したSQLのSQLCODE
  7. 実行したSQLの警告情報(SQLWARNn n:0~F)
    発生した警告情報が出力されます。警告情報が複数ある場合は,各項目の間に空白が入ります。警告情報がない場合は,「SQLWARN:」だけ出力されます。
  8. SQL記述領域情報(SQLDA)
    SQL記述領域については,マニュアル「HiRDB Version 8 UAP開発ガイド」を参照してください。
  9. ダンプ出力ヘッダ
    ヘッダと出力される内容を次に示します。
    ヘッダ出力内容
    Addressアドレス(16進数)※1
    Loc先頭からのオフセット(16進数)※1
    +0+1+2+3 +4+5+6+7 +8+9+a+b +c+d+e+fメモリの内容(16進表示)※2
    0123456789​abcdefメモリの内容(キャラクタ表示)※2
    注※1
    32ビットモードのHiRDBの場合は4バイト(8けた),64ビットモードのHiRDBの場合は8バイト(16けた)で出力されます。
    注※2
    該当する列に文字集合が定義されている場合,定義された文字コードで出力されます。

  10. SQL記述領域情報(SQLVAR)
    SQL記述領域については,マニュアル「HiRDB Version 8 UAP開発ガイド」を参照してください。
  11. 文字集合名記述領域(SQLCSNA)
    表に文字集合が定義されている列が存在する場合だけ出力されます。
    文字集合名記述領域については,マニュアル「HiRDB Version 8 UAP開発ガイド」を参照してください。
  12. 更新情報
    SQL実行時の更新情報。データ型ごとの更新データのフォーマットについては,マニュアル「HiRDB Version 8 UAP開発ガイド」を参照してください。
  13. スキップ情報
    SQLトレース情報とともに出力されます。出力される情報については,「スキップ情報出力ファイルの出力情報」を参照してください。

追い付き反映処理終了後に,オンライン再編成対象のRDエリアにある被参照表に対して制約定義をしている参照表,オンライン再編成対象のRDエリアにある参照表,及びオンライン再編成対象のRDエリアにある検査制約表を検査保留状態にしない場合に指定します。このオプションは,システム定義のpd_check_pendingオペランドの値がUSEの場合にだけ有効です。

<規則>
  1. このオプションは,オンライン再編成後にデータ不整合が発生しない場合に指定してください。参照制約及び検査制約で不整合が発生する条件については,マニュアル「HiRDB Version 8 システム導入・設計ガイド」を参照してください。
  2. このオプションを指定しない場合,次に示す表のオリジナルRDエリアの世代を検査保留状態にします。
    • オンライン再編成の対象RDエリアにある被参照表に対して,制約定義をしている参照表
    • オンライン再編成の対象RDエリアにある参照表
    • オンライン再編成の対象RDエリアにある検査制約表
  3. 表を検査保留状態にした後,pdorendコマンドがエラーとなった場合,検査保留状態のまま処理を終了します。
  4. 検査保留状態の設定ができなかった場合は,KFPT01018-Wメッセージを出力し,該当する表の検査保留状態の設定処理を無視して処理を続行します。KFPT01018メッセージが出力された場合は,該当メッセージの管理者の処置に従って,該当する表の整合性をチェックしてください。
  5. 追い付き反映処理が終了した後に検査保留状態の表がある場合,pdconstckで整合性を確認してください。検査保留状態が解除されるまで,該当表に対してはアクセスできません。整合性の確認手順については,マニュアル「HiRDB Version 8 システム導入・設計ガイド」を参照してください。
  6. システム定義のpd_check_pendingオペランドの値がNOUSEの場合は,このオプションの指定に関係なく,表の検査保留状態を変更しません。また,pd_check_pendingオペランドの値がNOUSEの場合,pdorendコマンドの実行でデータ不整合が発生することがあります。
<検査保留状態の遷移>
検査保留状態の遷移について次に説明します。
被参照表の場合
被参照表がオンライン再編成の対象RDエリアにある場合の,被参照表に関連のある参照表の検査保留状態の遷移を次の表に示します。なお,被参照表に対して,複数の関連のある参照表がある場合でも,参照表の検査保留状態は次の表に従って遷移します。

表2-13 被参照表がある場合の検査保留状態の遷移

pd_check_pendingオペランドの指定値-pオプションの指定参照表の種別被参照表に関連のある参照表の表格納RDエリアの状態参照表の検査保留状態
USEなし非分割表オンライン再編成の対象になっている。
オンライン再編成の対象になっていない。
分割表すべての表格納用RDエリアがオンライン再編成の対象になっている。
一部の表格納用RDエリアがオンライン再編成の対象になっている。
すべての表格納用RDエリアがオンライン再編成の対象になっていない。
あり該当しない該当しない。
NOUSE該当しない該当しない該当しない。
(凡例)
○:参照表を構成するすべてのRDエリアの表情報を検査保留状態にします。
-:状態を変更しません。
 
<例>
pd_check_pendingオペランドにUSEを指定し,pdorendコマンドに-pオプションを指定しないで,かつ被参照表T0と参照表T1~T5が次の図で示す構成で1対1の参照関係にある場合,オンライン再編成の対象RDエリアがRD1及びRD2のとき,検査保留状態にする対象を表2-14に示します。

図2-8 被参照表と参照表の構成例

[図データ]

表2-14 被参照表の検査保留状態の遷移例(被参照表と参照表が1対1の場合)

参照表の表名RDエリア名検査保留状態の設定
T1RD1
T2RD1
RD2
T3RD1
RD2
RD3
T4RD3
T5RD3
RD4
(凡例)
○:検査保留状態にします。
参照表の場合
参照表がオンライン再編成の対象RDエリアにある場合の検査保留状態の遷移を次の表に示します。なお,参照表と関連のある被参照表が,オンライン再編成対象のRDエリアにない場合でも,参照表の検査保留状態は次の表に従って遷移します。

表2-15 参照表の検査保留状態の遷移

pd_check_pendingオペランドの指定値-pオプションの指定参照表の種別参照表の表格納用RDエリアの状態参照表の検査保留状態
USEなし非分割表オンライン再編成の対象になっている。
オンライン再編成の対象になっていない。
分割表すべての表格納用RDエリアがオンライン再編成の対象になっている。
一部の表格納用RDエリアがオンライン再編成の対象になっている。
すべての表格納用RDエリアがオンライン再編成の対象になっていない。
あり該当しない該当しない。
NOUSE該当しない該当しない該当しない。
(凡例)
○:参照表を構成するすべてのRDエリアの表情報を検査保留状態にします。
△:オンライン再編成対象のRDエリアにある,参照表を構成するRDエリアの表情報だけを検査保留状態にします。
-:状態を変更しません。
 
<例>
pd_check_pendingオペランドにUSEを指定し,pdorendコマンドに-pオプションを指定しないで,かつ参照表T1~T5が次の図に示す構成の場合,オンライン再編成の対象となるRDエリアがRD1及びRD2のとき,検査保留状態にする対象を表2-16に示します。

図2-9 参照表の構成例

[図データ]

表2-16 参照表の検査保留状態の遷移例

参照表の表名RDエリア名検査保留状態の設定
T1RD1
T2RD1
RD2
T3RD1
RD2
RD3
T4RD3
T5RD3
RD4
(凡例)
○:検査保留状態にします。
-:検査保留状態にしません。
検査制約表の場合
検査制約表がオンライン再編成の対象RDエリアにある場合の検査保留状態の遷移を次の表に示します。

表2-17 検査制約表の検査保留状態の遷移

pd_check_pendingオペランドの指定値-pオプションの指定検査制約表の種別検査制約表の表格納用RDエリアの状態参照表の検査保留状態
USEなし非分割表オンライン再編成の対象になっている。
オンライン再編成の対象になっていない。
分割表すべての表格納用RDエリアがオンライン再編成の対象になっている。
一部の表格納用RDエリアがオンライン再編成の対象になっている。
すべての表格納用RDエリアがオンライン再編成の対象になっていない。
あり該当しない該当しない。
NOUSE該当しない該当しない該当しない。
(凡例)
○:検査制約表を構成するすべてのRDエリアの表情報を検査保留状態にします。
△:オンライン再編成の対象RDエリアにある,検査制約表を構成するRDエリアの表情報だけを検査保留状態にします。
-:状態を変更しません。
 
<例>
pd_check_pendingオペランドにUSEを指定し,pdorendコマンドに-pオプションを指定しないで,かつ検査制約表T1~T5が次の図で示す構成の場合,オンライン再編成の対象RDエリアがRD1及びRD2のとき,検査保留状態にする対象を表2-18に示します。

図2-10 検査制約表の構成例

[図データ]

表2-18 検査制約表の検査保留状態の遷移例

参照表の表名RDエリア名検査保留状態の設定
T1RD1
T2RD1
RD2
T3RD1
RD2
RD3
T4RD3
T5RD3
RD4
(凡例)
○:検査保留状態にします。
-:検査保留状態にしません。

オンライン再編成の追い付き反映処理を中止する場合に指定します。

<規則>
  1. -uオプションを指定した場合,同時に-sオプションも指定してください。-sオプションを省略した場合は,すべてのサーバのオンライン再編成の追い付き反映処理を中止します。
  2. -uオプションを指定すると,障害時の運用となるため,注意が必要です。
  3. pdorend実行時の排他が掛けられない場合,システム定義のpd_lck_wait_timeoutオペランドの指定値まで待ちます。
  4. 処理対象RDエリアに共用RDエリアがある場合,全バックエンドサーバで一括して処理をします。そのため,処理対象のすべてのRDエリアのオンライン再編成閉塞を解除できない場合はエラーとなります。なお,特定のバックエンドサーバが停止中などの理由で,サーバ単位にオンライン再編成閉塞を解除する場合は,-sオプション指定でオンライン再編成閉塞を解除できます。
<適用基準>
-uオプションは,該当するサーバに障害が発生した場合に指定してください。それ以外の場合に指定すると,追い付き反映処理ができなくなり,オリジナルRDエリアにトランザクションのアクセスを切り替えられなくなります。この場合,副系ボリュームのレプリカRDエリアでオンライン業務を続行します。オンライン業務をオリジナルRDエリアにアクセスさせたい場合は,HiRDBをいったん終了する必要があります。

規則

  1. pdorendコマンドは,HiRDBが稼働中のときだけ実行できます。
  2. pdorendコマンドは,シングルサーバ又はシステムマネジャがあるサーバマシンで実行してください。
  3. pdorendコマンドを実行する場合,データディクショナリ用RDエリアは次の状態でなければなりません。
    • オープン状態,かつ閉塞解除状態
  4. RDエリアの状態によってpdorendコマンドの実行可否が変わります。詳細については,「付録C.1 RDエリアの状態遷移」を参照してください。
  5. 追い付き反映処理の最大待ち時間,及びトランザクション処理の最大待ち時間の関係を次の図に示します。

    図2-11 追い付き反映処理の最大待ち時間,及びトランザクション処理の最大待ち時間の関係

    [図データ]

    〔説明〕
    追い付き反映処理の最後に,オリジナルRDエリアとレプリカRDエリアの同期を取ります。同期処理でタイムアウトとなった場合は,-nオプションで指定した回数だけリトライします。
    -n,-w,及び-oオプションの指定値は,サーバごとに監視されます。
    KFPH27040-Iメッセージが出力されている場合は,該当するサーバの追い付き反映処理,及びカレントRDエリアの切り替え処理が完了しています。
    -wオプションの指定値の残り時間が-tオプションの指定値より小さくなった場合,-wオプションの指定値の残り時間は,-tオプションの指定値に変わります。
  6. 処理対象RDエリアに共用RDエリアがある場合,全バックエンドサーバが処理対象となります。このため,次のどちらかに該当する場合,エラーとなります。
    • 処理対象の更新可能バックエンドサーバのレプリカRDエリアから,オリジナルRDエリアへの追い付き反映処理が完了できない
    • 全バックエンドサーバの処理対象のレプリカRDエリアから,オリジナルRDエリアへのカレントRDエリアの変更ができない
  7. pdorendコマンドを実行した場合,参照及び更新トランザクションとの間でデッドロックになることがあります。システム定義にpd_deadlock_priority_use=Yを指定し,更にpd_command_deadlock_priorityに運用コマンドのデッドロックプライオリティ値を指定することで,デッドロック発生時に参照及び更新トランザクションと運用コマンドのどちらを優先させるか選択できます。pdorendコマンドをエラーにする場合は,運用コマンドのデッドロックプライオリティ値を大きくします。この場合,pdorendコマンドがコマンド実行時に掛けた排他をすべて解除してからエラーになるため,一定時間後にpdorendコマンドを再度実行してください。pdorendコマンドを優先し,参照及び更新トランザクションをエラーにする場合は,運用コマンドのデッドロックプライオリティ値を小さくしてください。

注意事項

  1. pdorendコマンドの結果は,pdls -d orgコマンド,又はリターンコードで確認できます。リターンコードを次に示します。
    0:正常終了
    4:警告終了※1
    8:異常終了
    12:異常終了(コマンドがエラーメッセージを表示できない事象が発生)※2
    注※1
    次の現象のどれかが発生しています。
    ・一部のサーバで処理が成功したか,又はスキップ対象のSQLエラーが発生したため,該当するSQLをスキップしました。
    ・SET句又はDELETE句で繰返し列にない要素番号を指定したUPDATE文を実行し,警告エラーが発生しましたが,処理を続行しました。警告エラーとなった場合の動作については,reflection文のmvcelmwarnオペランドを参照してください。
    ・検査保留状態に変更できない表がありましたが,該当する処理を無視して処理を続行しました。
    注※2
    シングルサーバ又はディクショナリサーバがあるホストのsyslogfileのエラーメッセージを参照し,エラーの要因を取り除いた後,再度コマンドを実行してください。syslogfileにエラーメッセージが出力されていない場合は,保守員に連絡してください。
  2. pdorendコマンドは,オリジナルRDエリアとレプリカRDエリアの同期を取るため,オンライン再編成閉塞のRDエリアに対して,インナレプリカ構成,及びレプリカグループ構成の排他を掛けます。そのため,レプリカグループ内のRDエリアをほかのトランザクションがアクセスしている場合は,そのトランザクションが終了するまでpdorendコマンドは待ち状態となります。反映処理が完了し,カレントRDエリアがオリジナルRDエリアに切り替わった後に,インナレプリカ構成,及びレプリカグループ構成の排他で待ちとなっていたトランザクションのアクセスができるようになります。
  3. pdorendコマンドがタイムアウトする場合は,-w,-t,及び-nオプションの指定値を大きくしてください。指定値を大きくしてpdorendコマンドを実行してもタイムアウトとなる場合は,レプリカRDエリアにアクセスするトランザクション量を抑えてから,再度実行してください。
  4. pdorend -uコマンド実行時にエラーが発生した場合,処理対象サーバのすべてのRDエリアのオンライン再編成閉塞が解除されていれば,pdorendコマンドの再実行は不要です。処理対象サーバのRDエリアの状態については,pddblsコマンドで確認できます。
  5. 被参照表がオンライン再編成の対象RDエリアにある場合,被参照表に関連する参照表の表格納用RDエリアがオンライン再編成の対象外のときは,pdorendコマンドの延長で,被参照表に関連のある参照表も検査保留状態にします。そのため,検査保留状態にする参照表に対してほかのUAPなどがアクセスしていると,デッドロックが発生する可能性があります。被参照表がオンライン再編成の対象RDエリアにある場合は,被参照表に関連のある参照表のRDエリアもオンライン再編成の対象としてください。なお,被参照表に関連のある参照表のRDエリアは,pdrdrefls -cコマンドで確認できます。被参照表の参照表があるかどうかを確認する手順については,マニュアル「HiRDB Version 8 システム導入・設計ガイド」を参照してください。
  6. pdsetupコマンドで文字コードとしてutf-8を選択した場合,pdorendの追い付き反映制御ファイルには,BOMを持つファイルを使用できます。なお,pdorendの追い付き反映制御ファイルとしてBOMを持つファイルを使用しても,BOMは読み飛ばされます。また,pdorendで出力されるファイルにはBOMは付きません。

SQLトレース情報ファイルの参照手順

32ビットモードのHiRDBで,次に示す表定義及び実行したSQLの場合を例に,SQLトレース情報ファイルの参照手順について説明します。

表定義

CREATE TABLE ANA_0001 (
   C01        SMALLINT NOT NULL,
   C02        SMALLINT NOT NULL);

実行したSQL

UPDATE ANA_0001 SET C01=3,C02=1 WHERE C01=1;

出力されたSQLトレース情報ファイルを次の図に示します。

図2-12 出力されたSQLトレース情報ファイル(例)

[図データ]

〔説明〕
  1. SQL記述領域(SQLDA)中にある?パラメタ数を確認します。
    この例では,0x0003となっていて,?パラメタの数が3個であることが分かります。
  2. データコードを確認します。
    データコードの種類によって,更新情報中の更新データのフォーマットが異なるため,確認します。この例では,0xf4であり,SMALLINT型ということが分かります。
  3. 変数の領域の構造を確認します。
    この例では,0x0001であり,単純構造であることが分かります。
  4. 更新情報中のインジケータのアドレスを確認します。
    32ビットモードの場合のインジケータの値を次に示します。
    NULL:0xFFFF(-1)
    NULL以外:0x0000(0)
    この例では,0x400c07b0がインジケータのアドレスと分かります。SMALLINT型のインジケータのサイズは2バイトであり,この例では0x0000となっているため,ナル値でないことが分かります。データコードによってインジケータのサイズは異なります。詳細については,マニュアル「HiRDB Version 8 UAP開発ガイド」の「SQLのデータ型とC言語のデータ記述」を参照してください。
  5. 4.でNULL以外の場合は,更新したデータのデータ長を確認します。
    データ長は,データ型によって格納先が異なります。データ型ごとにデータ長参照先を次に示します。
    データ型データ長の参照先
    可変長文字列
    可変長各国文字列
    可変長混在文字列
    BINARY
    BLOB
    SGMLTEXT
    XML
    FREEWORD
    図2-12の6.
    上記以外図2-12の5.
    詳細については,マニュアル「HiRDB Version 8 UAP開発ガイド」の「SQL記述領域に設定するデータコードとデータの長さ」,及び「SQLのデータ型とC言語のデータ記述」を参照してください。
    この例では,固定長データ(SMALLINT)のため,5.にデータ長が格納されています。データ長は0x0002であり,更新情報中の更新データの長さが2バイトであることが分かります。
  6. 更新情報中のデータのアドレスを確認します。
    この例では,0x400c07b8からデータが格納されていると分かります。5.で更新情報中の更新したデータの長さは2バイトと分かっているため,SQLトレース情報に出力されいているSQL文の最初の?パラメタに対応する更新データは,データアドレスから2バイト分の0x0003であることが分かります。
    データのフォーマットはデータ型によって異なります。詳細については,マニュアル「HiRDB Version 8 UAP開発ガイド」の「SQL記述領域に設定するデータコードとデータの長さ」,及び「SQLのデータ型とC言語のデータ記述」を参照してください。
  7. リアルタイムSANレプリケーションの処理方式にハイブリットを選択している場合,pdorendコマンドを実行すると,リモートサイトへのデータベース同期待ち合わせをします。このため,-sオプションで指定したサーバにあるRDエリア一つにつき,2秒以上のオーバヘッドが掛かることがあります。リモートサイトへのデータベース同期待ち合わせに失敗した場合,リモートサイトのデータベースを回復する必要があります。リアルタイムSANレプリケーションを使用した場合の障害発生時の運用については,マニュアル「HiRDB Version 8 ディザスタリカバリシステム 構築・運用ガイド」を参照してください。