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

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

全般

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

SQL および Java ルーチン

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

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

PL/SQL ルーチン

PL/SQL ルーチン・デバッガーは、グローバル変数はサポートしません。PL/SQL ストアード・プロシージャー、関数、または PL/SQL パッケージ内で使用されるグローバル変数は、「変数」ビューには表示されません。

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

フィードバック