2009-10-29 9 views
9

Łączymy się z Oracle za pomocą naszego kodu za pomocą prostej (niestandardowej) klasy konektora JDBC. Ta klasa odczytuje właściwości połączenia z pliku zasobów i próbuje nawiązać połączenie z Oracle (cienkie połączenie).Jaki jest poprawny adres URL JDBC do połączenia z bazą danych RAC?

Jednak ostatnio baza danych została przeniesiona do RAC, a teraz aplikacja nie może połączyć się z bazą danych.

Oto wynik 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) 

Jaki byłby poprawny adres URL, aby określić w tym przypadku?

Odpowiedz

16

URL powinien wyglądać następująco:

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))) 

Faktycznie, wystarczy skopiować tnsentries z tnsnames.ora.

+0

To. Jest. Niesamowite. Nie miałem pojęcia, że ​​możesz skopiować bezpośrednio z 'tnsnames.ora'. Właśnie przeszedłem przez niektóre połączenia piekielne JDBC wcześniej. Twój post naprawdę pomógł. – kevinarpe

1

Możesz chcieć spojrzeć na sterowniki OCI. Sądzę, że mają lepszą wydajność i lepiej radzą sobie z RAC.

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

OCI oferuje znaczące zalety w stosunku do innych metod dostępu do bazy danych Oracle:

  • Więcej drobnoziarnista kontrola nad wszystkimi aspektami projektowania aplikacji.
  • Wysoki stopień kontroli nad realizacją programu.
  • Stosowanie znanych technik programowania 3GL i narzędzi programistycznych, takich jak przeglądarki i debuggery. Obsługa klienta dynamicznego SQL, metoda 4.
  • Dostępność na najszerszej gamie platform wszystkich programowych interfejsów Oracle.
  • Wiązanie dynamiczne i zdefiniuj za pomocą połączeń zwrotnych.
  • Opisać funkcjonalność, aby odsłonić warstwy metadanych serwera.
  • Asynchroniczne powiadomienie o zdarzeniu dla zarejestrowanych aplikacji klienckich.
  • Rozszerzona obsługa języka danych tablicy (DML) dla tablicy INSERT, UPDATE i DELETE.
  • Możliwość powiązania żądania zatwierdzenia z wykonaniem w celu zmniejszenia liczby podróży w obie strony.
  • Optymalizacja pod kątem zapytań przy użyciu przezroczystych buforów pobierania wstępnego w celu zmniejszenia liczby podróży w obie strony.
  • Bezpieczeństwo nici, dzięki czemu nie trzeba używać wzajemnie wyłącznych zamków (mutex) na uchwytach OCI.
  • Połączenie z serwerem w trybie niezablokowania oznacza, że ​​sterowanie powraca do kodu OCI, gdy wywołanie nadal trwa lub nie może zostać zakończone.
+0

Uzgodniono - ale polityka przedsiębiorstwa (westchnienie) zaleca stosowanie cienkich klientów w stosunku do ich "grubych" odpowiedników. – Vini

+1

Wow ... to tylko ignorancja. –

2

Punktem pliku TNSNAMES, starszego serwera Oracle Names i nowszych, zalecanej metody serwerze LDAP katalog rozwiązywania nazw baz danych jest uniknięcie konieczności hardcode hostów, adresy, porty itp do swojej ciąg połączenia. Administratorzy baz danych powinni mieć możliwość przeniesienia bazy danych do nowego hosta lub portu bez przerywania czegokolwiek.

Najlepszym sposobem, aby ustawić cienką connect URL jest z następującą składnią:

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

Więc w twoim przypadku, jeśli „oid” były nazwę DNS-rozpoznawana serwera OID w firmie i jest używany portu 5000, byłoby:

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

Jeśli DBA nie zostały jeszcze skonfigurować OID, są one niezmiernie tyłu. Czas na nowe DBA.

-squish

0

również można użyć ip skanowania w Oracle 11g R2 zamiast Your IP węzłów:

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

Nie jestem pewien, czy można rozwiązać problemu, ale w obliczu tego samego problemu i to rozwiązanie działa dla mnie:

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

Dzięki Francisco. Mam rozwiązanie (patrz zaakceptowana odpowiedź). W każdym razie, doceniam, że poświęcasz czas na udzielenie pomocy. – Vini

0

to właśnie użyłem:

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 
Powiązane problemy