「JYP2278E SQL文識別子で指定している表が変更されました」というエラーについて
- Javaアプリケーション実行時に、「JYP2278E SQL文識別子で指定している表が変更されました」というエラーが発生しました。対処方法を教えてください。
- JYP2278Eのメッセージの意味は、いったんPREPARE処理したSQL文が処理対象にしている表の定義が変更されたため、再度PREPARE処理を行う必要がある、というものです。
しかし、JDBCドライバのステートメントキャッシュ機能を使用していると、PREPARE処理のやり直しができません。これは、ステートメントキャッシュ機能によって、1回目のPREPARE処理の結果が保持されているためです。prepareStatementメソッドを再実行してPREPARE処理をやり直しても、1回目のPREPARE処理の実行結果を内部的に利用してしまいます。そのため、Symfowareに対するPREPARE処理が実行されません。
回避するためには、ステートメントキャッシュ数を0に設定することで、ステートメントキャッシュ機能を使わないようにしてください。
現象が発生した場合には、Interstageのワークユニットを再起動するなど、アプリケーションの再起動を行ってください。
ステートメントキャッシュ機能と競合する処理には、以下のものがあります。
-
動的カーソルで参照している表に対して、rdbddlexコマンドで定義情報の変更準備を行い、rdbddlfixコマンドで定義情報の変更内容の確定を行う。
-
動的カーソルで参照している表のインデックスに対してrdbalidxコマンドで非活性状態に設定する。
-
動的カーソルで参照している表に対して、別の応用プログラムから表の定義変更文(ALTER TABLE文)を実行する。
-
応用プログラムで参照した表に、創成していない表のDSI(CREATE DSI文で定義した直後のDSI)が含まれており、そのDSIに対してrdbfmtコマンド、または、rdbsloaderコマンドでDSIの創成を行う。
-
rdbexdsiコマンドで、DSIをSQL処理の対象から除外または除外の解除を行う。
このうち、rdbexdsiコマンドの使用により影響を受ける範囲は、全アプリケーションです。rdbexdsiコマンドが実行されたとき、実行済みのSQL文については、再度PREPARE処理を実行してください。
-
製品・サービス区分 | Symfoware | ||||
---|---|---|---|---|---|
製品・サービス情報 |
|
||||
アンサー種別 | 運用/保守 |