Zakładam, że do określenia dostępnych usług bazodanowych używasz pliku tnsnames.ora. Jeśli tak, błędy połączenia zwykle sprowadzają się do dwóch rzeczy.
-
Aplikacja nie może znaleźć wpisu TNS określonego w ciągu połączenia.
-
Wpis TNS został znaleziony, ale adres IP lub host nie jest poprawny w pliku tnsnames.ora.
Aby rozwinąć numer 1 (co moim zdaniem jest twoim problemem). Kiedy powiesz Oracle, aby połączyć się za pomocą czegoś takiego jak:
sqlplus user/[email protected]
Usługa jest zdefiniowana w pliku tnsnames.ora. Jeśli spróbuję połączyć się z usługą, która nie jest zdefiniowana w moim tnsnames.ora, otrzymuję błąd:
[[email protected] ~]$ sqlplus sodonnel/[email protected]
SQL*Plus: Release 11.2.0.1.0 Production on Mon Oct 31 21:42:15 2011
Copyright (c) 1982, 2009, Oracle. All rights reserved.
ERROR:
ORA-12154: TNS:could not resolve the connect identifier specified
Musisz więc sprawdzić kilka rzeczy:
- Czy istnieje plik tnsnames.ora - myślę, że tak, ponieważ twoja konsola może się połączyć
- Czy w pliku jest wpis dotyczący usługi - myślę, że też tak, ponieważ konsola się łączy
- Czy aplikacja może znaleźć tnsnames.ora?
Twoim problemem może być numer 3 - czy aplikacja działa jako inny użytkownik niż podczas uruchamiania konsoli?
Oracle szuka pliku tnsnames.ora w katalogu zdefiniowanym w zmiennej środowiskowej TNS_ADMIN - Jeśli pracujesz jako różni użytkownicy, to może zmienna środowiskowa TNS_ADMIN nie jest ustawiona i dlatego nie może znaleźć pliku?