ページの先頭行へ戻る
Symfoware Server V12.9.0 トラブルシューティング集

A.2.3 アプリケーション実行時のエラーメッセージ

アプリケーションの実行時に出力されるエラーメッセージごとに、その対処方法を説明します。

「JYP1079E マルチスレッドの実行環境に誤りがあります」

処理

アプリケーション

事象

マルチスレッドの実行環境の誤り

メッセージ

JYP1079E マルチスレッドの実行環境に誤りがあります.

埋込みエラー番号

原因と対処

マルチスレッドの実行環境に誤りがあります。以下を確認してください。

  1. コンパイル/リンク時にオプションを正しく指定しているか
    マルチスレッドアプリケーションの場合、コンパイル/リンク時に、“sqlcc、sqlfcc、sqlcobolのオプション”、または“環境変数SQLPC、SQLPCOB”にTオプション(マルチスレッドのオプション)を指定する必要があります。

    参照

    詳細は、“アプリケーション開発ガイド(埋込みSQL編)”の“コンパイル・リンクの方法”を参照してください。

  2. アプリケーション内でマルチスレッド用関数(SQLThr~)を使用してスレッド管理しているか
    マルチスレッドアプリケーションの場合、アプリケーション内でSymfoware/RDBのマルチスレッド用関数(SQLThr~)を使用して、スレッド管理する必要があります。

    参照

    詳細は、“アプリケーション開発ガイド(埋込みSQL編)”の“マルチスレッド環境におけるデータ操作”を参照してください。

注意

シングルスレッドアプリケーションの場合は上記の作業は実行しないでください。

「JYP2008E 同時に操作できるSQL文の数を超えました」

処理

アプリケーション

事象

同時に操作可能なSQL文数

メッセージ

JYP2008E 同時に操作できるSQL文の数を超えました.

埋込みエラー番号

原因と対処

同時に操作できるSQL文の数を超えて、同時にカーソルをオープンしているか、動的SQL文の識別子を準備して(PREPARE文を実行している)います。
同時に操作できるSQL文は、クライアント用の動作環境ファイルのパラメタMAX_SQLで指定します。指定しない場合は、1024に設定されます。この値を増やしてください。

参照

値の見積もり方については、“アプリケーション開発ガイド(埋込みSQL編)”の“クライアント用の動作環境ファイルによる定義”のMAX_SQLを参照してください。

「JYP4934E. DSIがアクセス禁止状態です」

処理

アプリケーション

事象

アクセス禁止状態

メッセージ

JYP4934E DSI “DSI名”がアクセス禁止状態です.

埋込みエラー番号

原因と対処

以下のことを確認してください。

  1. rdbinfコマンドを実行してDSIの状態を確認します。

    参照

    rdbinfコマンドの詳細は、“RDB運用ガイド”の“利用規定および障害状況の照会”を参照してください。

  2. rdbsloaderコマンドの実行途中でエラーが発生した場合、データベースへアクセス禁止状態になります。アクセス禁止状態を解除するには、次のいずれかの対処を実施してください。

    • rdbsloaderコマンドのエラーの原因を取り除いたあと、再度rdbsloaderを実行してください。成功すると、正常なDSIの状態にすることができます(rdbsloaderは、DSIがアクセス禁止状態になっていても動作させることができます)。

    • rdbsloader実行前にバックアップしたファイルを使用して、rdbrcvコマンドを実行し、DSIをコマンド実行前の状態に復元してください。

    • 初期状態のDSIに対してrdbsloader実行した場合は、rdbfmtコマンドを実行し、DSIを再度初期化してください。

  3. I/Oエラーなどが発生している場合は、データベースをリカバリする必要があります。

    参照

    詳細は、“RDB運用ガイド”の“媒体障害からのリカバリ”、および“異常時の運用”を参照してください。

「JYP5004E テンポラリログ域の領域が不足しました」

処理

アプリケーション

事象

テンポラリログ域不足

メッセージ

JYP5004E テンポラリログ域の領域が不足しました.

埋込みエラー番号

原因と対処

