DBミラーリングシステムの運用を行う場合、トランザクション内で複数のロググループに対する更新はできません。実行した場合、DBミラーリングシステムの制約により業務アプリケーションがエラーとなります。
[出力されるエラー]
SQLSTATE | SQLMSG | メッセージログファイル |
---|---|---|
71400 | JYP2907E: トランザクション内で複数のロググループに対する更新はできません. | rdb: ERROR: qdg20763u: トランザクション内で複数のロググループに対する更新はできません ロググループ名='更新を行ったDSIの属するロググループ名' ロググループ名='更新が抑止されたDSIの属するロググループ名' DSI名='更新が抑止されたDSIのデータベース名.更新が抑止されたDSI名' |
エラーとなる場合の例、および対処方法について以下に説明します。
[例と対処方法の概要]
No | エラーとなる例 | 対処方法 |
---|---|---|
例1 | トランザクションを終了せずに、別のロググループに対応づけられた資源に対して更新を行った場合 | トランザクションを終了してから、別の資源にアクセスするようにしてください。 |
例2 | 複数のDSIに分割している表で、1つのSQL文で複数のロググループに対応づけられた資源に対して更新を行った場合 | [対処方法1] |
[対処方法2] |
例1
トランザクションを終了せずに、別のロググループに対応づけられた資源に対して更新を行った場合は、エラーとなります。
トランザクションを終了してから、別の資源にアクセスするようにしてください。
例2
複数のDSIに分割している表で、1つのSQL文で複数のロググループに対応づけられた資源に対して更新を行った場合はエラーとなります。
SQL文に分割条件を追加し、トランザクションを分けて資源にアクセスするようにしてください。
資源配置を修正し、1つのロググループに集約するようにしてください。
ポイント
定義を変更した後で変更したDSIに対する初期データを入力するために、Symfoware Serverのrdbunlコマンドを使用し、表DSIのデータを退避しておいてください。
参照
Symfoware Serverのrdbunlコマンドの詳細は、“コマンドリファレンス”を参照してください。
データベースの格納構造を変更する方法の詳細は、“RDB運用ガイド(データベース定義編)”を参照してください。
DBミラーリングシステムの運用開始後に定義を変更する方法の詳細は、“Mirroring Controller 運用ガイド”の“データベース定義の変更”を参照してください。