10.10.4 pdorend(オンライン再編成の追い付き反映)
- 〈この項の構成〉
(1) 機能
更新可能なオンライン再編成の追い付き反映処理を実行します。レプリカRDエリアの更新内容をオリジナルRDエリアに反映します。
pdorendコマンドの使い方については,「5.13.4 更新可能なオンライン再編成の運用手順」を参照してください。
(2) 実行者
HiRDB管理者が実行できます。
(3) 形式
pdorend 〔-s サーバ名〔,サーバ名〕…〕 {〔-n 最大リトライ回数〕 〔-w 追い付き反映処理の最大待ち時間〕 〔-t トランザクション処理の最大待ち時間〕 〔-m pdorend反映プロセスの多重度〕 〔-z〕 〔-f 追い付き反映制御ファイル名〕 〔-I {put|noput}〕 |〔-u〕}
(4) オプション
ここでは,-mおよび-fオプションについてだけ説明します。そのほかのオプションについては,マニュアル「HiRDB コマンドリファレンス」の「pdorend(オンライン再編成の追い付き反映)」を参照してください。
形式にあるオプション以外のオプションを指定した場合,コマンドがエラーになるか,またはオプションの指定が無視されます。
-
-m pdorend反映プロセスの多重度
〜<符号なし整数>((1〜8))《2》
レプリカRDエリアに対する更新処理をオリジナルRDエリアに反映する際の,pdorend反映プロセスのBESごとの多重度を指定します。
- <指定値の目安>
-
-mオプションの指定値の目安を次に示します。
MIN{8 ,MAX(↑SDBDefCnt÷8↑,↑SDBKeyCnt÷SDBDefCnt↑) }
SDBDefCnt:更新可能なオンライン再編成の対象BESに存在するSDBデータベースの数
SDBKeyCnt:更新可能なオンライン再編成の実行時(pdorchgコマンド実行時〜pdorendコマンド完了時の間)に,1つのSDBデータベースに対して更新するレコードのDBKEY値の数(異なるDBKEY値の数)
- <留意事項>
-
pdorendコマンドを実行すると,次の計算式の数のpdorend反映プロセスが起動されます。
pdorend反映プロセス起動数=M×S (単位:プロセス数)
M:-mオプションの指定値
S:-sオプションの指定数(-sオプションを省略した場合,オンライン再編成閉塞のRDエリアがある全BES数)
なお,HiRDB/SD全体で保証されるpdorend反映プロセス数は,あらかじめシステム定義のpd_max_reflect_process_countオペランドで指定しておく必要があります。
-
〜<パス名>((255文字以内))
追い付き反映処理の制御文を記述したファイル(追い付き反映制御ファイル)を,絶対パス名で指定します。-fオプションを省略した場合,追い付き反映制御ファイルに記述できる制御文の省略時仮定値が仮定されます。なお,追い付き反映制御ファイル中にコメントは記述できません。
追い付き反映制御ファイルに記述できる制御文を次に示します。
制御文
内容
指定できる数
reflection文
追い付き反映処理の動作内容を指定します。指定形式については,「(5) reflection文の指定形式」を参照してください。
1
report文
追い付き反映処理の実行結果を出力するファイルを指定します。指定形式については,「(6) report文の指定形式」を参照してください。
1
追い付き反映制御ファイルの指定例を次に示します。
reflection dml_error=skip report dml_skip_info=/home/user01/dmlskip_outputfile01
<指定規則>
-
reflection文とreport文は両方とも必ず指定してください。
-
各文は1行で記述してください。
-
指定値を記述する際,=の前後に空白を入れないでください。
-
同じオペランドを複数指定しないでください。
-
(5) reflection文の指定形式
reflection 〔dml_error={stop|skip}〕
-
追い付き反映処理で,HiRDB/SDが内部的に発行する,SDBデータベースを操作するAPIの実行時にエラーが発生した場合の,HiRDB/SDの処理を指定します。
- stop:
-
追い付き反映処理中に,HiRDB/SDが内部的に発行するAPIの実行時にエラーが発生した場合,追い付き反映処理をエラー終了します。このとき,追い付き反映処理に対してロールバックが実行され,SDBデータベースは前回のコミット時点の状態になります。追い付き反映処理では,一定のAPI処理件数ごとにコミットが実行されています。
- skip:
-
追い付き反映処理中に,HiRDB/SDが内部的に発行するAPIで特定のエラーが発生した場合,そのAPIを無視して追い付き反映処理を続行します。 スキップ対象のAPIの情報は,report文のdml_skip_infoオペランドで指定したファイルに出力されます。
- 注意事項
-
skipを指定した場合に,HiRDB/SDが内部的に発行するAPIでエラーが発生すると,更新可能なオンライン再編成が完了したあとのオリジナルRDエリアとレプリカRDエリアの整合性が保証できなくなります。そのため,skipを指定する場合は十分に運用を検討してから指定するようにしてください。
skipを指定する場合のケースについては,「5.13.10 追い付き反映処理時にHiRDB/SDが内部的に発行するAPIのエラーをスキップしたい場合」を参照してください。
スキップ対象となったAPIを特定するために,スキップ情報中にカレントRDエリア(レプリカRDエリア)のデータベースキー情報が出力されます。データベースキー情報からスキップしたレコードを特定し,SDBデータベースへの反映が必要な場合は,SDBデータベースを操作するAPIなどを実行してSDBデータベースに反映してください。
skipを指定した場合に,HiRDB/SDが内部的に発行するAPIでエラーが発生したときのHiRDB/SDの処理を次の表に示します。
表10‒13 HiRDB/SDが内部的に発行するAPIでエラーが発生したときのHiRDB/SDの処理 APIのエラーが発生したレコード
API種別
SQLCODE
HiRDB/SDの処理
ルートレコード
FETCH
100
対象レコードがないため,HiRDB/SDが内部的に発行するAPIがエラーになりますが,このAPIを無視して追い付き反映処理を続行します。
上記以外
追い付き反映処理をエラー終了します。
上記以外
- 注意事項
-
reflection文には,dml_errorオペランドだけが指定できます。マニュアル「HiRDB コマンドリファレンス」の「pdorend(オンライン再編成の追い付き反映)」のreflection文で説明しているオペランドは指定できません。
(6) report文の指定形式
report 〔dml_skip_info=DMLスキップ情報出力ファイル名〕
-
dml_skip_info=DMLスキップ情報出力ファイル名
〜<パス名>((235文字以内))
スキップ対象となったAPI(追い付き反映処理中にHiRDB/SDが内部的に発行するAPI)の情報を出力するファイルを絶対パス名で指定します。このオペランドは,reflection文のdml_errorオペランドにskipを指定した場合に指定してください。
なお,実際に出力されるファイルの名称は,次のようになります。
- (例)dml_skip_info=/home/user01/dmlskip_outputfile01と指定した場合
-
ファイル名:dmlskip_outputfile01_bes1_25182
bes1:スキップ対象となったAPIを実行しようとしたBES名
25182:スキップ対象となったAPIを実行しようとしたプロセスのプロセスID
<規則>
-
DMLスキップ情報出力ファイルを出力するディレクトリは,すべてのサーバマシンで同じにしてください。出力するディレクトリがない場合は,pdorendコマンドがエラーになります。
-
DMLスキップ情報の出力時にエラーが発生した場合,処理を中断してロールバックします(pdorendコマンドがエラーになります)。
-
同じ名称のDMLスキップ情報出力ファイルが存在する場合,存在するファイルにスキップ対象となったAPIの情報を追加出力します。
-
このオペランドを省略した場合,DMLスキップ情報出力ファイルの出力先は,次の優先順位で決定されます(1の優先順位がいちばん高くなります)。
1.ユニット制御情報定義のpd_tmp_directoryオペランドに指定したディレクトリ
2.環境変数TMPDIR※に指定したディレクトリ
3./tmpディレクトリ
ファイル名は,pdskipdml_BES名_プロセスIDとなります。
- 注※
-
initプロセス(OSのプロセス)から起動されたHiRDB(pdprcd)に設定されるTMPDIR環境変数のことです。
- 注意事項
-
report文には,dml_skip_infoオペランドだけが指定できます。マニュアル「HiRDB コマンドリファレンス」の「pdorend(オンライン再編成の追い付き反映)」のreport文で説明しているオペランドは指定できません。
(7) DMLスキップ情報出力ファイルの出力形式
DMLスキップ情報出力ファイルの出力形式の例を次に示します。
2013/12/27 09:51:26 SVR(bes1) PID(5704) ...1 **** SKIP DML INFORMATION **** ...2 SCHEMA NAME : "FMB1" ...3 RECORD NAME : "RECB" ...4 REFLECTION KIND : STORE ...5 **** ERROR DML INFORMATION **** ...6 RECORD NAME : "RECA" ...7 DML KIND : FETCH ...8 SQLCODE : 100 ...9 SQLWARN : ...10 **** CURRENT DBKEY INFORMATION **** ...11 Address Loc +0+1+2+3 +4+5+6+7 +8+9+a+b +c+d+e+f 0123456789abcdef ...12 59bc3170 0000 30345f30 30303032 03000000 04_00002....
- [説明]
-
API(追い付き反映処理中にHiRDB/SDが内部的に発行するAPI)のスキップが発生した数の分だけ,次の情報が表示されます。
-
APIのスキップが発生した日時,BES名,プロセスIDが表示されます。
-
スキップ対象となったAPIの情報を示すヘッダが表示されます。
-
SDBデータベース名が表示されます。
-
追い付き反映対象のレコード型名が表示されます。
-
追い付き反映処理時にHiRDB/SDが内部的に発行したAPIの種別が表示されます。
STORE:レコードの格納(STORE)の追い付き反映
MODIFY:レコードの更新(MODIFY)の追い付き反映
ERASE:レコードの削除(ERASE)の追い付き反映
ROLLBACK STORE:レコードの格納(STORE)のロールバックに対する追い付き反映
ROLLBACK MODIFY:レコードの更新(MODIFY)のロールバックに対する追い付き反映
ROLLBACK ERASE(REC):レコードの削除(ERASE)のロールバックに対する追い付き反映(レコードの回復)
ROLLBACK ERASE(USER):レコードの削除(ERASE)のロールバックに対する追い付き反映(USERポインタの回復)
-
APIのエラー情報を示すヘッダが表示されます。
-
APIのエラーが発生したレコード型名が表示されます。
追い付き反映対象とするレコードの位置づけ用のAPIなどでエラーが発生した場合は,追い付き反映対象のレコードより上位階層のレコード型名が出力されます。
-
エラーが発生したAPIの種別が表示されます。
FETCH:レコードの検索(追い付き反映を行うレコードに対する位置づけ用のAPIを意味します)
MODIFY:レコードの更新
STORE:レコードの格納
ERASE:レコードの削除
-
APIのエラーのSQLCODEが表示されます。
-
警告情報が表示されます。
警告情報を次の形式で出力します。
"SQLWARNn"
n:0〜F
警告情報が複数ある場合は,警告情報を空白で区切って出力します。
警告情報がない場合は,"SQLWARN : "が出力されます。
-
カレントRDエリア(レプリカRDエリア)側のデータベースキーの情報を示すヘッダが表示されます。
-
追い付き反映対象のレコードに対するデータベースキーの内容が出力されます。ダンプ形式(16進数表示+文字列表示)で出力されます。
-
(8) 注意事項
-
pdorendコマンドの結果は,pdls -d orgコマンド,またはリターンコードで確認できます。リターンコードを次に示します。
0:正常終了
4:警告終了※1
8:異常終了
12:異常終了(コマンドがエラーメッセージを表示できない事象が発生)※2
- 注※1
-
次のどちらかの場合にリターンコードが4になります。
・一部のBESだけで処理が成功した場合
・スキップ対象となったAPI(追い付き反映処理中にHiRDB/SDが内部的に発行するAPI)がある場合
- 注※2
-
ディクショナリサーバがあるサーバマシンのsyslogfileに出力されたエラーメッセージを参照し,エラーの要因を取り除いたあとに,pdorendコマンドを再実行してください。syslogfileにエラーメッセージが出力されていない場合は,保守員に連絡してください。
-
このコマンドの規則およびそのほかの注意事項については,マニュアル「HiRDB コマンドリファレンス」の「pdorend(オンライン再編成の追い付き反映)」を参照してください。