ルーチンのデバッグの制限

このページでは、ルーチンのデバッグ中におきる可能性のある制限と、これらの制限を回避するための推奨される方法について説明します。 製品の README にもこのデバッガーに関する追加の制限が記述されている場合がありますので、合わせてお読みください。

全般

更新情報については、『ルーチン・デバッガーに関する既知の問題 (Known problems with the Routine debugger)』を参照してください。

区切り文字で区切られているルーチン名
ルーチン・デバッガーでは、スキーマやルーチンの名前が区切り文字で区切られている場合のルーチンのサポートには制限があります。このようなルーチンは、「データ定義」ビューのコンテキスト・メニューではなく、「デバッグ」起動構成ダイアログ・ボックスから起動する必要があります。
ステップ・アクションの使用可能化
デバッグ・セッションを開始した際に、ステップ・アクション・ボタン (例えば、「ステップオーバー」ボタン) が使用可能でない場合は、先頭のスタック・フレームを選択することにより、ボタンを使用可能にします。
セッション・マネージャー
製品に組み込まれているセッション・マネージャーを使用します。セッション・マネージャーは、サーバー、ネットワーク、またはクライアント上におくことができます。 以下のステップは、製品に組み込まれているセッション・マネージャーを使用してセッション・マネージャーをクライアント上で構成する方法を説明しています。 この記述は、DB2® PL/SQL および Oracle 構成には適用されません。
  1. コマンド・ウィンドウを開いて製品のインストール・ディレクトリーに移動します。 デフォルトでは、製品は Windows 上の C:¥Program Files¥IBM¥SDP70 ディレクトリーにインストールされています。
  2. コマンド・ウィンドウから db2dbgm.bat を実行し、セッション・マネージャーの IP アドレスおよびポート番号をメモします。
  3. ワークベンチを始動し、ローカル・セッション・マネージャーを使用するようにデバッガーの設定を変更します。
    1. 「ウィンドウ」 > 「設定」をクリックして「実行/デバッグ」ノードを展開し、「DB2 ルーチン・デバッガー」をクリックします。
    2. 「デバッガー」ペインで、「既に実行中のセッション・マネージャーを使用」を選択します。
    3. 「ホスト」フィールドに、マシンの IP アドレスを指定します。 IP アドレスは、セッション・マネージャーを実行しているコマンドまたは端末ウィンドウからも獲得できます。
    4. 「ポート」フィールドに、ローカル・セッション・マネージャーのポートを指定します。 デフォルトでは、ポート番号は 4554 です。 ポート番号は、セッション・マネージャーを実行しているコマンドまたは端末ウィンドウからも獲得できます。
変数名
DB2 for Linux, Unix, and Windows データベースでのルーチンのデバッグでは、二重引用符を含む変数名はサポートされていません。
ブレークポイント
Optim™ Development Studio バージョン 2.2.1.1 の場合、個々のブレークポイントを使用不可にすることはできません。
DB2 for Linux, UNIX, and Windows バージョン 10.1 フィックスパック 2 以降のデータベースのみで使用可能な機能
以下のデバッグ機能は、DB2 for Linux, UNIX, and Windows バージョン 10.1 フィックスパック 2 以降のデータベース上でルーチンをデバッグする場合のみ使用できます。
  • 宣言済みルーチンのデバッグ
  • トリガーのデバッグ
  • PL/SQL 無名ブロックのデバッグ
  • SQL および XQuery エディターからのデバッガーの開始
  • ルーチン・エディターでの永続ブレークポイントの設定
  • デバッグ・オプションを指定した、ルーチンの再デプロイなしの再コンパイル
  • 「変数」ビューでの以下のタイプの変数の表示
    • グローバル変数およびパッケージ変数
    • 連想配列
    • 行の配列
配列変数
ルーチン・デバッガーは、配列変数の先頭 100,000 個のエレメントのみ「変数」ビューにリストします。
BLOB データ・タイプ
出力パラメーターのデータ・タイプがバイナリー・ラージ・オブジェクト (BLOB) である場合、出力は大文字で戻されます。戻される値は 16 進数を表すため、これによって問題が生じることはありません。
DB2 SYSDEBUG 役割
DB2 for Linux, UNIX and Windows バージョン 10.1 フィックスパック 2 以降のデータベースにデプロイしたルーチンをデバッグするには、ルーチンをデプロイするデータベース・ユーザー ID が SYSDEBUG 役割のメンバーでなければなりません。

SQL および Java ルーチン

トリガー

DB2 データベース内でトリガーをデバッグする際に、一度にデバッグできるトリガーは 1 つのみです。複数のトリガーを同時にデバッグすることは、サポートされていません。

PL/SQL および Oracle データ・タイプ

ルーチン・デバッガーでサポートされない PL/SQL および Oracle データ・タイプ』を参照してください。

PL/SQL ルーチン

Oracle の制限

CURSOR タイプのプロシージャーをデバッグしている際に、プロシージャーの半ばのブレークポイントで停止した場合は、「終了」をクリックすると、出力ビューの項目がハングすることがあります。この制限を回避するためには、「終了」の代わりに「再開」をクリックします。

