プログラマメモ2 - programmer no memo2

oracleオレオレ開発環境、まずは接続 2010/12/18

いろいろ試してみたくてoracleをインストールしました。
macosx上で動かすeclipseからプログラムで接続したくて、なんか試行錯誤してました。
で、自分用の開発環境をつくる際のメモです。

環境は下記の図のような感じです。
実はoracleのインストールでも手間取ったけど。




testというdbとorclというのを作ってます。この辺の手順はよく理解していない。

一応、listener.ora
#まったく理解していないけど...とりあえずHOSTをipアドレス直にしてる


# listener.ora Network Configuration File: C:\app\nakawaka\product\11.2.0\dbhome_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = orcl)
(ORACLE_HOME = C:\app\nakawaka\product\11.2.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:C:\app\nakawaka\product\11.2.0\dbhome_1\bin\oraclr11.dll")
)
)

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.24.135)(PORT = 1521))
)
)

ADR_BASE_LISTENER = C:\app\nakawaka


つぎに、tnsnames.ora
#これもぜんぜん理解してない、とりあえずHOSTをipアドレス直にしてる
# tnsnames.ora Network Configuration File: C:\app\nakawaka\product\11.2.0\dbhome_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.

LISTENER_TEST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.24.135)(PORT = 1521))


ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)

LISTENER_ORCL =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))


TEST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = test)
)
)

ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)


接続のためのドライバは、ojdbc6.jarを使ってます。

テストに使ったコードは以下

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.SQLException;

public class TestConnection {

public static void main(String[] args) throws SQLException,
ClassNotFoundException {
Connection conn = DriverManager.getConnection(
"jdbc:oracle:thin:@192.168.24.135:1521:test", "system",
"oracle");
DatabaseMetaData meta = conn.getMetaData();
System.out.println("JDBC driver version is " + meta.getDriverVersion());

}

}


実行時エラーをいくつか列挙します。

ドライバがパスにない場合のエラー

Exception in thread "main" java.sql.SQLException: No suitable driver found for jdbc:oracle:thin:@192.168.24.135:1521:test
at java.sql.DriverManager.getConnection(DriverManager.java:602)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at TestConnection.main(TestConnection.java:10)


windowsファイアーウォールで1521のポートを開けていない場合のエラー
ついでに無効にしてしまったけど...

Exception in thread "main" java.sql.SQLRecoverableException: IOエラー: The Network Adapter could not establish the connection
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:419)
at oracle.jdbc.driver.PhysicalConnection.(PhysicalConnection.java:536)
at oracle.jdbc.driver.T4CConnection.(T4CConnection.java:228)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at TestConnection.main(TestConnection.java:10)


つぎにこのエラーの理由がいまいちわかってないけど。
で、これはインスタンス?の指定をtestからorclにしたらおきた。
#listener.oraとtnsnames.oraが悪いだろうな...

Connection conn = DriverManager.getConnection(
"jdbc:oracle:thin:@192.168.24.135:1521:orcl", "system",
"oracle");


Exception in thread "main" java.sql.SQLRecoverableException: ソケットから読み込むデータはこれ以上ありません。
at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1142)
at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1099)
at oracle.jdbc.driver.T4C8TTIpro.receive(T4C8TTIpro.java:128)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1076)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:308)
at oracle.jdbc.driver.PhysicalConnection.(PhysicalConnection.java:536)
at oracle.jdbc.driver.T4CConnection.(T4CConnection.java:228)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:185)
at TestConnection.main(TestConnection.java:10)

: