データベースの再編成時に発生したトラブルの事例、およびその対処方法について説明します。
DSIの切離しによる再編成/ロード運用を行っている場合に、不具合が発生する
DSIの切離し(rdbexdsiコマンド)による再編成/ロード運用を行っている場合、以下のような現象が発生する場合があります。
アプリケーションまたはrdbexecsqlコマンドによるSQL実行時
テーブルに該当するレコードが存在するにもかかわらず、FETCH処理でSQLSTATE:02000(データなし)になる
テーブルに該当するレコードが存在するにもかかわらず、UPDATE処理でSQLSTATE:02000(データなし)になる
テーブルに該当するレコードが存在するにもかかわらず、DELETE処理でSQLSTATE:02000(データなし)になる
該当レコードを格納するDSIを定義しているにもかかわらず、INSERT処理でSQLSTATE:22702(DSI範囲外アクセス)になる
rdbuptコマンド実行時
テーブルに該当するレコードが存在するにもかかわらず、削除モード(mdオプション)での実行時に“qdg12589u *件目:削除対象のデータが存在しません”というエラーになる
テーブルに該当するレコードが存在するにもかかわらず、更新モード(muオプション)での実行時に“qdg12588u *件目:更新対象のデータが存在しません”というエラーになる
該当レコードを格納するDSIを定義しているにもかかわらず、追加モード(maオプション)での実行時に“qdg12538u データ操作処理におけるSQL文でエラーが発生しました SQL文=* SQLSTATE=* SQLMSG=JYP2081E 行に指定されている分割のキーとなる列の値を満たす分割値を持つDSIが存在しません.”というエラーになる
rdbunlsqlコマンド実行時
切り離したDSIに格納されているレコードがアンロードされない
rdbexdsiコマンドで、該当するレコードのDSIがSQLの処理対象から除外されていないか確認してください。以下に処理対象から除外されているDSIの表示例を示します。
> rdbexdsi -mp RDBII rdbexdsi DATE:2007/04/13 TIME:11/07/38 Exclusion DSI:User DSI USER1 TEST.#SCTEST#B USER1 TEST.#SCTEST#A
DSIがSQLの処理対象から除外されている場合は、RDB運用管理者に相談してSQLの処理対象からの除外を解除してから、アプリケーションを再実行してください。
参照
rdbexdsiコマンドの詳細については、“コマンドリファレンス”を参照してください。
rdbalmdsiコマンドまたはDSI定義文でDSIに設定したアラームポイントよりも、少ない使用量でメッセージが出力される
rdbalmdsiコマンドまたはDSI定義文により、DSIに対しアラームポイントの設定を行った場合、設定したアラームポイントよりも少ない使用量でメッセージが出力されることがあります。
この場合、以下のように動作します。
アラームポイントに指定した値は、対象のDSIのページサイズの倍数に調整される
ページが割り当てられた時点でメッセージが出力される
管理ページとして1ページが使用される
たとえば、DSIのサイズを128KBとし、アラームポイントを80KBに設定すると、以下のような結果になります。
ページサイズを16KBとした場合
1ページに4件のデータが格納されるとした場合ですが、13件のデータが格納された時点で、P0~P4の5ページ(80KB)が割り当てられ、アラームポイントのメッセージが出力されます。
ページサイズを32KBとした場合
アラームポイントはページサイズの倍数に調整されるので、80KBの指定でもページサイズが32KBの場合は、アラームポイントは64KBに調整されます。
1件のデータを格納した時点で、P0、P1の2ページ(64KB)が割り当てられ、この時点でアラームポイントのメッセージが出力されます。
DSIのサイズが小さい場合などは、上記を考慮してアラームポイントの設定を行ってください。