ねら~ITエンジニア雑記

やきうのお兄ちゃんが綴るOracle Databaseメインのブログ

Oracle の JDBC Thin Driver で Net Trace を取得する。

まず服を脱ぎますまず "トレース用" のJDBCドライバをダウンロードします。
ojdbc*_g.jar を Oracle のサイトからダウンロードしてきます。

JDBCドライバはバージョンが幾つかありますが、差し当たり11gR2(11.2.0.4)の
"トレース用"JDBCドライバを下記サイトからダウンロードしてきます。
※2015年6月時点では下記アドレスですが、最新バージョンは都度検索して下さい。

Oracle Database 11g Release 2 JDBC Drivers
Oracle Database 11g Release 2 (11.2.0.4) JDBC Drivers
http://www.oracle.com/technetwork/apps-tech/jdbc-112010-090769.html
ojdbc6_g.jar ←★コイツ★

次に JDBCOracle Netトレース用の Configファイルを作成します。
マニュアル(JDBC開発者ガイド) と WhitePaper を参考にしながら、粛々と作成しますた。

Oracle Database JDBC開発者ガイド
11gリリース2(11.2)
B56281-01
31 JDBCの診断機能
ロギングの構成
http://docs.oracle.com/cd/E16338_01/java.112/b56281/diagnose.htm#CIAIDFIC

An Oracle White Paper
September 2009
Oracle JDBC Logging using java.util.logging
http://www.oracle.com/technetwork/topics/11-2.pdf
> In order to generate network level trace information
> add the following line to your config file:
> oracle.net.ns.level = FINEST

下記は JDBCOracle Netトレース用の Configファイル のサンプルとなります。
基本は上記ドキュメント群のコピペなんですが、少し改変してます。

#java_net_trace.cfg

.level=OFF
#.level=SEVERE
#oracle.jdbc.level=SEVERE

handlers=java.util.logging.FileHandler

# example of a full pathname in Windows
java.util.logging.FileHandler.pattern=D:\\Networkpacket.log

# Predefined levels are: ALL, SEVERE, WARNING, INFO, CONFIG, FINE, FINER, 
# FINEST, OFF

java.util.logging.FileHandler.limit = 500000000
java.util.logging.FileHandler.count = 1
java.util.logging.FileHandler.level =ALL
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.FileHandler.pattern = jdbc_net_trace.log

# Following line enables the Network packet tracing
oracle.net.ns.level = FINEST

とりあえず上記のcfgファイルやトレース用のJDBCドライバをWindowsマシンの
「D:\toos\MT\」にぶっ込んだ想定で、SQLを実行するモジュールを起動します。

DOSプロンプトからコマンドラインjavaを直に実行します。javaコマンドのサンプルは下記の通りとなります。Configファイル や トレース用のJDBCドライバ を指定しつつ、実行します。
javaコマンドは表記上複数行で記載していますが、実際には1行で実行して下さい。

D:
cd \tools\MT\
"C:\Program Files\Java\jdk1.8.0_31\bin\java.exe" 
 -Djava.util.logging.config.file=D:\tools\MT\java_net_trace.cfg
 -Doracle.jdbc.Trace=true -classpath .;D:\tools\MT\ojdbc6_g.jar MultiThreadSQL 1 3 REPO

上手く行くと、Configファイルに指定したログファイルに JDBC の Netトレースが出力されてます。
下記は実際に手元の環境で出力された JDBC の Netトレース・ログ(jdbc_net_trace.log) の 抜粋となります。

6 04, 2015 9:41:15 午後 oracle.net.ns.NSProtocol connect
詳細: 50675690 Enter: "(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)
(HOST = dbserver1.ayu.com)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)
(SERVER=DEDICADED)))", {T4CConnection.hashCode=2D6D8735, 
oracle.jdbc.v$session.osuser=oracle01, USE_ZERO_COPY_IO=true, 
oracle.jdbc.v$session.program=JDBC Thin Client, FORCE_DNS_LOAD_BALANCING=false, 
oracle.net.keepAlive=false, ENABLE_JAVANET_FASTPATH=false}
6 04, 2015 9:41:15 午後 oracle.net.ns.NSProtocol connect
TRACE_20: 50675690 Debug: Tracing T4CConnection.hashCode=2D6D8735
:
(中略)
:
6 04, 2015 9:41:18 午後 oracle.net.ns.DataPacket send
詳細: 7F63425A Exit [0.707761ms]
6 04, 2015 9:41:18 午後 oracle.net.ns.Packet receive
詳細: 36D64342 Enter: 
6 04, 2015 9:41:18 午後 oracle.net.ns.Packet receive
TRACE_20: 36D64342 Debug: type=6, length=266, flags=0
 01 0A 00 00 06 00 00 00     |........|
 00 00 08 01 03 01 0C 0C     |........|
 41 55 54 48 5F 53 45 53     |AUTH_SES|
 53 4B 45 59 01 60 60 33     |SKEY.``3|
 41 37 44 42 37 36 43 32     |A7DB76C2|
 33 46 36 32 33 35 44 42     |3F6235DB|
 43 41 43 34 32 34 38 33     |CAC42483|
 39 42 37 42 41 42 33 31     |9B7BAB31|
 46 39 39 34 37 39 36 35     |F9947965|
 43 32 36 43 38 45 34 35     |C26C8E45|
 45 36 44 37 46 30 39 45     |E6D7F09E|
 34 31 31 41 46 34 31 38     |411AF418|
 46 39 31 43 30 30 45 42     |F91C00EB|
 35 30 34 44 42 33 37 34     |504DB374|
 31 39 31 33 44 33 35 42     |1913D35B|
 31 43 33 30 46 39 30 00     |1C30F90.|
 01 0D 0D 41 55 54 48 5F     |...AUTH_|
 56 46 52 5F 44 41 54 41     |VFR_DATA|
 01 14 14 32 36 32 34 42     |...2624B|
 33 43 30 34 42 30 43 30     |3C04B0C0|
 30 31 30 41 41 35 41 02     |010AA5A.|
 1B 25 01 1A 1A 41 55 54     |.%...AUT|
 48 5F 47 4C 4F 42 41 4C     |H_GLOBAL|
 4C 59 5F 55 4E 49 51 55     |LY_UNIQU|
 45 5F 44 42 49 44 00 01     |E_DBID..|
 20 20 34 30 32 34 37 41     |..40247A|
 37 39 37 34 31 38 37 38     |79741878|
 46 39 42 42 43 39 39 35     |F9BBC995|
 36 41 43 41 41 36 43 42     |6ACAA6CB|
 43 39 00 04 01 01 01 02     |C9......|
 00 00 00 00 00 00 00 00     |........|
 00 00 00 00 00 00 00 00     |........|
 00 00 00 01 00 00 00 00     |........|
 00 00                       |..      |
:
(中略)
:

上手く行ったZe!!! (`・ω・)Ъ
Netトレースの、AUTH_SESSKEY が見たかったんですよね。