手元にObjectBrowserがなくても、JDB(Javaのデバッガ)を使ってPL/SQLのデバッグを行う方法について。
概要
JDBでデバッグ用サーバを立て、PL/SQL側からJDBに接続し、JDBでPL/SQLをリモート操作します。
前提
項目 | 値 |
---|---|
JDB実行のサーバ | jdb_server |
JDB実行時のポート番号 | 10000 |
Oracleユーザ名 | scott |
デバッグプロシージャ名 | TEST_PROCEDURE |
JDBの起動
jdb -connect com.sun.jdi.SocketListen:port=10000
ポート10000番でサーバを立て、PL/SQL側からの接続を待ちます。ポート番号は何番でも大丈夫です。
コマンドを実行すると、ポート10000番に対して接続がくるまで待ちつづけます。
PL/SQL側からの接続
JDBとは別のセッションでOracleに接続します。
sqlplus scott/****@orcl
Oracleに接続したら、SQL*PLUSからJDBに接続します。
begin dbms_Debug_jdwp.connect_tcp( 'jdb_server', '10000' ); end;
ここで、 jdb_server は JDB を起動したサーバです。 10000はJDBで待ち受けたポート番号です。
コマンドを実行すると、接続待ちをしていたJDBがアクティブになります。
ブレイクポイントの設定
JDB側でブレイクポイントを設定します。
プロシージャの場合は、 $Oracle.Procedure.【ユーザ名】.【プロシージャ名】 というクラス名となるので、
stop in $Oracle.Procedure.SCOTT.TEST_PROCEDURE
でブレイクポイントを設定します。
プロシージャの起動
SQL*PLUS側からプロシージャを起動します。ブレイクするとJDBに制御が移るため、普通にJDBでデバッグを行います。ステップ実行や変数の書き換えもできます。
その他
PLSQLのクラスは $Oracle.Procedure.SCOTT.TEST_PROCEDURE となるので、しかるべき位置にソースを置いておき、JDBの起動オプションでソースパスを指定すれば、ソースを見ながらデバッグを行うことができます。