発生条件の場合に、lxextdbコマンドを実行すると、DB60021のメッセージを出力して異常終了する場合があります。
DB60021:差分ログアクセス中にエラーが発生しました
【発生条件】
複写元データベースがSymfoware Server(V11以前およびNativeインタフェース)である。かつ、
以下を定義した表単位のレプリケーション(一括差分複写)を利用している。かつ、差分データ形式(LOGTYPE)を省略、または、NORMALを指定している。
2.のレプリケーションに対する差分ログのレコード長(注1)が256Kバイトを超えている。かつ、
2.で指定したレプリケーション対象の表に対し、UPDATE文で更新している。かつ、
UPDATE文によって、以下のいずれかの列を更新する(SET句に指定する)。かつ、
2.で結合キー項目指定(JOIN)を定義している場合
結合キー項目指定(JOIN)に指定したUNIQUEの列
2.で結合キー項目指定(JOIN)を省略している場合
PRIMARY KEYの列
5.に対し、1つのUPDATE文の更新対象として複数レコードが存在する。かつ、
4.で更新した表に対し、以下のいずれかでさらに更新している。かつ、
4.と同一のトランザクションで、INSERT/UPDATE(注2)/DELETE文で更新している。
4.のトランザクション終了後(COMMIT)、別のトランザクションでINSERT/UPDATE(注2)/DELETE文で更新している。(コネクションに依存しません)
2.の表単位のレプリケーションに対し、lxextdbコマンド(-rおよび-m diff)を実行する。
注1) 差分ログのレコード長は以下のように算出します。
差分ログのレコード長 = 2 + (N1 + D1) + (N2 + D2) + … (Ni + Di) N1、N2…Ni:ナル表示域の長さ 抽出する項目にナル表示域を指定した場合は2となります。指定しない場合は0となります。 D1、D2…Di:抽出する表の各項目の長さ 項目の長さについては、“システム設計ガイド”の“抽出データ項目の形式”を参照してください。
注2) 発生条件の5.、6.のような一意制制約列(SET句指定)のUPDATE文も含む。