Hinweis:

Datenbanklinks aus Autonomous Database mit vom Kunden verwalteter heterogener Konnektivität zu Microsoft SQL Server auf einem privaten Endpunkt erstellen

Einführung

In einer Organisation werden Daten in mehreren Datenbanken gespeichert, und Sie arbeiten oft an einer Datenbank, die Sie für den Zugriff auf Objekte in einer anderen Datenbank benötigen. Hier kann Oracle Database Link helfen. Ein Datenbanklink ist ein Schemaobjekt in einer Datenbank, mit dem Sie auf Objekte in einer anderen Datenbank zugreifen können. Die andere Datenbank muss kein Oracle Database-System sein. Für den Zugriff auf Nicht-Oracle-Systeme müssen Sie jedoch Oracle Heterogeneous Services verwenden.

In diesem Tutorial wird erläutert, wie Sie auf eine Microsoft SQL Server-Datenbank (Nicht-Oracle-Datenbank) zugreifen können, die sich auf einem privaten Endpunkt von Oracle Autonomous Database Serverless (ADB-S) auf einem privaten Endpunkt befindet. Für den Zugriff auf Nicht-Oracle-Datenbanken von ADB-S müssen Sie Datenbanklinks von Autonomous Database zu Oracle Database Gateway erstellen.

Es gibt zwei Optionen, Datenbanklinks von Autonomous Database zu Oracle Database Gateway zu erstellen, um auf Nicht-Oracle-Datenbanken zuzugreifen, die sich auf einem privaten Endpunkt befinden:

Datenbanklinks mit vom Kunden verwalteter heterogener Konnektivität zu Microsoft SQL Server-Datenbank auf einem privaten Endpunkt ohne Wallet (TLS) erstellen

Datenbanklinks mit vom Kunden verwalteter heterogener Konnektivität zu Microsoft SQL Server-Datenbank auf einem privaten Endpunkt mit einem Wallet (TCPS) erstellen

Ziele

Erstellen Sie Datenbanklinks aus Autonomous Database mit vom Kunden verwalteter heterogener Konnektivität zu Microsoft SQL Server (nicht Oracle Database) auf einem privaten Endpunkt.

Voraussetzungen

Um dies zu vereinfachen, haben wir Oracle Database Gateway for SQL Server und Microsoft SQL Server 2019 auf derselben OCI-VM-Instanz mit Windows Server 2019 installiert.

Architektur

Im Folgenden finden Sie eine Beispielarchitektur auf hoher Ebene der Lösung

Bild 1

Beschreibung der Abbildung adb-s-db-link-to-mssql.png

Aufgabe 1.1: Oracle Database Gateway for SQL Server konfigurieren

Bevor wir beginnen, müssen wir sicherstellen, dass Oracle Database Gateway for SQL Server richtig konfiguriert ist. Während der Installation von Oracle Database Gateway for SQL Server konfigurieren Sie ORACLE_HOME, notieren Sie sich das Verzeichnis ORACLE_HOME. Für dieses Tutorial lautet der Speicherort 'C:\app\oracle\product\19.0.0\tghome_1'.

Es gibt vier wichtige Dateien, die Sie sicherstellen müssen, dass sie korrekt konfiguriert sind.

So sehen die Dateien in unserer Testumgebung für dieses Tutorial aus.

ORACLE_HOME\dg4msql\admin\initdg4msql.ora

# This is a customized agent init file that contains the HS parameters  
# that are needed for the Database Gateway for Microsoft SQL Server    
#    
# HS init parameters
#
HS_FDS_CONNECT_INFO=mssqlvm1:1433//AdventureWorks
HS_FDS_TRACE_LEVEL=ODBC
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER

ORACLE_HOME\network\admin\listener.ora

# listener.ora Network Configuration File: C:\app\oracle\product\19.0.0\tghome_1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.  
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = mssqlvm1)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCPS)(HOST = mssqlvm1)(PORT = 2484))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

SID_LIST_LISTENER=
  (SID_LIST=
      (SID_DESC=
         (SID_NAME=dg4msql)
         (ORACLE_HOME=C:\app\oracle\product\19.0.0\tghome_1)
         (PROGRAM=dg4msql)
      )
  )

ORACLE_HOME\network\admin\sqlnet.ora

# sqlnet.ora Network Configuration File: C:\app\oracle\product\19.0.0\tghome_1\NETWORK\ADMIN\sqlnet.ora    
# Generated by Oracle configuration tools.    
# This file is actually generated by netca. But if customers choose to    
# install "Software Only", this file wont exist and without the native    
# authentication, they will not be able to connect to the database on NT.

SQLNET.AUTHENTICATION_SERVICES= (NONE)

NAMES.DIRECTORY_PATH= (TNSNAMES)

