it-swarm.com.de

Konfigurieren Sie einen neuen Verbindungsserver von SQL Server 2016 zu Oracle 12c

Ich habe Probleme beim Erstellen eines Verbindungsservers in SQL Server 2016, um mit einer entfernten Oracle-Datenbank zu kommunizieren.

Ich habe Oracle Database Client 12c installiert. Zuerst habe ich InstantClient installiert und später festgestellt, dass ich mehr Funktionalität für Runtime benötige. Während des Setups habe ich C:\Oracle\product\12.1.0\client_1 Als Oracle-Ausgangsverzeichnis akzeptiert. Für den Oracle Home-Benutzer habe ich das integrierte Windows-Konto NT AUTHORITY\LOCAL SERVICE Verwendet.

Ich habe Oracle Net Configuration Assistant verwendet, um eine Datei tnsnames.ora mit dem Alias ​​= MyAlias und dem Dienstnamen = MyServiceName zu erstellen. Net Configuration Assistant konnte die Datenbankverbindung erfolgreich testen, nachdem ich Anmeldeinformationen für die entfernte Datenbank angegeben hatte.

Die von Oracle Net Configuration Assistant erstellte Datei tnsnames.ora befand sich in folgendem Ordner: C:\Oracle\product\12.1.0\client_1\network\admin

Von einer Powershell-Eingabeaufforderung aus habe ich tnsping MyAlias Ausgeführt und OK (200 msec) erhalten.

Ich denke (hoffe!), Dass ich die Oracle-Seite richtig verstanden habe.

Auf der Microsoft-Seite habe ich .NET Framework 3.5 installiert. Dann habe ich Oracle Data Access Components (ODAC) von hier heruntergeladen und installiert. Insbesondere habe ich ODAC122010Xcopy_x64.Zip heruntergeladen und die Anweisungen in der enthaltenen Readme-Datei befolgt. Die Befehlszeilenoptionen, die ich während der Installation verwendet habe, waren:

 .\install.bat all c:\Oracle odac true true

Die Parameter des obigen Befehls waren:

  • Komponentenname = all (alle Oracle-Anbieter installieren)
  • Oracle_home_path = c:\Oracle (Sollte es die Oracle-Basis oder der Unterordner sein?)
  • Oracle_home_name = odac (bestimmt den Registrierungsschlüsselpfad)
  • install_dependents = true
  • machine_wide_configuration = true (dieser Parameter war eine Vermutung; ich möchte, dass dies für alle Benutzer dieser Maschine funktioniert)

Ich habe dann C:\Oracle und C:\Oracle\bin am Anfang der Umgebungsvariablen PATH hinzugefügt. In Powershell war dies:

 [Environment]::SetEnvironmentVariable("Path","C:\Oracle;C:\Oracle\bin;" + $env:Path, [System.EnvironmentVariableTarget]::Machine)

In SQL Server Management Studio wird OraOLEDB.Oracle in der Liste der Verbindungsserveranbieter angezeigt.

Versuchen Sie nun, den Verbindungsserver zu erstellen. Hier ist meine Konfiguration:

(screenshot of SSMS Linked Server wizard

Aus Sicherheitsgründen versuche ich zunächst, einen festen Sicherheitskontext mit denselben Anmeldeinformationen zu verwenden, die beim Testen der Verbindung mit Oracle Net Configuration Assistant verwendet wurden.

Es funktioniert nicht. Hier ist der generische Fehler:

Der Verbindungsserver wurde erstellt, hat jedoch einen Verbindungstest nicht bestanden. Möchten Sie den Verbindungsserver behalten?

Das Datenquellenobjekt von OLE DB-Anbieter "OraOLEDB.Oracle" für den Verbindungsserver "MYLINKEDSERVER" kann nicht initialisiert werden. OLE DB-Anbieter "OraOLEDB.Oracle" für den verknüpften Server) Der Server "MYLINKEDSERVER" hat die Meldung "ORA-12154: TNS: Die angegebene Verbindungskennung konnte nicht aufgelöst werden" zurückgegeben. (Microsoft SQL Server, Fehler: 7303)

Was vermisse ich? Welche diagnostischen Tests wären wertvoll?

2
dlh

Versuchen Sie, Ihre Datenquelle und Provider-Zeichenfolge in MYALIAS zu ändern. Wenn ich mir die drei Oracle Linked Server ansehe, die ich auf meinem Server habe, habe ich sie so eingerichtet . enter image description here

1
Jim