Autonomous Database und Database Links

Database Links sind schon seit jeher ein wichtiger Bestandteil der Datenbank Funktionalität. In einem unserer vorangegangenen Tipps wurde schon das Vorgehen beschrieben wie man beispielsweise per Database Link auf eine Autonomous Database zugreifen kann. Den Link zum Tipp meiner Kollegen findet sich hier.

Wie sieht es nun mit dem umgekehrten Weg aus - also mit dem Erzeugen von Database Links in der Autonomous Database? Um den Sicherheitsstandards zu entsprechen ist eine Grundvoraussetzung dabei immer, dass die Zieldatenbank für die Verwendung von TCP/IP mit SSL (TCPS)-Authentifizierung konfiguriert ist. Darüberhinaus sind die Database Link Ports auf den Bereich 1521-1525 begrenzt. Da es im Autonomous Database Umfeld nicht erforderlich ist, auf das Betriebssystem zuzugreifen, behilft man sich mit der Funktionalität die über die Packages DBMS_CLOUD und DBMS_CLOUD_ADMIN zur Verfügung steht. Im Speziellen handelt es sich dabei um die neue Prozedur CREATE_DATABASE_LINK des Packages DBMS_CLOUD_ADMIN.

An einem ganz einfachen Beispiel soll in folgenden Abschnitten das Vorgehen demonstriert werden. Ausgehend von einer ADW Instanz soll auf Tabellen einer ATP Instanz (auch Zieldatenbank) zugegriffen werden. In der ATP Instanz wurde vorab das Schema SCOTT mit den entsprechenden Tabellen angelegt. Die Idee ist eine einfache Abfrage mit Database Link wie folgt auf die ATP Instanz durchzuführen:

 
SQL> select * from scott.emp@LINKTOATP;

     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17.12.80        800                    20
      7499 ALLEN      SALESMAN        7698 20.02.81       1600        300         30
      7521 WARD       SALESMAN        7698 22.02.81       1250        500         30
      7566 JONES      MANAGER         7839 02.04.81       2975                    20
      7654 MARTIN     SALESMAN        7698 28.09.81       1250       1400         30
      7698 BLAKE      MANAGER         7839 01.05.81       2850                    30
      7782 CLARK      MANAGER         7839 09.06.81       2450                    10
      7788 SCOTT      ANALYST         7566 19.04.87       3000                    20
      7839 KING       PRESIDENT            17.11.81       5000                    10
      7844 TURNER     SALESMAN        7698 08.09.81       1500          0         30
      7876 ADAMS      CLERK           7788 23.05.87       1100                    20
      7900 JAMES      CLERK           7698 03.12.81        950                    30
      7902 FORD       ANALYST         7566 03.12.81       3000                    20
      7934 MILLER     CLERK           7782 23.01.82       1300                    10

Da Autonomous Database Instanzen standardmässig TCP/IP mit SSL (TCPS)-Authentifizierung verwenden, ist in der Zieldatenbank keine zusätzliche Konfiguration erforderlich. Zuerst wird die Datei cwallet.sso in den Objectstorage geladen. Zur Erinnerung: Die Datei cwallet.sso befindet sich in der heruntergeladenen Client Credential Zip Datei.

Im nächsten Schritt wird die cwallet.sso Datei in das Verzeichnis DATA_PUMP_DIR im Autonomous Data Warehouse geladen. Dies geschieht mit der Prozedur GET_OBJECT des Package DBMS_CLOUD.

BEGIN 
     DBMS_CLOUD.GET_OBJECT(
        credential_name => 'CREDENTIAL_US1',
        object_uri      => 'https://objectstorage.eu-frankfurt-1.oraclecloud.com/n/.../o/cwallet.sso',
        directory_name  => 'DATA_PUMP_DIR'); 
END;
/ 

Ich verwende dabei meine Objectstorage Credentials CREDENTIAL_US1 aus den vorangegangenen Blog Postings. Beispiele dazu finden sich im Tipp Autonomous Database: External Tables. Der Directory Name lautet übrigens immer DATA_PUMP_DIR.