ORACLE_HOME\network\admin\tnsnames.ora

dg4msql=    
(DESCRIPTION=    
(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))    
(CONNECT_DATA=(SID=dg4msql))    
(HS=OK)    
)

Starten Sie den Oracle Database Gateway-Service neu. Für dieses Tutorial lautet er mit der Services-Konsole (Services.msc) "OracleOraGTW19Home1TNSListener".

Sie können den Listener-Status mit dem Befehl lsnrctl status prüfen:

C:\Users\opc>lsnrctl status    
LSNRCTL for 64-bit Windows: Version 19.0.0.0.0 - Production on 19-JUL-2023 11:45:54    
Copyright (c) 1991, 2019, Oracle.  All rights reserved.    
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=mssqlvm1)(PORT=1521)))    
STATUS of the LISTENER    
------------------------    
Alias  LISTENER    
Version  TNSLSNR for 64-bit Windows: Version 19.0.0.0.0 - Production    
Start Date  19-JUL-2023 09:14:23    
Uptime  0 days 2 hr. 31 min. 32 sec    
Trace Level  off    
Security  ON: Local OS Authentication    
SNMP  OFF    
Listener Parameter File  C:\app\oracle\product\19.0.0\tghome_1\network\admin\listener.ora    
Listener Log File  C:\app\oracle\diag\tnslsnr\MSSQLVM1\listener\alert\log.xml    
Listening Endpoints Summary...    
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=MSSQLVM1)(PORT=1521)))    
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=MSSQLVM1)(PORT=2484)))    
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))    
Services Summary...    
Service "dg4msql" has 1 instance(s).    
Instance "dg4msql", status UNKNOWN, has 1 handler(s) for this service...    
The command completed successfully
  1. Erstellen Sie eine Anmeldung bei MS SQL Server, die Zugriff auf die MS SQL Server-Datenbank hat. Beispiel: Sie haben eine SQL-Anmeldung ORACLE auf MS SQL Server erstellt, die Zugriff auf die MS SQL Server-Datenbank AdventureWorks hat.

  2. Stellen Sie eine Verbindung zu Autonomous Database her, und erstellen Sie Zugangsdaten für den Zugriff auf die MS SQL Server-Datenbank. Der Benutzername und das Kennwort, die Sie mit DBMS_CLOUD.CREATE_CREDENTIAL angeben, sind die Zugangsdaten für die MS SQL Server-Datenbank, die im Datenbanklink verwendet werden. Für dieses Tutorial wurden Zugangsdaten für die SQL-Anmeldung ORACLE bereitgestellt.

    BEGIN
      DBMS_CLOUD.CREATE_CREDENTIAL(
      credential_name => 'DB_LINK_CRED',
      username => 'ORACLE',	--Ensure username is in UPPERCASE
      password => 'USER_PASSWORD'
      );
    END;
    /
    
  3. Erstellen Sie nun den Datenbanklink in Autonomous Database zu Oracle Database Gateway for SQL Server mit DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK.

     BEGIN
          DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
               db_link_name =>       'MSSQLLINK',
               hostname =>           'gatewayhostname',
               port =>               '1521',
               service_name =>       'dg4msql',
               ssl_server_cert_dn =>  NULL,
               credential_name =>    'DB_LINK_CRED',
               directory_name =>      NULL,
               private_target =>      TRUE,
               gateway_link =>        TRUE,
               gateway_params =>      NULL);
     END;
     /
    
    

    Hinweis: Der Parameter private_target muss auf TRUE gesetzt sein, wenn sich die Ziel-Nicht-Oracle Database auf einem privaten Endpunkt befindet.

  4. Fragen Sie die MS SQL Server-Datenbank mit dem Oracle DB-Link ab.

    SELECT * FROM HumanResources.Employee@MSSQLLINK;

Sie können die MS SQL Server-Datenbank, die sich auf einem privaten Endpunkt befindet, mit Oracle DB Link ohne Wallet von ADB-S abfragen.

Aufgabe 2.1: Oracle Database Gateway for SQL Server konfigurieren

Bevor Sie nun die Datenbanklinks mit der vom Kunden verwalteten heterogenen Konnektivität zu Microsoft SQL Server Database auf einem privaten Endpunkt mit einem Wallet erstellen, müssen Sie ein Wallet erstellen. Sie können ein selbstsigniertes Wallet mit orapki erstellen.

Wir erstellen das Server- und Client-Wallet auf demselben Rechner, auf dem Oracle Database Gateway for SQL Server installiert ist. Da das Gateway auf diesem Rechner installiert wurde, ist orapki bereits hier vorhanden: C:\app\oracle\product\19.0.0\tghome_1\bin.

Erstellen Sie zwei Ordner für Server- und Client-Wallet:

