Hatena::ブログ(Diary)

総天然色頁 RSSフィード

2008-06-04 (水) Oracle関連で詰まったところいろいろ

Thinドライバ用のJDBC URL

問題

OracleのJDBC URLは、jdbc:oracle:driver_type:[username/password]@database_specifier*という形式になっています。

なので、Type4ドライバ(Thinドライバ)の場合、以下のような書き方をしていると思います。

jdbc:oracle:thin:@hogehoge

この場合のhogehogeが何かと言うと、SIDです。

もしもSERVICE_NAMEしか通知されていない場合、上記と同じ書き方をしてしまうとORA-12505エラーが発生します。

対策

データベース指定子(database_specifier)の内容を踏まえた場合、以下の方法が考えられます。

  1. 管理者にSIDを確認する。
  2. データベース定子に、接続記述子を記述する。
  3. データベース指定子に、Thin形式のサービス名を記述する。
  4. データベース指定子に、TNSNames別名を記述し、TNSNAMES.ORAを参照させる。

なお、以下、ホスト名=foo.bar.com、サービス名=hogehoge.bazとします。

対策1:管理者にSIDを確認する。

省略

対策2:データベース指定子に、接続記述子を記述する。

TNSNAMES.ORAに書いてある接続記述子を、全部記述する方法です。

改行/字下げ/空白は不要なので削除した方が良いかも。

だいたいこんな感じで。

jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=foo.bar.com)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=hogehoge.baz)))

実際試して、問題なく繋がった事に感動しましたw

OTNのOTN Japan - 404 Errorに、同様の記述があります。

また、実際に試してはいませんが、RACを使っている場合でも、

データベース指定子の「Thinの場合。」や、RAC構成のOracleへthinドライバで接続するためのJDBC URL - お仕事の備忘録みたいなもののように記述する事で対応可能な模様。

対策3:データベース指定子に、Thin形式のサービス名を記述する。

Thin形式のサービス名というのがあって、下記のような書式だそうです。

//host_name:port_number/service_name

なので、実際に書くとこんな感じ。

jdbc:oracle:thin:@//foo.bar.com:1521/hogehoge.baz

対策4:データベース指定子に、TNSNames別名を記述し、TNSNAMES.ORAを参照させる。

試してません。

TNSNames別名の構文の通りにやると出来る模様。以下抜粋。

System.setProperty("oracle.net.tns_admin", TNSNAMES.ORAのあるディレクトリのパス);
String url = "jdbc:oracle:thin:@tns_entry";

結論

一番楽だし安全そうな対策3が良いかと思います。

対策4はファイルに依存するのが気持ち悪いので、どうせやるなら対策2の方が良いような。

2012-02-08追記

host:port:sid構文?を使うのが一般的。

jdbc:oracle:thin:@foo.bar.com:1521:hogehoge.baz

JDBC - Oracle FAQ

kibou-yasushikibou-yasushi 2017/01/17 05:24 初めまして。Oracle12c、JDK1.8、Eclipse4.6にて冒頭の方法でWindows上でJDBC接続をしておりましたが、「ORA-12505エラー」となってしまい、Web情報をかなり探しましたが、なかなか得られず、困惑しておりました。ようやく本サイトに辿り着き、対策2で繋がった時には、私も感動しました。結局対策3で実装しましたが、Oracleを諦めようとさえ思っていましたので助かりました。OracleはMySQLやPostgreSQLに比べて、PDB等設計思想が複雑で難しいですね。本当に有難うございました。

kamatarokamataro 2017/01/17 09:38 初めまして。お役に立てて良かったです。JDBC URLの構文はDBMSごとにまったく別物なので、制約が多い環境だと大変ですよね。

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/kamataro/20080604/1212583433
リンク元
Connection: close