アプリケーション(rdbuptを含む)実行時に、取得されるログ量が、rdblogコマンドで指定したテンポラリログ量を超えたため、テンポラリログ域が不足しました。これには、1つのトランザクションでテンポラリログ量を超えた場合と、複数のトランザクションが組み合わされて、テンポラリログ域を超えた場合の2通りの原因があります。
以下のいずれかの方法で、テンポラリログ域不足を回避してください。

  1. テンポラリログ域を大きくする
    rdbstopコマンドで運用を停止した後、rdblogコマンドのGオプション、tオプション、および、rオプション(テンポラリログの再作成)、rdblogコマンドのUオプションおよびtオプション(テンポラリログの属性変更)、またはrdblogコマンドのDオプションおよびtオプション(テンポラリログの削除)とrdblogコマンドのGオプションおよびtオプション(テンポラリログの作成)を実施してください。

    参照

    見積もり式は、“セットアップガイド”の“テンポラリログファイルの見積り式”を参照してください。

  2. ログなし運用にする
    バッチ処理を行う場合、ログなし運用に切り替えてから投入すると、テンポラリログが取得されません。rdbrtrコマンドのnオプションを実行し、ログなし運用を行ってください。ただし、以下の注意が必要です。

    • 媒体障害時の保証はできません。
      ログなし運用を行うことで、対象のDSIの媒体が破壊した場合、リカバリができません。ログなし運用を行う前にrdbunlコマンドなどでデータをバックアップしたあと、実施してください。

    • DSIにアクセスするすべてログなし運用になります。
      rdbrtrコマンドのnオプションを実行した場合、DSIがログなし運用になります。アプリケーション単位にログなし運用を選択することはできません。夜間、バッチなどで実施する場合は、問題ありませんが、業務運用中に実行する場合には、注意(具体的な注意内容)が必要です。

    • 処理終了後にバックアップデータを再取得してください。
      アーカイブログ運用を行っている場合に、ログなし運用を組み合わせると、アーカイブログの情報が連続した情報でなくなります。このため、アーカイブログのリカバリ時のエラーになったり、データが破壊する可能性があります。ログなし運用を行ったあとは、rdbdmpコマンドを実行し、DSIのバックアップデータを再取得してください。なお、必ず、rdbrlsコマンドのnオプションで、ログあり運用に戻してください。

  3. 頻繁にCOMMITを発行する
    アプリケーション内(ストアドプロシジャを含む)で、頻繁にCOMMIT文を発行し、大量のログが一気に出力されないように制御する方法があります。たとえば、削除する単位を100件ごとにしたり、DSI分割されているのであれば、分割条件をDELETE文の条件に記述し、1つのトランザクションで大量の更新が発生しないように制御したりします。

  4. ほかのコマンドで処理を実現する
    削除を、ストアドプロシジャからDELETE文を発行する方法ではなく、rdbunlコマンド/rdbsloaderコマンド(または、rdbfmtコマンド)で、代替する方法があります。これらのコマンドは、ログを取得しないため、テンポラリログ域を使用することはありません。ただし、以下の注意が必要です。

    • アプリケーションとの競合はできません。
      これらのコマンドはDSIをすべて占有し、データの操作を行うので、アプリケーション実行時に動作させることはできません。

    • ログ取得しないため、バックアップデータを再取得してください。
      アーカイブログの運用対象外になっているので、rdbdmpコマンドでDSIのバックアップデータを再取得する必要があります。

「JYP5031E RDBIIシステムが未起動です」

処理

アプリケーション

事象

システム未起動

メッセージ

JYP5031E RDBIIシステムが未起動です.

埋込みエラー番号

原因と対処

起動しているRDBシステムと、アプリケーションがアクセスしようとしているRDBシステムが異なっている場合、システム未起動のエラーが発生します。
アプリケーションのCONNECT文に指定しているRDBシステム名、環境変数のRDBNAMEに指定しているRDBシステム名が正しいかを確認してください。

「JYP6015E. UPDATE文の設定句に副問合せが指定されました」

処理

アプリケーション

事象

未サポート

メッセージ

JYP6015E UPDATE文の設定句に副問合せが指定されました.

埋込みエラー番号

原因と対処

「SET=<値式>」の<値式>中に問合せ指定(SELECT文)を記述するような UPDATE文は、Symfoware Serverでは未サポートです。
SELECT文の結果を一度変数に格納してから、UPDATE文を実行することで、回避可能かどうかを検討してください。

UPDATE TABLE_ABC SET A = (SELECT X FROM TABLE_XYZ WHERE Y=1111)というSQL文を実行する代わりに以下の2つのSQL文を実行します。

  1. SELECT X FROM TABLE_XYZ WHERE Y=1111の結果を変数 MM に取り込みます。

  2. UPDATE TABLE_ABC SET A = :MMを実行します。

「qdg13880i コネクションを回収しました コネクション識別子 ='xxxx' 原因コード ='xxxx' 調査コード ='xxxx'

処理

アプリケーション

事象

Symfoware/RDBによるコネクションの回収

メッセージ

qdg13880i:コネクションを回収しました コネクション識別子='xxxx' 原因コード='xxxx' 調査コード='xxxx'

埋込みエラー番号

原因と対処

意図せず本メッセージが出力された場合には、以下の対処を実施してください。

  • 原因コードが“1”の場合

    以下のいずれかのパラメタで指定したトランザクション時間の上限を超えているため、これらのパラメタの値を変更するか、トランザクション時間が短くなるようにアプリケーションの変更またはチューニングを行ってください。

    • TRAN_TIME_LIMIT:SY/SV/WebAdmin

    • CLI_TRAN_TIME_LIMIT:CL

    SY:システム用の動作環境ファイルで指定可能なパラメタ

    CL:クライアント用の動作環境ファイルまたはクライアントのオプションで指定可能なパラメタ

    SV:サーバ用の動作環境ファイルで指定可能なパラメタ

    WebAdmin:システム用の動作環境ファイルで指定可能なパラメタ

  • 原因コードが“2”の場合

    調査コードに出力された、システムコールのエラー番号を参照して、対処を行ってください。

  • 原因コードが“3”の場合

    クライアントシステムの状態を確認してください。

    クライアントシステムが再起動した際に、当メッセージが出力されている場合には、コネクションの自動回収であるため対処は不要です。

    クライアントシステムが再起動していない場合でも、クライアントシステムのOSがWindowsで、60秒以上の時刻変動が発生すると、コネクションの自動回収が作動します。時刻変動が原因だった場合、システムの時刻を正しく設定するとともに、こまめに時刻補正が行われるようにWindowsの設定を行ってください。こまめに時刻補正が行われないと、時刻補正で60秒以上の時刻変動が発生してしまう可能性があります。なお、実行中であったトランザクションはロールバックされ終了しているため、再接続してトランザクションを再実行してください。

  • 原因コードが“4”の場合

    テンポラリログが枯渇しないように、アプリケーションを修正するか、テンポラリログの設定を変更してください。

ポイント

コネクションの自動回収について

Symfoware/RDBでは、コネクション接続時にOS起動時刻を取得しており、同じIPアドレスからのコネクション接続時に取得したOS起動時刻と比較し、60秒以上の差があった場合は、電源切断が発生したと判断してコネクションを自動的に回収します。