Informix の制限

以下のリストでは、Informix® データベース上でストアード・プロシージャーをデバッグする際の制限について説明しています。
  • Informix データベース上でストアード・プロシージャーをデバッグする際には、組み込みデバッガーを使用するか、または既に実行中のセッション・マネージャーを使用する必要があります。 接続されている各サーバー上のセッション・マネージャーを実行することは、デフォルト設定としてサポートされていません。

    ルーチン・デバッガー・セッション・マネージャーの場所の設定を変更するには、「ウィンドウ」 > 「設定」を選択します。「設定」で、「実行/デバッグ」 > 「ルーチン・デバッガー」を選択して、デバッグの設定を選択します。デバッグするルーチンのデータベース・サーバーを選択します。「ルーチン・デバッグ・セッション・マネージャーのロケーション」セクションで、「組み込みセッション・マネージャーの使用」または「既に実行中のセッション・マネージャーを使用」を選択します。

  • 「データ・プロジェクト・エクスプローラー」ビューで、Informix ストアード・プロシージャーを右クリックした場合に、Informix データベースが切断されていると、デバッグは有効になりません。デバッグを有効にするには、データベースに接続します。「データ・ソース・エクスプローラー」ビューからストアード・プロシージャーをデバッグすることもできます。

Linux の制限

ローカル DB2 データベース上のルーチンをデバッグする場合、エラー番号 SQL1224N:

COM.ibm.db2.jdbc.DB2Exception: [IBM][CLI Driver] SQL1224N A database agent could not be started to service a request, or was terminated as a result of a database system shutdown or a force command. SQLSTATE=55032 を受け取ることがあります。

