Blog Name
  • Februar 2019

Autonomous Database Services: Einbinden per Datenbank Link

Autonome Datenbanken erfreuen sich wachsender Beliebtheit im Rahmen einer hybriden Cloud Infrastruktur. Die Anbindung dieser Datenbanken an bestehende Datenbank Landschaften ist dabei ein wichtiger Aspekt. Dieser Tipp zeigt, wie Sie per Datenbank Link auf eine Oracle Autonomous Database (ADW oder ATP) zugreifen können.

Wir haben in unserem Blog schon in anderen Tipps gezeigt, wie ein Autonomous Database Service erzeugt, mit Daten gefüllt und dort Daten exportiert werden können. Eine weitere wichtige Frage ist, wie von einer Nicht-Autonomous Database auf eine Autonomous Database zugegriffen werden kann, um zum Beispiel konstant Daten dorthin zu transportieren.

Um Datenbanken miteinander zu verbinden gibt es in der Oracle Datenbankwelt grundsätzlich die Datenbank Links, mit denen Abfragen und DML Kommandos (kein DDL!) auf Datenbanktabellen, die in anderen Datenbanken liegen, möglich sind. In einer Autonomous Database selbst kann aus Sicherheitsgründen zwar kein Datenbank Link angelegt werden, in der Gegenrichtung kann aber sehr wohl per Datenbank Link auf einen Autonomous Database Service zugegriffen werden.

Dabei gibt es allerdings einen kleinen Stolperstein, denn eine Verbindung über einen Datenbank-Client erfolgt immer unter Verwendung eines Zertifikats, um die Verschlüsselung der Kommunikation zu garantieren. Dazu wird vom Autonomous Database Service ein Wallet generiert, welches sich in der Wallet_DBxx.zip Datei befindet. Dieses Wallet muss im Datenbank-Client angegeben werden. Bei einem Datenbank Link ist die aufrufende Datenbank der Client, also muss bei der Erstellung des Datenbank Links im dabei angegebenen Connect String der Speicherort des Wallets angegeben werden.

Die Lösung sieht also wie folgt aus:

  1. Download des Credential-Pakets: Zunächst laden Sie die Zip-Datei mit dem Wallet auf den Rechner, wo Ihre On-Prem Datenbank läuft und packen diese Datei in einem beliebigen Verzeichnis aus. Beispielhaft in das Verzeichnis /home/oracle/Speicherort_des_Wallet .
  2. Einen passenden TNS-Alias erstellen: In dem heruntergeladenen Paket ist eine tnsnames.ora-Datei enthalten, in der die drei Datenbankservices (medium, low, high) beschrieben werden. Diese kopieren Sie in Ihre tnsnames.ora auf Ihren Client. Dann erzeugen Sie in Ihrer tnsnames.ora einen neuen TNS-Alias als Kopie eines der drei neuen Aliase. Fügen Sie für den neuen Alias den Speicherort des Wallets mittels der Syntax MY_WALLET_DIRECTORY hinzu.

Jetzt können Sie einen Datenbank Link anlegen, der diesen Connect String verwendet. Zum Beispiel wird

mydb_medium = 
 (description= (address=(protocol=tcps)(port=1522)(host=...oraclecloud.com))
               (connect_data=(service_name=mydb_medium.adwc.oraclecloud.com))
               (security=(ssl_server_cert_dn= ...) 
               ))

zu

mydb_medium_dblink = 
 (description= (address=(protocol=tcps)(port=1522)(host=...oraclecloud.com))
               (connect_data=(service_name=mydb_medium.adwc.oraclecloud.com))
               (security=(ssl_server_cert_dn= ...) (MY_WALLET_DIRECTORY = /home/oracle/Speicherort_des_Wallet)
               ))

Jetzt kann der Datenbank Link erzeugt werden. Im Beispiel soll der Zugriff auf Tabellen des Benutzers Scott ermöglicht werden, der im Autonomous Service angelegt wurde:

CREATE DATABASE LINK db_adwc_scott CONNECT TO scott IDENTIFIED BY das_password USING 'mydb_medium_dblink';
Database link created.

SELECT 'DB Link does work' from dual@db_adwc_scott;


'DBLINKDOESWORK'
-----------------
DB Link does work

Der Datenbank Link funktioniert.

 
Anwendung: Daten in einen Autonomous Database Service laden

Unter Verwendung von Datenbank Links können zum Beispiel Daten in einen Autonomous Database Service geladen werden. Wenn alle Daten eines Datenmodells übertragen werden sollen, wird eine Skriptdatei erzeugt, um die Datenbankobjekte zu generieren. Dazu käme ein Data Pump Export auf der On-Prem Seite infrage, wobei nicht die Daten exportiert werden, sondern nur das Skript zum Erstellen der Datenbankobjekte erzeugt wird (Parameter content=METADATA_ONLY).

Die Tabellen im Autonomous Database Service sollten mit abgeschalteten Constraints erstellt werden, damit der Datenimport unabhängig von Fremdschlüsselregeln erfolgen kann. Nach dem Laden der Daten können dann die Constraints aktiviert werden. Anschließend können Synonyme auf der On-Prem Seite derart angelegt werden, dass für jede Tabelle ein Synonym besteht, welches die Tabelle in der Autonomous Database einbindet. Danach werden die Daten per Insert übertragen. Die Kommandos dazu können recht einfach generiert werden mit:

set echo off feedback off heading off pagesize 40000
spool copy_data.sql
SELECT 'create synonym '||table_name||'_remote for '||table_name||'@db_adwc_scott;'
FROM dba_tables
WHERE owner='SCOTT';

SELECT 'insert into '||table_name||'_remote select * from '||owner||'.'||table_name||';'
FROM dba_tables
WHERE owner='SCOTT';

SELECT 'commit;' FROM dual;
spool off
sta copy_data.sql

Auf ähnliche Weise können natürlich auch nur einzelne Datenbereiche in den Autonomous Database Service geladen werden, indem dieses Verfahren zum Beispiel in einen ETL-Prozess eingebunden wird.

Alternativ dazu kann der TNS-Alias natürlich auch für Tools wie zum Beispiel SQL*Loader verwendet werden, z.B.

sqlldr scott/passwort@mydb_medium_dblink CONTROL=dept.ctl LOG=dept.log

wobei die verwendeten Dateien für die Parameter genauso genutzt werden, wie sonst auch.

 
Fazit

On-Prem Datenbanken können mit Oracle Autonomous Database Services recht einfach per Datenbank Link angebunden werden.

Weitere Informationen


 

Zurück zum Anfang des Artikels

Zurück zur Community-Seite
 

Visit the Oracle Blog

 

Contact Us

Oracle

Integrated Cloud Applications & Platform Services