Befehle zum Erstellen eines Server-Wallets und Hinzufügen eines Serverzertifikats:

orapki wallet create -wallet C:\app\oracle\product\19.0.0\tghome_1\walletserver -pwd Password@123 -auto_login
orapki wallet add -wallet C:\app\oracle\product\19.0.0\tghome_1\walletserver -pwd Password@123 -dn "CN=windows" -keysize 1024 -self_signed -validity 3650 -sign_alg sha256

Befehle zum Erstellen eines Client-Wallets und Hinzufügen eines Clientzertifikats:

orapki wallet create -wallet C:\app\oracle\product\19.0.0\tghome_1\walletclient -pwd Password@123 -auto_login
orapki wallet add -wallet C:\app\oracle\product\19.0.0\tghome_1\walletclient -pwd Password@123 -dn "CN=mssqlvm1client" -keysize 1024 -self_signed -validity 3650 -sign_alg sha256

Jetzt müssen Sie die Zertifikate aus dem Server-Wallet exportieren und in das Client-Wallet importieren sowie die Zertifikate aus dem Client-Wallet exportieren und in das Server-Wallet importieren.

Befehle zum Exportieren der Zertifikate aus den Wallets:

orapki wallet export -wallet C:\app\oracle\product\19.0.0\tghome_1\walletserver -pwd Password@123 -dn "CN=windows" -cert C:\app\oracle\product\19.0.0\tghome_1\walletserver\server.crt
orapki wallet export -wallet C:\app\oracle\product\19.0.0\tghome_1\walletclient -pwd Password@123 -dn "CN=mssqlvm1client" -cert C:\app\oracle\product\19.0.0\tghome_1\walletclient\client.crt

Befehle zum Importieren der Zertifikate in die Wallets:

orapki wallet add -wallet C:\app\oracle\product\19.0.0\tghome_1\walletserver -pwd Password@123 -trusted_cert -cert C:\app\oracle\product\19.0.0\tghome_1\walletclient\client.crt
orapki wallet add -wallet C:\app\oracle\product\19.0.0\tghome_1\walletclient -pwd Password@123 -trusted_cert -cert C:\app\oracle\product\19.0.0\tghome_1\walletserver\server.crt

Stellen Sie nun sicher, dass die folgenden vier Dateien korrekt aktualisiert werden:

So sehen die Dateien in unserer Testumgebung für dieses Tutorial aus.

ORACLE_HOME\dg4msql\admin\initdg4msql.ora

# This is a customized agent init file that contains the HS parameters
# that are needed for the Database Gateway for Microsoft SQL Server

#
# HS init parameters
#
HS_FDS_CONNECT_INFO=mssqlvm1:1433//AdventureWorks
HS_FDS_TRACE_LEVEL=ODBC
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER

ORACLE_HOME\network\admin\listener.ora

# listener.ora Network Configuration File: C:\app\oracle\product\19.0.0\tghome_1\NETWORK\ADMIN\listener.ora
# Generated by Oracle configuration tools.    

WALLET_LOCATION =
  (SOURCE =
    (METHOD = File)
    (METHOD_DATA =
      (DIRECTORY=C:\app\oracle\product\19.0.0\tghome_1\walletserver)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = mssqlvm1)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCPS)(HOST = mssqlvm1)(PORT = 2484))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

SID_LIST_LISTENER=
  (SID_LIST=
      (SID_DESC=
         (SID_NAME=dg4msql)
         (ORACLE_HOME=C:\app\oracle\product\19.0.0\tghome_1)
         (PROGRAM=dg4msql)
      )
  )

ORACLE_HOME\network\admin\sqlnet.ora

# sqlnet.ora Network Configuration File: C:\app\oracle\product\19.0.0\tghome_1\NETWORK\ADMIN\sqlnet.ora
# Generated by Oracle configuration tools.    
# This file is actually generated by netca. But if customers choose to
# install "Software Only", this file wont exist and without the native
# authentication, they will not be able to connect to the database on NT.

SSL_SERVER_DN_MATCH= (ON)

WALLET_LOCATION =
  (SOURCE =
    (METHOD = File)
    (METHOD_DATA =
      (DIRECTORY=C:\app\oracle\product\19.0.0\tghome_1\walletserver)
    )
  )

SQLNET.AUTHENTICATION_SERVICES= (NONE)

NAMES.DIRECTORY_PATH= (TNSNAMES)

ORACLE_HOME\network\admin\tnsnames.ora

