13
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PL/SQLのデバッグ

Last updated at Posted at 2013-06-19

手元に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の起動オプションでソースパスを指定すれば、ソースを見ながらデバッグを行うことができます。

13
13
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
13
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?