IISを使用したデバッグ
IISを使用したデバッグでは、「Oracleアプリケーションのデバッグ」は使用せず以下のような手順となります。
- 環境変数の設定
- ブレークポイントの設定
- デバッグ開始
- 接続前にOracle外部アプリケーション・デバッガを起動
VS2005で新しいWebサイトを作成し、場所に「HTTP」を選択します。
次に、.NETからOracleへ接続するためのデータ・プロバイダであるODP.NETを、参照設定に追加します。ODP.NETの参照設定は、VS 2005のメニューより[プロジェクト]-[参照の追加]を選択し、.NETタブより[Oracle.DataAccess]を選択して行います。
「Default.aspx」にツールボックスからテキストボックスを2つとボタンを1つ配置します。

IISが正常に動作していることを確認するため、この時点で一度デバッグ実行ておきます。デバッグ実行に関する警告が表示された場合は[OK]をクリックします。

デバッグを行うため、環境変数を設定する必要があります。今回は以下のようなコードで環境変数を設定します(改行なしの一行で記述してください)。
Environment.SetEnvironmentVariable("ORA_DEBUG_JDWP",
"host=machinename.domain.com;port=8888",
EnvironmentVariableTarget.Process)
環境変数名は「ORA_DEBUG_JDWP」、値としてデバッグを行うマシンの8888番ポートを指定します。尚、マシン名は環境に応じて変更してください。ポート番号もここでは例として8888番を指定していますが通信可能な任意のポート番号であれば構いません。最後の引数でデバッグを行うスコープを指定します。ここではSQL Developer等、他のクライアントアプリケーションには影響を与えないようにするためプロセスレベルで設定しています。
ボタンのClickイベントに、環境変数の設定を含んだコードを記述します。
Imports Oracle.DataAccess.Client Imports Oracle.DataAccess.Types Imports system.Data Partial Class _Default Inherits System.Web.UI.Page Protected Sub Button1_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) _ Handles Button1.Click '環境変数を設定 Environment.SetEnvironmentVariable("ORA_DEBUG_JDWP", _ "host=machinename.domain.com;port=8888", _ EnvironmentVariableTarget.Process) 'データベース接続 Dim conn As New OracleConnection( _ "User Id=Scott;Password=Tiger;Data Source=orcl10gr2") conn.Open() Dim cmd As New OracleCommand("GETEMPNAME", conn) cmd.CommandType = CommandType.StoredProcedure cmd.Parameters.Add("PARAEMPNO", OracleDbType.Int32 _ , ParameterDirection.Input) cmd.Parameters("PARAEMPNO").Value = CInt(TextBox1.Text) cmd.Parameters.Add("PARAMENAME", OracleDbType.Varchar2 _ , 10, "", ParameterDirection.Output) 'ストアドプロシージャの実行 cmd.ExecuteNonQuery() TextBox2.Text = cmd.Parameters("PARAMENAME").Value.ToString 'Close conn.Close() conn.Dispose() End Sub End Class
コネクションの確立前にブレークポイントを設定しておきます。
OracleエクスプローラからGETEMPNAMEストアドプロシージャを開き、ブレークポイントを設定します。
デバッグを開始するとコネクション確立前のブレークポイントで停止します。「ツール」メニューから「Oracle外部アプリケーション・デバッガ」を起動し、ポート番号に環境変数で指定したものと同じポートを指定します。


デバッグを再開すると、PL/SQL側のブレークポイントで停止します。ウォッチ等の動作も使用可能です。

おわりに
アプリケーションとデータベースを同時にデバッグすることにより、Webアプリケーション開発時の問題特定・解決がより容易となります。手順さえ覚えてしまえばそう難しいこともなく、さまざまな場面で活用することができます。この記事が皆様の開発生産性の向上に寄与できれば幸いです。
参考資料
- Oracle Technology Network 『.NET Developer Center』


"host=machinename.domain.com;port=8888",
