単純な(カスタム)JDBCコネクタクラスを使用して、コードからOracleに接続しています。このクラスは、リソースファイルから接続プロパティを読み取り、Oracleへの接続(シン接続)を試みます。
ただし、最近データベースが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は何ですか?
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をコピーするだけです。
Tnsnamesファイル、古いOracle Namesサーバー、およびデータベース名を解決するための新しい推奨LDAPディレクトリサーバーの方法のポイントは、ホスト名、アドレス、ポートなどを接続文字列にハードコードする必要がないようにすることです。 DBAは、何も壊すことなくデータベースを新しいホストまたはポートに移動できる必要があります。
シン接続URLを設定する最良の方法は、次の構文を使用することです。
jdbc:Oracle:thin:@ldap://<OID server name>:<OID port>/<DB SID or Service Name>,cn=OracleContext,dc=<yourdomain>
したがって、あなたの場合、「oid」が会社のOIDサーバーのDNS解決可能な名前であり、ポート5000を使用した場合、次のようになります。
jdbc:Oracle:thin:@ldap://oid:5000/mydb1,cn=OracleContext,dc=myco,dc=com
DBAがまだOIDを設定していない場合、DBAはひどく遅れています。新しいDBAを取得する時が来ました。
-ビシャビシャ押しつぶす
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ハンドルで相互排他ロック(ミューテックス)を使用する必要がないように、スレッドセーフ。
- 非ブロッキングモードのサーバー接続は、呼び出しがまだ実行中または完了できなかったときに、制御がOCIコードに戻ることを意味します。
これは私が使用したものです:
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
あなたがあなたの問題を解決するかどうかはわかりませんが、私は同じ問題に直面しました、そしてこの解決策は私のために働きます:
jdbc:Oracle:oci:@(DESCRIPTION=(FAILOVER=on)(ADDRESS=(PROTOCOL=TCP)(Host=**mi.Host**)(PORT=**1521**))(LOAD_BALANCE=yes)(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=**serviceName**)))
また、ノードのIPの代わりにOracle 11gr2でscanipを使用することもできます。
testi=(DESCRIPTION =
(ADDRESS_LIST=
(ADDRESS= (PROTOCOL = TCP)(Host = scan-ip-or-name)(PORT = 1521))
(FAILOVER = on)
(LOAD_BALANCE = on)
)
(CONNECT_DATA=
(SERVICE_NAME = testi)
) )