Oracle ODBC: SERVICE_NAME fehlt

SQL, Dateimanagement - Sprachunabhängige Datenhaltung
Antworten
nufan
Wiki-Moderator
Beiträge: 2443
Registriert: Sa Jul 05, 2008 3:21 pm

Oracle ODBC: SERVICE_NAME fehlt

Beitrag von nufan » Fr Sep 02, 2011 4:28 pm

Tag :)

Ich versuche zu einer Oracle-Datenbank über ODBC zu verbinden, bekomme aber immer folgende Fehlermeldung (mit Qt sowie JDBC ODBC):
TNS: Listener hat SERVICE_NAME in CONNECT_DATA nicht erhalten.
Obwohl der Eintrag in der (automatisch erstellten) Datei tnsnames.ora enthalten ist:

Code: Alles auswählen

# TNSNAMES.ORA Network Configuration File: C:\oracle\ODS11GR1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.

RPROODS =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = WINXP)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = rproods)
    )
  )

EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )
tnsping ist erfolgreich:

Code: Alles auswählen

C:\Dokumente und Einstellungen\daniel>tnsping rproods

TNS Ping Utility for 32-bit Windows: Version 11.1.0.7.0 - Production on 02-SEP-2
011 17:24:52

Copyright (c) 1997, 2008, Oracle.  All rights reserved.

Used parameter files:
C:\Oracle\ODS11gr1\network\admin\sqlnet.ora


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
(HOST = WINXP)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = rproods)))
OK (30 msec)
Qt Code:

Code: Alles auswählen

    QSqlDatabase db = QSqlDatabase::addDatabase( "QODBC" );
    db.setDatabaseName( "RPROODS" );
    db.setUserName( "reportuser" );
    db.setPassword( "report" );
    if( !db.open() )
    {
        QMessageBox::critical( NULL,
                               QObject::tr( "Error" ),
                               QObject::tr( "Error connecting to database: %1" ).arg( db.lastError().text() ) );
        return 1;
    }
Java Code:

Code: Alles auswählen

import java.sql.*;

public class DbTest {

    public static void main(String args[]) throws SQLException, ClassNotFoundException {
        Connection conn;
        Statement stmt;
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        conn = DriverManager.getConnection("jdbc:odbc:rproods");
        System.out.println(conn.getMetaData().getDriverName());
        System.out.println(conn.isValid(500));
        stmt = conn.createStatement();
    }

}
Die Datenbank ist in den ODBC-Quellen unter "System-DSN" eingetragen. Betriebssystem ist Windows XP, Hostname "winXP". Hat jemand eine Idee wo das Problem liegt?

nufan
Wiki-Moderator
Beiträge: 2443
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Oracle ODBC: SERVICE_NAME fehlt

Beitrag von nufan » Sa Sep 03, 2011 4:49 pm

Über

Code: Alles auswählen

db.setDatabaseName( "Driver={Microsoft ODBC for Oracle};"
                                 "Server=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=WINXP)"
                                 "(PORT=1521))(CONNECT_DATA=(SID=RproODS)));Uid=reportuser;Pwd=report;" );
bekomme ich zumindest mal eine Verbindung. Komischerweise kann ich nur die Daten von einigen Tabellen abfragen, bei gewissen stürzt das Programm mit einem anscheinend Treiber-internen Fehler ab... toll...

Benutzername
Beiträge: 8
Registriert: Fr Apr 27, 2012 11:21 am

Re: Oracle ODBC: SERVICE_NAME fehlt

Beitrag von Benutzername » Fr Apr 27, 2012 11:36 am

Hat dein DB Login die Berechtigungen auf alle Tabellen und/oder sind die Ergebnissmengen eventuell zu groß?

nufan
Wiki-Moderator
Beiträge: 2443
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Oracle ODBC: SERVICE_NAME fehlt

Beitrag von nufan » Sa Apr 28, 2012 12:32 pm

Benutzername hat geschrieben:Hat dein DB Login die Berechtigungen auf alle Tabellen und/oder sind die Ergebnissmengen eventuell zu groß?
Das passte alles. Damals hab ich das Problem mit VB.Net gelöst. Ist ja auch schon fast 8 Monate her...

Antworten