LoginSignup
2
1

More than 1 year has passed since last update.

SQL DeveloperのPL/SQLデバッグがうまくいかない場合のトラブルシューティング

Posted at

SQL DeveloperはPL/SQLのデバッグ実行ができるのは便利なのですが、バージョンアップの度にセキュリティがどんどん厳しくなり、最近は簡単にはデバッガが動かせないようになっているようです。
最近、久しぶりにSQL DeveloperのPL/SQLデバッグをする機会があって、動かせるようになるまでに結構時間がかかったので、対応方法をまとめておきました。

ORA-01031: 権限が不足しています。

ORA-01031: 権限が不足しています。
ORA-06512: "SYS.DBMS_DEBUG_JDWP", 行68
ORA-06512: 行1
このセッションでは、DEBUG CONNECT SESSIONおよびDEBUG ANY PROCEDUREユーザー権限が必要です。

11gから(?)PL/SQLのデバッグを実行するにはユーザ権限が必要になったようです。表示のとおりデバッグ実行ユーザの権限「DEBUG CONNECT SESSION」「DEBUG ANY PROCEDURE」が足りませんので、(権限を付与できるユーザで接続して)これらの権限をGRANT文でデバッグ実行ユーザに付与します。

SQL> GRANT DEBUG CONNECT SESSION TO デバッグ実行ユーザ名;
SQL> GRANT DEBUG ANY PROCEDURE TO デバッグ実行ユーザ名;

不要になった権限の削除はREVOKE文で行います。

SQL> REVOKE DEBUG CONNECT SESSION FROM デバッグ実行ユーザ名;
SQL> REVOKE DEBUG ANY PROCEDURE FROM デバッグ実行ユーザ名;

ORA-24247: アクセス制御リスト(ACL)によりネットワーク・アクセスが拒否されました。

ORA-24247: アクセス制御リスト(ACL)によりネットワーク・アクセスが拒否されました。
ORA-06512: "SYS.DBMS_DEBUG_JDWP", 行68
ORA-06512: 行1

12cから、ホスト・アクセス制御リストによる制御で、デフォルトではデバッグできないようになっているようです。

以下のPL/SQL(DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE)を実行してホスト・アクセス制御リストにアクセス許可情報を追加することで解決できます。

BEGIN
 DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE
 (
    host => '*.*.*.*', --接続を許可するIPやホスト(*.*.*.*は全ての接続を許可)
    lower_port => null,
    upper_port => null,
    ace => xs$ace_type(privilege_list => xs$name_list('jdwp'), 
    principal_name => 'デバッグユーザ名', 
    principal_type => xs_acl.ptype_db)
 );
END;
/

ホスト・アクセス制御リストの状態はDBA_HOST_ACESから確認することができます。

SQL> SELECT * FROM DBA_HOST_ACES;

アクセス許可情報を削除するにはBMS_NETWORK_ACL_ADMIN.REMOVE_HOST_ACEを使います。

BEGIN
 DBMS_NETWORK_ACL_ADMIN.REMOVE_HOST_ACE
 (
    host => '*.*.*.*', --接続を許可するIPやホスト(*.*.*.*は全ての接続を許可)
    ace => xs$ace_type(
        privilege_list => xs$name_list('jdwp'), 
        principal_name => 'デバッグユーザ名', 
        principal_type => xs_acl.ptype_db)
    )
 );
END;
/

参考: SQL Developerでデバックできないときの解決策

ORA-30683: デバッガへの接続の確立で障害が発生しました。

ORA-24247: ORA-30683: デバッガへの接続の確立で障害が発生しました。
ORA-12541: TNS: リスナーがありません。

SQL Developerのメニューバー[ツール]→[プリファレンス]を選択して、[デバッガ]の[データベース・デバッグのデバッガ・ホストをプロンプト]にチェックを入れます。

preference.png

デバッグを実行すると[デバッガ・ホスト]のプロンプトが出たらクライアントのIPアドレスを入力すると実行できます。

それでも解消しない場合はクライアントPCのファイアウォールが悪さをしている可能性がありますので、ファイアウォールを解除します。

参考: oracle sql developer のデバッグ機能 | ぶりりあんとろーど(仮)

デバッグの実行

ターゲットとなるプロシージャ、ファンクション、パッケージを選択して、デバッグの赤いアイコンをクリックします。[PL/SQLのデバッグ]ダイアログが開くので、(パッケージの場合は[ターゲット]でプロシージャ、ファンクションを選択して)、パラメータを設定して実行します。

なお、ステップ実行を行うためにはデバッグ用にコンパイルする必要があります。SQL Developerであれば対象のプロシージャ、ファンクション、パッケージ選択して右クリックのポップアップメニューで[デバッグ用にコンパイル]を選択すればOKです(パッケージ内ののプロシージャ、ファンクションをステップ実行する場合はパッケージ・ボディもデバッグ用にコンパイルする必要があります)。

詳しいデバッグの方法はこちらがよくまとまっているのでご参照ください。
Oracle SQL Developerのデバッグの方法 | ITSakura

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1