dg4msql=
  (DESCRIPTION=
    (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))
    (CONNECT_DATA=(SID=dg4msql))
    (ADDRESS=(PROTOCOL=tcps)(HOST=localhost)(PORT=2484))
    (CONNECT_DATA=(SID=dg4msql))
    (HS=OK)
  )
  1. Erstellen Sie eine Anmeldung bei MS SQL Server, die Zugriff auf die MS SQL Server-Datenbank hat. Beispiel: Sie haben eine SQL-Anmeldung ORACLE auf MS SQL Server erstellt, die Zugriff auf die MS SQL Server-Datenbank AdventureWorks hat.

  2. Kopieren Sie das Client-Wallet (cwallet.sso) aus C:\app\oracle\product\19.0.0\tghome_1\walletclient in den OCI-Objektspeicher.

  3. Stellen Sie eine Verbindung zu Autonomous Database her, und erstellen Sie Zugangsdaten für den Zugriff auf den Objektspeicher, in den Sie die Datei cwallet.sso kopiert haben.

    • Unter CREATE_CREDENTIAL finden Sie Informationen zu den Parametern für Benutzername und Kennwort für verschiedene Object Storage-Services.

    • Informationen zu den erforderlichen Parametern finden Sie unter Erforderliche Schlüssel und OCIDs.

      BEGIN
         DBMS_CLOUD.CREATE_CREDENTIAL (
             credential_name => 'OCI_KEY_CRED',
             user_ocid       => 'ocid1.user.oc1..aaaa.....7igkq',
             tenancy_ocid    => 'ocid1.tenancy.oc1..aaaa....xo3da',
             private_key     => 'MIIEvgIBA.........S0EOOYN4ijczB',
             fingerprint     => 'f2:db:f9:18:a4:..:..:..:f4:f6:6c:39:96:16:aa:27');
      END;
      /
      
  4. Jetzt erstellen wir ein Verzeichnis in Autonomous Database für die Wallet-Datei cwallet.sso.

    CREATE DIRECTORY dblink_wallet_dir AS 'wallet_dir';
    
  5. Wir laden mit DBMS_CLOUD.GET_OBJECT das selbstsignierte Wallet des Zielgateways in das Verzeichnis hoch, das Sie im vorherigen Schritt DBLINK_WALLET_DIR erstellt haben.

    BEGIN
      DBMS_CLOUD.GET_OBJECT(
        credential_name => 'OCI_KEY_CRED',
        object_uri => 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/<namespace>/b/<bucketname>/o/cwallet.sso',
        directory_name => 'dblink_wallet_dir');
    END;
    

    Informationen zum Abrufen der object_uri finden Sie unter URI-Formate für Cloud Object Storage.

  6. Zugangsdaten für den Zugriff auf die MS SQL Server-Datenbank erstellen. Der Benutzername und das Kennwort, die Sie mit DBMS_CLOUD.CREATE_CREDENTIAL angeben, sind die Zugangsdaten für die MS SQL Server-Datenbank, die im Datenbanklink verwendet werden. In diesem Tutorial wurden Zugangsdaten für die SQL-Anmeldung "ORACLE" bereitgestellt.

     BEGIN
       DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'DB_LINK_CRED',
    username => 'ORACLE',	--Ensure username is in UPPERCASE
    password => 'USER_PASSWORD'
       );
     END;
     /
    
  7. Erstellen Sie nun den Datenbanklink in Autonomous Database zu Oracle Database Gateway for SQL Server mit DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK.

    BEGIN
         DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
              db_link_name =>       'MSSQLLINKWW',
              hostname =>           'mssqlvm1',
              port =>               '2484',
              service_name =>       'dg4msql',
              ssl_server_cert_dn => 'CN=windows',
              credential_name =>    'DB_LINK_CRED',
              directory_name =>     'dblink_wallet_dir',
              gateway_link =>        TRUE,
              private_target =>      TRUE,
              gateway_params =>      NULL);
    END;
    /
    
  8. Fragen Sie jetzt die MS SQL Server-Datenbank mit dem Oracle DB-Link ab.

    SELECT * FROM HumanResources.Employee@MSSQLLINKWW;
    

Nächste Schritte

In diesem Tutorial erfahren Sie, wie Sie Datenbanklinks aus einer Autonomous Database mit vom Kunden verwalteter heterogener Konnektivität zu Microsoft SQL Server (Nicht-Oracle Database) auf einem privaten Endpunkt konfigurieren. Wir untersuchten beide Optionen, d.h. ohne Wallet (TLS) und mit einem Wallet (TCPS).

Ähnliche Schritte können für andere Nicht-Oracle-Datenbanken verwendet werden. Sie müssen sicherstellen, dass Sie Oracle Database Gateway entsprechend konfiguriert haben.

Bestätigungen

Weitere Lernressourcen

Sehen Sie sich andere Übungen zu docs.oracle.com/learn an, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube-Kanal zu. Besuchen Sie außerdem die Website education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.

Produktdokumentation finden Sie im Oracle Help Center.