[ORACLE] ORA-12154: TNS

0

Witam

Tworze sobie aplikacje w c++ Builder 2007, korzystając z komponentu ODAC, gdy program nie jest jeszcze zapisany ( SIC!) działa - tzn. przy skompilowaniu łączy się elegancko, natomiast już po zapisaniu na dysk całego projektu i próby odpalenia wyskakuje błąd:

ORA-12154:TNS nie udało się rozstrzygnąć podanego identyfikatora połączenia.

Pogrzebałem po sieci i chodzi o ustawienia w pliku Tnsnames.ora, sqlnet oraz listener - wydaje mi się że wsio mam okej.

Gdyby ktoś znał rozwiązanie problemu proszę o pomoc.

Pozdrawiam

0

na kompie, gdzie odpalasz gotowego execa zainstaluj sobie np. sqltools i spróbuj połączyć się z niego z takimi samymi parametrami jak z programu. Daj środek pliku tnsnames.ora oraz connectionstring czy co tam masz w aplikacji. Napisz też do jakiego oracla (wersja) chcesz się połączyć, jakiego masz zainstalowanego klienta (i gdzie), zawartość zmiennej środowiskowej path (prawy na mój komp, zaawansowane, zmienne środowiskowe) i czy exec i oracle są na tym samym kompie.

0

Wnioskując po twoim opisie - połączenie do Oracle masz. W ramach testu proponuję wykonać test połączenia, które pewnie zakończy się powodzeniem, ale zawsze warto. Spróbuj zgodne z poniższym.
Uruchom konsole CMD a następnie podłącz się do bazy:
set ORACLE_SID=LOCDB -> LOCDB to SID przykładowej bazy, domyślnie chyba jest ORCL
sqlplus user/pass

Jak się połączysz to znaczy że masz połączenie.

Sprawdź również czy masz w pliku sqlnet.ora (ta sama lokalizacja co tnsnames.ora) poniższy wpis:
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT), czyli metodą połączenia.

Sprawdź również czy posiadasz poprawną konfigurację dla sterownika ODAC. Poniżej mała ściągawka - sposoby konfiguracji połączeń dla różnych metod połączenia:
http://www.connectionstrings.com/oracle

0

Dokładniejsze dane:

Oracle Database 10g Enterprise edition Relase 10.2.0.10

Zawartość plików:

sqlnet.ora

SQLNET.AUTHENTICATION_SERVICES= (NTS)

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

tnsnames.ora

(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = firma-l1raopvjj)(PORT = 1521))
(CONNECT_DATA =

  (SERVER = DEDICATED)
  (SERVICE_NAME = orcl)
)

)

EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)

listener.ora

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
(PROGRAM = extproc)
)
)

LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = firma-l1raopvjj)(PORT = 1521))
)

zmienna path:
C:\Program Files\CodeGear\RAD Studio\5.0\bin;C:\Documents and Settings\All Users\Dokumenty\RAD Studio\5.0\Bpl;D:\oracle\product\10.2.0\db_1\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem

jeszcze dwie zmienne:
ORACLE_HOME oraz dopisana przeze mnie zmienna ( porada na jednym z anglojęzycznym forum )
TNS_ADMIN ( D:\oracle\product\10.2.0\db_1\NETWORK\ADMIN ).

spalonyy miałeś rację połączyłem się elegancko :) ( twoim sposobem z lini poleceń) , plik sqlnet.ora jest tak jak wyżej ( czyli tak jak podałeś)

dzięki za odpowiedzi - teraz czytam o connetionstring, może w tym jest przyczyna ?

choć w propertisach ODACA , w connectString już coś takiego mam :
nazwa_użytk/hasło@ORACL ( gdzie nazwa_użytk i hasło to te same co loguje się do oracla )

Dzięki za odpowiedzi.. i proszę o dalsze sugestie ?

0

to jak masz tak

nazwa_użytk/hasło@ORACL
to masz źle bo powinno być nazwa_użytk/hasło@ORCL

0

sorry mój błąd oczywiście było tam już orcl ( pomyłka przy pisaniu posta )

0

Ja mam to samo. Nie mogę się połączyć za pomocą aplikacji napisanej w Visualu 2008 a z linii komend wchodzi

pliki:

tnsnames.ora

BAZA =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST =moj.adres.ip)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = baza)
    )
  )

listaner.ora

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = moj.adres.ip)(PORT = 1521))
    )
  )

sqlnet.ora

SQLNET.AUTHENTICATION_SERVICES= (NTS)

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
0

Hej czy moze ktos wstawic fragment kodu ktory tworzy polaczenie?
Moj wyglada tak:

    public partial class Form1 : Form
    {

        String oradb;
        OracleConnection conn;

        public Form1()
        {
            InitializeComponent();
        }

        private void but_connect_Click(object sender, EventArgs e)
        {
            String oradb = "Data Source=(DESCRIPTION="
                            + "(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=LUKASZ)(PORT=1521)))"
                            + "(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=XE)))"
                            + "User ID=SYSTEM;Password=moje.haslo;";

            OracleConnection conn = new OracleConnection(oradb);
            conn.ConnectionString = oradb;
            try
            {
                conn.Open();
                conn.Close();
            }
            catch (Exception ex)
            {
                System.Windows.Forms.MessageBox.Show(ex.Message, "Błąd połączenia",MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }

i dostaje blad ORA-12154: TNS:could not resolve the connect identifier specified

;/

co jest nie tak?

0

"User ID=system;Data Source=lukasz/xe;Password=haslo;"

0

Heh...
jak zwykle proste rozwiazania sa najlepsze...
Wielkie dzieki:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1