2009-10-29 19 views
9

単純な(カスタム)JDBCコネクタクラスを使用してコードからOracleに接続しています。このクラスは、リソースファイルから接続プロパティを読み取り、Oracleへの接続を試行します(シン接続)。RACデータベースに接続するための正しいJDBC URLは何ですか

しかし、最近、データベースがRACに移動し、アプリケーションはDBに接続できません。ここで

はTNSPINGの出力です:

Used LDAP adapter to resolve the alias 
Attempting to contact (DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=OFF)(FAILOVER=ON) 
(ADDRESS=(PROTOCOL=TCP)(HOST=tst-db1.myco.com)(PORT=1604)) 
(ADDRESS=(PROTOCOL=TCP)(HOST=tst-db2.myco.com)(PORT=1604)))(CONNECT_DATA=  
SERVICE_NAME=mydb1.myco.com)(SERVER=DEDICATED))) 
OK (80 msec) 

この場合に指定する正しいURLでしょうか?

答えて

16

URLは次のようになります。

jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=OFF)(FAILOVER=ON) 
(ADDRESS=(PROTOCOL=TCP)(HOST=tst-db1.myco.com)(PORT=1604)) 
(ADDRESS=(PROTOCOL=TCP)(HOST=tst-db2.myco.com)(PORT=1604))) 
(CONNECT_DATA=(SERVICE_NAME=mydb1.myco.com)(SERVER=DEDICATED))) 

は実際に、ちょうどあなたのtnsnames.oraからtnsentriesをコピーします。

+0

です。そうです。驚くばかり。私はあなたが 'tnsnames.ora'から直接コピーできるかどうか分かりませんでした。私はちょっと前にJDBC接続文字列地獄に行っていました。あなたの投稿は本当に助けになりました。 – kevinarpe

1

OCIドライバを参照してください。私は彼らがRACをより良く実行し、より良く扱うことになっていると信じています。

http://download.oracle.com/docs/cd/B10500_01/appdev.920/a96590/adg01dev.htm#429762

からOCIは、Oracleデータベースにアクセスするための他の方法に比べて大きな利点を提供します。アプリケーション設計のすべての側面を

  • よりきめ細かく制御。
  • プログラム実行の高度な制御。
  • 使い慣れた3GLプログラミング手法や、ブラウザやデバッガなどのアプリケーション開発ツールの使用。
  • 動的SQLのサポート方法4
  • すべてのOracleプログラム・インタフェースの最も幅広いプラットフォームで使用できます。
  • コールバックを使用した動的バインドと定義。
  • サーバーメタデータのレイヤーを公開する機能について説明します。
  • 登録されたクライアントアプリケーションの非同期イベント通知。
  • 配列のINSERT、UPDATE、およびDELETEの拡張データ操作言語(DML)機能。
  • 往復を減らすために、実行要求にコミット要求を関連付ける機能。
  • トランスペアレントプリフェッチバッファを使用してラウンドトリップを削減するクエリの最適化。
  • スレッドセーフで、OCIハンドルで相互排他ロック(mutex)を使用する必要はありません。
  • ノンブロッキング・モードでのサーバー接続は、呼び出しがまだ実行中であるか、完了できなかった場合に、制御がOCIコードに戻ることを意味します。
+0

合意 - エンタープライズポリシー(sigh)では、シンクライアントを「太い」相手に対して使用することを推奨しています。 – Vini

+1

うわー...それはちょうど無知です。 –

2

TNSNAMESファイル、古いのOracle Namesサーバー、およびデータベース名を解決する新しい、推奨されるLDAPディレクトリサーバ方式のポイントは、になど、ホスト名、アドレス、ポート、ハードコーディングすることを避けるためには、あなたの接続文字列。 DBAは、データベースを新しいホストまたはポートに移動させることができます。あなたのケースで

jdbc:oracle:thin:@ldap://<OID server name>:<OID port>/<DB SID or Service Name>,cn=OracleContext,dc=<yourdomain>

ので、「OIDが」あなたの会社のOIDサーバーのDNS解決の名前だった場合:

あなたの細い接続URLを設定する最良の方法は、次の構文であります、それはポート5000を使用し、それは次のようになります。

jdbc:oracle:thin:@ldap://oid:5000/mydb1,cn=OracleContext,dc=myco,dc=com

あなたのDBAはまだOIDを設定していない場合、彼らはひどく遅れています。新しいDBAを取得する時間。

-squish

0

もあなたの代わりにあなたのノードのIPのOracle 11gのr2の中でスキャンIPを使用することができます。

testi=(DESCRIPTION = 
(ADDRESS_LIST= 
(ADDRESS= (PROTOCOL = TCP)(HOST = scan-ip-or-name)(PORT = 1521)) 
(FAILOVER = on) 
(LOAD_BALANCE = on) 
) 
(CONNECT_DATA= 
(SERVICE_NAME = testi) 
)) 
0

私はあなたの問題を解決するかどうかわからないんだけど、私は同じ問題に直面しましたこのソリューションは、私の作品:

jdbc:oracle:oci:@(DESCRIPTION=(FAILOVER=on)(ADDRESS=(PROTOCOL=TCP)(HOST=**mi.host**)(PORT=**1521**))(LOAD_BALANCE=yes)(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=**serviceName**))) 
+0

Franciscoに感謝します。私は解決策を得た(受け入れられた答えを参照)。とにかく、手を貸す時間を取っていただきありがとうございます。 – Vini

0

これは私が使用したものである:

jdbc:oracle:thin:@ldap://xxx:389/yyy,cn=OracleContext,dc=zzz,dc=com 
ldap://xxx:389/yyy,cn=OracleContext,dc=zzz,dc=com 
ldap://xxx:389/yyy,cn=OracleContext,dc=zzz,dc=com 
関連する問題