Announcement

Collapse
No announcement yet.

ODBC Verbindung zur ORACLE DB

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ODBC Verbindung zur ORACLE DB

    Hallo Profis,

    gibt es eine andere Möglichkeit DB Namen "aufzulösen" ausser der Datei "TNSNAMES.ORA"?

    Hab die Datei "TNSNAMES.ORA" vom alten PC auf den neuen PC kopiert.
    Auf dem alten PC (Win XP) geht die ODBC Verbindung zu der ORACLE DB tadellos
    auf dem neuen PC (Win 7) kriege ich bei SQL Plus und bei Erstellung einen ODBC connection
    die gleiche Felermeldung "ORA-12154: TNS: could not resolve the connect identifier spezified".

    In der "TNSNAMES.ORA" ist der DB Name tatsächlich NICHT aufgelistet.
    Wo können die DB Daten dann noch augelistet sein?

    Auf eine Antwort würde ich mich riesig freuen.

    Danke schon mal im Voraus.

    arwar52

  • #2
    Es besteht die Möglichkeit, dass die Namensauflösung im ldap geführt wird (dann gibt es auch eine ldap.ora) oder es gibt auf dem Quellrechner eine weitere tnsadmin.ora die an einem anderen Ort lag.
    Sofern es nicht mehrere ORACLE_HOME Einträge gibt, kann über die Umgebungsvariable TNS_ADMIN der Speicherort der tnsnames.ora explizit angegeben werden.

    Wenn Du noch Zugriff auf den Quellrechner hast kannst Du das dort ja mal prüfen. Alternativ dort in der Konsole ein tnsping dein_db_name eingeben, dann wird ebenfalls das Verzeichnis angezeigt, aus dem die .ora Dateien gelesen werden.
    Zitat Tom Kyte:
    I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

    Comment


    • #3
      Im Netz habe ich mal diese Aufstellung gefunden wo und in welcher Reihenfolge nach der "sqlnet.ora" gesucht wird.

      1. current path (evtl. kommen noch die Verzeichnisse aus der %PATH% Variable dazu.)
      2. Environment variable TNS_ADMIN defined for the session
      3. Environment variable TNS_ADMIN defined for the system
      4. Windows Registry Key HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\{Oracle Home name}\TNS_ADMIN
      5. %ORACLE_HOME%\network\admin

      In der sqlnet.ora steht dann drin wie es weitergeht, z.B.:
      NAMES.DIRECTORY_PATH= (LDAP, TNSNAMES, ONAMES)

      Gruss

      Comment


      • #4
        0. Prüfe, ob der neue Rechner den Oracle Server pingen kann und zwar auf dem Weg (IP, DNS), der in TNSNAMES verwendet wird.

        1. Falls Du den "Full" client auf dem neuen System hast, einfach mal
        TNSPING [DBAlias]
        aufrufen. Das zeigt an, welches Verzeichnis / Datei zur Namensauflösung verwendet wird. Das kleine praktische Tool ist leider unterm Instant Client nicht mehr dabei.

        2. Außerdem kannst Du im bekannten / vermutlich verwendeten Verzeichnis die sqlnet.ora mit der alten Datei abgleichen. In dieser Datei werden z.B. die verschiedene Verfahren erst freigegeben. Außerdem wäre zu prüfen, ob überhaupt irgendeine DB erreichbar ist, also der Client richtig installiert ist.

        4. Es gibt mindestens ein Zugriffverfahren (Name fällt mir grad nicht ein), für das Du keine TNS brauchst. Müsste in sqlnet.ora (der alten) aufgeführt sein.

        5.Falls Du mehrfach den Client oder ein anderes Produkt von Oracle installiert und Deinstalliert hast, wäre es sehr ratsam, die Pathvariable (OS-seitig) aufzuräumen und deinstalltionsreste in alten / verschiedenen Basisverzeichnissen zu löschen. Die bleiben nämlich gern stehen, weil sie ja Benutzerspezifischen Inhalt eben die TNSNAMES usw beinhalten.
        Für Tests im Bereich PATH reicht ein Versuch in der DOS Box mit geänderte PATH Angabe, dann muss man nicht gleich alle bestehenden Ora Installationen in Frage stellen.
        Gruß, defo

        Comment


        • #5
          Originally posted by defo View Post
          4. Es gibt mindestens ein Zugriffverfahren (Name fällt mir grad nicht ein), für das Du keine TNS brauchst. Müsste in sqlnet.ora (der alten) aufgeführt sein.
          Im Grunde musst du den Namen gar nicht auflösen.

          Anstatt zum Beispiel
          Code:
          sqlplus scott@oss
          kann man auch den Eintrag aus der tnsnames.ora direkt nehmen, z.B.
          Code:
          sqlplus scott@"(DESCRIPTION=(SOURCE_ROUTE=OFF)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.16.55.106)(PORT=1521)))(CONNECT_DATA=(SID=OSS)(SERVER=DEDICATED)))"
          . Einfach alle Zeilenumbrüche aus dem Connect String entfernen.

          Soweit ich mich erinnern kann verwendet JDBC auch keinen TNS Namen, aber da bin ich mir nicht sicher.

          Gruss

          Comment


          • #6
            Originally posted by Wernfried View Post
            Im Grunde musst du den Namen gar nicht auflösen.

            Anstatt zum Beispiel
            Code:
            sqlplus scott@oss
            kann man auch den Eintrag aus der tnsnames.ora direkt nehmen, z.B.
            Code:
            sqlplus scott@"(DESCRIPTION=(SOURCE_ROUTE=OFF)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.16.55.106)(PORT=1521)))(CONNECT_DATA=(SID=OSS)(SERVER=DEDICATED)))"
            . Einfach alle Zeilenumbrüche aus dem Connect String entfernen.

            Soweit ich mich erinnern kann verwendet JDBC auch keinen TNS Namen, aber da bin ich mir nicht sicher.

            Gruss
            Ah, nicht schlecht, wusste ich nicht.
            Ich hab mal gegooglet, was ich im Kopf hatte nennt sich EZConnect (easy connect), muss in sqlnet.ora freigeschaltet sein:
            Code:
            NAMES.DIRECTORY_PATH=(ezconnect, tnsnames)
            JDBC DB URL gelten eben nur für Java und sind vollkommen unabhängig von TNSNames.
            Gruß, defo

            Comment


            • #7
              Erst mal viele DANK an alle beteiligten für die Tipps.
              Im großen und ganzen - läuft die ODBC immer noch NICHT.

              @defo
              Im Punkt 4 sprichst Du von einem Zugriffsverfahren das OHNE TNS auskommt, dessen Name Dir aber nicht auf Anhieb einfiel.
              Besteht die Möglichkeit es herauszufinden?
              Allerdings geht es bei mir um eine MS ACCESS DB , nicht Java.


              Bin alle Tipps durchgegangen - hier die Ergebnisse.


              +++++++++++++++++++++
              TNSPING –
              Auf dem Original(Alten) PC (WinXP) existiert dieser Befehl nicht.

              Auf den neuen PC endet das Commando zur gesuchten DB mit:
              TNS-03505: Failed to resolve name
              --------------------
              zu DB die in TNSNAMES aufgelistet ist geht alles wie es sein soll:
              C:\USERS\abc >tnsping db_name
              Used parameter files:
              C:\oracle\product\10.2.0\client_1\network\admin\sq lnet.ora
              Used TNSNAMES adapter to resolve the alias
              …..
              OK (80 msec)

              -----------
              Treiber auf dem neuen PC wurde mit ODBC zu einer anderen DB gecheckt - alles OK.
              -----------



              Alles weitere wurde auf dem Original (Alten) PC vorgenommen wo die ODBC läuft.

              +++++++++++++++++++++
              Suche auf C: nach –
              db_name - kein gültiges Ergebnis (gesucht als Word in einer Datei)
              - Ldap.ora - nichts gefunden

              +++++++++++++++++++++
              - TNSNAMES.ORA – ist tatsächlich in mehreren Verzeichnissen aber es ist immer die gleiche Datei, die den DB Name NICHTenthält.

              +++++++++++++++++++++
              Inhalt der SQLNET.ORA (wurde auf den neuen PC 1:1 kopiert)

              # SQLNET.ORA Network Configuration File: C:\ORANT9i\NETWORK\ADMIN\sqlnet.ora
              # Generated by Oracle configuration tools.
              NAMES.INITIAL_RETRY_TIMEOUT = 10
              NAME.DEFAULT_ZONE = world
              NAMES.DEFAULT_DOMAIN = world

              NAMES.PREFERRED_SERVERS =
              (ADDRESS_LIST =
              (ADDRESS = (PROTOCOL = TCP)(HOST = 1.host_name)(PORT = 1577))
              (ADDRESS = (PROTOCOL = TCP)(HOST = 2.host_name)(PORT = 1577))
              )
              # Client Version 04.02.2002 sw
              NAMES.DIRECTORY_PATH= (onames,tnsnames)
              ------------
              Suche nach der Datei “onames” – kein Ergebnis

              +++++++++++++++++++++
              Suche nach dem Wortlauf „ORACLE_HOME“:
              Wortlauf ORACLE_HOME.jpg
              ---
              „OraClient806_Remove.LOG“:

              RegDB Key: SOFTWARE\Oracle\ORACLE_HOMES\ORACLE0
              RegDB Name: ORACLE_HOME
              RegDB Name: ORACLE_HOME_NAME
              RegDB Name: SHARED_ORACLE_HOME
              ---
              “installer_debug.txt”
              lax.nl.env.oracle_home=C:\ORANT
              ---
              “atmoci.c”
              /************************************************** *********
              * *
              * Database access routines using OCI. Datatypes are *
              * defined by s.h, part of the Oracle core library. These *
              * datatypes are also defined by oratypes.h, which can be *
              * found in $ORACLE_HOME/rdbms/demo along with the OCI *
              * header files. *
              * *
              ************************************************** *********/
              ---
              EPC.H
              #define epc_s_orahome 163 /* error translating ORACLE_HOME */
              #define epc_s_forafpath 168 /* error getting filepath off */
              /* ORACLE_HOME */
              ---
              “appendib.htm”
              Discoverer Plus supports OLE automation. An OLE demonstration is installed with Discoverer. The demonstration is installed in the following directory:
              <ORACLE_HOME>\discvr4\demo\oleauto\
              This directory contains the following documents:
              • OLEdemo.doc - A Microsoft Word file containing instructions on how to run the Discoverer OLE demonstration.
              • OLEdev.doc - A Microsoft Word file containing the Discoverer 4.1 OLE Automation Developer's Guide. This is a quick-guide to developing an OLE interface for Discoverer.
              The <ORACLE_HOME>\discvr4\demo\oleauto\ directory also contains the following files:
              • OLEdemo.xls - a Microsoft Excel spreadsheet used in the OLE demonstration.
              • Video.dis - a Discoverer Workbook used in the OLE demonstration.
              ++++++++++++++
              Variable TNS_ADMIN auf dem Original PC nicht vorhanden:
              Variablen.jpg


              +++++++++++++++++++
              Auf jedem (Alten und neuen) PC ist ORACLE nur EINMAL installiert. Natürlich sind es unterschiedliche Versionen.

              +++++++++++++++++++

              Comment


              • #8
                Nun ja, warum kompliziert wenn es auch einnfach geht.
                Hab doch den DB Admin herasgefunden, kennengelernt und er hat mir geholfen die richtigen Daten für die TNSNAMES.ORA gegeben.
                Etwas herumprobiert und schon läuft die ODBC Verbindung.

                ABER - leider nicht die DB. Die kann immer noch nicht die ORACLE DB connecten.
                Werde mich mal am Montag damit auseinander setzen . Muss wahrscheinlich die Tabellen neu Verknüpfen.
                Falls ich es nicht hinbekomme - komm ich wieder zu Euch :-)

                Danke auf jeden Fall für die tolle Unterstützung.

                arwar52

                Comment


                • #9
                  Mmh, der Admin hat Dir geholfen und es geht immer noch nicht?
                  Deine letzten beiden Postings sind für mich etwas verwirrend. Deine Frage in #7 habe ich schon in #6 beantwortet.
                  Und was willst Du eigentlich? Bevor ODBC geht, muss der Client selbst connecten können.
                  Was bitte soll das z.B. heißen:
                  "Etwas herumprobiert und schon läuft die ODBC Verbindung.
                  ABER - leider nicht die DB. Die kann immer noch nicht die ORACLE DB connecten."
                  Eine ODBC verbindung "läuft" immer nur mit einer DB am Ende.
                  Eine DB "läuft" oder ist abgeschaltet.
                  Eine DB connected eine Oracle DB?
                  Dann war da noch Access?

                  Du solltest vielleicht mal ein paar Begriffe für Dich sortieren.
                  Noch zu den mysteriösen Benennungsmethoden:
                  Die alte SQLNET enthält "onames", also Oracle Naming Service. Das Verfahren ist nicht dateibasiert, Du kannst also dazu keine Datei finden.
                  Schau Dir das mal an und richte es auf dem neuen System ein.
                  Wundert mich allerdings, dass der Admin dazu nichts sagt.
                  Gruß, defo

                  Comment


                  • #10
                    Hallo defo,
                    unter ODBC Vebindung meinte ich "Start > Admin Tools > Data Sources (ODBC)".
                    Hier könnte ich testen ob die DB Daten (DB Name, Server Name , Port, ...) die ich vom ADMIN bekommen und in die TNSNAMES eingertragen hab eine erfolgreiche Verbindung zur DB herstellen können.

                    Da die Tabellen in meiner ACCESS DB immer noch mit dem Link vom alten Treiber versehen wahren, hat meine DB gestreikt.
                    Erst wo ich in meiner ACCESS DB die Links zu Tabellen in der ORACLE DB über den neuen Treiber verlinkt habe geht alles: ich kann wieder reporten.

                    Diese Reporting DB ist meine eigene Entwicklung, wird nicht von IT supportet und der DB Admin konnte nur mit Daten zur DB helfen.

                    Vielen Herzlichen DANK an alle die sich Mühen gegeben haben um mir zu helfen.

                    Schönen Tag noch.

                    ArWar52

                    Comment

                    Working...
                    X