これは、Linux カーネルの問題によるものです (Linux kernel Bugzilla bug #351)。 以下の説明は、コール・レベル・インターフェース (CLI) の代わりに DB2 の TCPIP 接続方法を (ループバックとして) 使用する回避策です。 この手順により、デバッガーは前と同じデータベースの別名を使用します。

  1. リモート DB2 クライアントのポートが設定されていない場合、ルートでログオンして TCP/IP ポートを /etc/services に作成します (例えば db2c_db2inst1 50000/tcp)。 または、「コントロール・センター」を使用して (データベース・インスタンスの通信プロパティー設定することによって) TCP/IP ポートを作成することもできます。 リモート DB2 クライアントの既存のポートを使用できます。

    ステップ 2 から 7 は、DB2 インスタンスの所有者としてログインする必要があります。

  2. データベース・マネージャーを、TCP/IP 通信プロトコル用に接続マネージャーを開始するように構成します。 これが既に行われているかどうか分からない場合は、以下のコマンドを発行します。
    db2set db2comm

    出力にキーワード tcpip が含まれない場合は、以下のコマンドを入力して db2comm レジストリー変数に tcpip が含まれるように更新する必要があります。

    db2set db2comm=<既存のプロトコル名>,tcpip

    db2comm レジストリー変数により、データベース・マネージャーが開始したときにどの接続マネージャーが有効になるかが決定されます。 キーワードをコンマで区切ることによって、この変数を複数の通信プロトコルに設定できます。

    db2comm レジストリー・パラメーターで指定したプロトコルの接続マネージャーを開始するためには、db2start コマンドを再発行しなければなりません。 ステップ 7 で DB2 を再始動するので、ここでは必要ありません。

    .
  3. SVCENAME データベース・マネージャー構成パラメーターを、/etc/services で指定した接続サービス名 (ステップ 1) に更新します。

    SVCENAME の現行の設定を確認するには、以下のコマンドを入力します。

    db2 get dbm cfg | grep -i svcename

    SVCENAME の設定を更新する必要がある場合は、以下のコマンドを入力します。

    db2 update dbm cfg using svcename <接続サービス名>

    <接続サービス名> はケース・センシティブであり、/etc/services に置いたサービス・ポート名 (例えば db2 update dbm cfg using svcename db2c_db2inst1) に一致しなければなりません。

    データベース・マネージャーの構成の更新は、次に db2start コマンドが発行されたときに有効になります。 これは、ステップ 7 で行います。

  4. 以下のコマンドを入力してループバック・ノードをカタログします。
    db2 catalog tcpip node <ノード名> remote <ホスト名> server <接続サービス名>

    各部の説明:

    • <ノード名> はカタログするノードのローカル・エイリアスです。 これは、ノードを特定するために使用される、ワークステーション上の任意の名前です (例えば、db2 catalog tcpip node mynode remote 127.0.0.1 server db2c_db2inst1)。
    • <ホスト名> は、DB2 がインストールされているマシンの名前です。 指定するホスト名は、マシンの正確な名前 (大文字/小文字を区別) でなければなりません。 マシンの名前が分からない場合は、 「コントロール・センター」 を確認します。

    カタログ・コマンドが正しく動作したことを確認するには、以下のコマンドを発行します。

    db2 list node directory

    このコマンドの出力例は以下のとおりです (見やすいようにブランク行は除去してあります)。

    Node Directory
    Number of entries in the directory = 1
    Node 1 entry:
    Node name = MYNODE
    Comment =
    Protocol = TCPIP
    Hostname = 127.0.0.1
    Service name = db2c_db2inst1
  5. データベースを以下のようにカタログします。 各コマンドの効果を追跡したい場合は、出力例を生成するために以下のコマンドを参照してください。
    1. db2 catalog db <データベース名> as <データベースの別名>
    2. db2 uncatalog db <データベース名>
    3. db2 catalog db <データベースの別名 as <データベース名> at node <ノード名>
    例:
    db2 catalog db WAS as WASLOOP
    db2 uncatalog db WAS
    db2 catalog db WASLOOP as WAS at node MYNODE

    注:

    • データベースの別名は、任意の名前でかまいませんが、データベース名と同じであってはなりません。 この別名は、8 文字以内でなければなりません。
    • データベースを正しくカタログしないと、エラー番号 SQL1334N を受け取ります。
    • ルーチンをデバッグしたいデータベースのそれぞれについて、ステップ 5a から 5c を繰り返す必要があります。

    ステップ 5a から 5c の出力例

    ステップ 5a の前に、WAS という名前のローカル・データベースを作成済みです。 コマンド db2 list db directory の出力は、以下のメッセージと同様です。

    System Database Directory
    Number of entries in the directory = 1
    
    Database 1 entry:
    
    Database alias = WAS
    Database name = WAS
    Local database directory = /home/ctsui
    Database release level = 9.00
    Comment =
    Directory entry type = Indirect
    Catalog node number = 0

    ステップ 5a の後では、db2 list db directory の出力は以下のメッセージと同様です。

    System Database Directory
    Number of entries in the directory = 2
    
    Database 1 entry:
    
    Database alias = WAS
    Database name = WAS
    Local database directory = /home/ctsui
    Database release level = 9.00
    Comment =
    Directory entry type = Indirect
    Catalog node number = 0
    
    Database 2 entry:
    
    Database alias = WASLOOP
    Database name = WAS
    Local database directory = /home/ctsui
    Database release level = 9.00
    Comment =
    Directory entry type = Indirect
    Catalog node number = 0

    ステップ 5b の後では、db2 list db directory の出力は以下のメッセージと同様です。

    System Database Directory
    Number of entries in the directory = 1
    
    Database 1 entry:
    
    Database alias = WASLOOP
    Database name = WAS
    Local database directory = /home/ctsui
    Database release level = 9.00
    Comment =
    Directory entry type = Indirect
    Catalog node number = 0

    ステップ 5c の後では、db2 list db directory の出力は以下のメッセージと同様です。

    System Database Directory
    Number of entries in the directory = 2
    
    Database 1 entry:
    
    Database alias = WAS
    Database name = WASLOOP
    Node name = MYNODE
    Database release level = 9.00
    Comment =
    Directory entry type = Remote
    Catalog node number = -1
    
    Database 2 entry:
    
    Database alias = WASLOOP
    Database name = WAS
    Local database directory = /home/ctsui
    Database release level = 9.00
    Comment =
    Directory entry type = Indirect
    Catalog node number = 0

    catalog db コマンドが正しく動作したことを確認するには、以下の 2 つのコマンドを発行します (以下の出力例も参照してください)。

    db2 connect to wasloop
    db2 connect to was

    db2 connect to wasloop は接続情報を印刷し、db2 connect to was は SQL1403N を提供します。

    db2 connect to wasloop の出力例:

    Database Connection Information
    System Database Directory
    
    Database server = DB2/6000 6.1.0
    SQL authorization ID = CTSUI
    Local database alias = WASLOOP

    Sample output of db2 connect to was:

    Database Connection Information
    System Database Directory
    
    Database server = DB2/6000 6.1.0
    SQL authorization ID = CTSUI
    Local database alias = WAS
  6. 認証メカニズムをクライアント認証 に更新します。 以下のコマンドを入力します。
    db2 update dbm cfg using authentication client

    コマンドが正しく動作したことを確認するには、以下のコマンドで新規設定を表示します。

    db2 get dbm cfg

    出力例:

    ....
    Database manager authentication     (AUTHENTICATION) = CLIENT
    ....
  7. DB2 を再始動してディレクトリー・キャッシュをリフレッシュします。 例:
    db2stop
    db2start

    注: すべてのアクティブなデータベース接続を閉じるためには、db2stop force を使用しなければならない場合があります。

  8. WAS については、admin.config ファイルを更新する必要はありません。 WebSphere® アプリケーションについては、既存のデータ・ソース構成を変更する必要はありません。
  9. データベースをドロップしたい場合は、以下のコマンドを発行します。
    1. db2 attach to <ノード名> user <ユーザー ID> using <パスワード>
    2. db2 drop db <データベース名>
      例:
      db2 attach to MYNODE user myid using mypasswd
      db2 drop db WAS

フィードバック