Bevor der Database Link angelegt wird, werden noch die Credentials für die Target Datenbank - hier den User SCOTT - benötigt. Dazu wird ebenfalls das DBMS_CLOUD Package verwendet. Ich vergebe den Namen DB_LINK_CRED.

 
execute dbms_cloud.drop_credential('DB_LINK_CRED');

BEGIN
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'DB_LINK_CRED',
    username        => 'SCOTT',
    password        => 'Passwort von SCOTT'
  );
END;
/

Nun kann der Database Link angelegt werden. Dazu sind der Name für den Link, die Link Credentials und Informationen zum Zielserver - in meinem Fall der ATP Instanz - erforderlich. Die Informationen zur Ziel Connection lässt sich in der heruntergeladenen tnsnames.ora Datei nachlesen. Folgender kurzer Ausschnitt zeigt Beispiele aus einer tnsnames.ora Datei.

db201901101618_high = (description= (address=(protocol=tcps)(port=1522)(host=adb.eu-frankfurt-1.oraclecloud.com))(connect_data=(service_name=xxxx_db201901101618_high.atp.oraclecloud.com))(security=(ssl_server_cert_dn=
        "CN=adwc.eucom-central-1.oraclecloud.com,OU=Oracle BMCS FRANKFURT,O=Oracle Corporation,L=Redwood City,ST=California,C=US"))   )

db201901101618_low = (description= (address=(protocol=tcps)(port=1522)(host=adb.eu-frankfurt-1.oraclecloud.com))(connect_data=(service_name=xxxx_db201901101618_low.atp.oraclecloud.com))(security=(ssl_server_cert_dn=
        "CN=adwc.eucom-central-1.oraclecloud.com,OU=Oracle BMCS FRANKFURT,O=Oracle Corporation,L=Redwood City,ST=California,C=US"))   )

db201901101618_medium = (description= (address=(protocol=tcps)(port=1522)(host=adb.eu-frankfurt-1.oraclecloud.com))(connect_data=(service_name=xxxx_db201901101618_medium.atp.oraclecloud.com))(security=(ssl_server_cert_dn=
        "CN=adwc.eucom-central-1.oraclecloud.com,OU=Oracle BMCS FRANKFURT,O=Oracle Corporation,L=Redwood City,ST=California,C=US"))   )

db201901101618_tp = (description= (address=(protocol=tcps)(port=1522)(host=adb.eu-frankfurt-1.oraclecloud.com))(connect_data=(service_name=xxxx_db201901101618_tp.atp.oraclecloud.com))(security=(ssl_server_cert_dn=
        "CN=adwc.eucom-central-1.oraclecloud.com,OU=Oracle BMCS FRANKFURT,O=Oracle Corporation,L=Redwood City,ST=California,C=US"))   )

db201901101618_tpurgent = (description= (address=(protocol=tcps)(port=1522)(host=adb.eu-frankfurt-1.oraclecloud.com))(connect_data=(service_name=xxxx_db201901101618_tpurgent.atp.oraclecloud.com))(security=(ssl_server_cert_dn=
        "CN=adwc.eucom-central-1.oraclecloud.com,OU=Oracle BMCS FRANKFURT,O=Oracle Corporation,L=Redwood City,ST=California,C=US"))   )

Folgender Schritt legt dann den entsprechenden Database Link an.

execute dbms_cloud_admin.drop_database_link('LINKTOATP');
BEGIN
     DBMS_CLOUD_ADMIN.CREATE_DATABASE_LINK(
          db_link_name       => 'LINKTOATP', 
          hostname           => 'adb.eu-frankfurt-1.oraclecloud.com', 
          port               => '1522',
          service_name       => 'xxxx_db201901101618_high.atp.oraclecloud.com',
          ssl_server_cert_dn => 'CN=adwc.eucom-central-1.oraclecloud.com,OU=Oracle BMCS FRANKFURT,O=Oracle Corporation,L=Redwood City,ST=California,C=US',
          credential_name    => 'DB_LINK_CRED');
END;
/

Eine einfache Kontrolle bestätigt den Erfolg. Wie immer sind die entsprechenden Informationen auch in den üblichen Data Dictionary Views zu finden - beispielsweise in DBA_DB_LINKS.

Weitere Informationen

 

Zurück zur Community-Seite
 

Visit the Oracle Blog

 

Contact Us

Oracle

Integrated Cloud Applications & Platform Services