Als PDF Downloaden!

Werbung
Tipps & Tricks: März 2009
Bereich:
DBA, PL/SQL, SQL
Erstellung:
03/2009 MM
Versionsinfo:
getestet mit 10.2.0.4, 11.1.0.6
Letzte Überarbeitung:
05/2009 MM
DBMS_FILE_TRANSFER zum Kopieren von Binär-Dateien
Sie wollten schon häufiger Datenbankdateien von einem Server A auf den Server B kopieren und waren aber
gerade nicht in der Lage sich lokal mit einem der Server zu verbinden und anschließend den anderen zu
mounten? Oder es war Ihnen schlichtweg zu umständlich? Dann haben wir hier vielleicht eine ganz praktische
Lösung für Sie.
Mit Version 10g stellt Oracle ein neues Package zur Verfügung, mit dessen Hilfe sich sehr einfach und
komfortabel Binär-Dateien zwischen Datenbank-Servern kopieren lassen. DBMS_FILE_TRANSFER als API
unterstützt die folgenden drei Prozeduren:
COPY_FILE
GET_FILE
PUT_FILE
Nützliches rund um DBMS_FILE_TRANSFER
Für einen erfolgreichen Kopiervorgang mittels DBMS_FILE_TRANSFER müssen Sie sich folgende Punkte
bewusst machen:
Sowohl die Quell-Datenbank, als auch die Ziel-Datenbank müssen sich in der OPEN-Phase befinden.
Der Oracle Benutzer benötigt das Leserecht auf das Quellverzeichnis und das Schreibrecht auf das
Zielverzeichnis.
Die Größe der zu kopierenden Dateien muss einem Vielfachen von 512 Bytes entsprechen und darf
höchstens zwei Terabytes betragen.
Kopiervorgänge großer Dateien können in der View V$SESSION_LONGOPS überwacht werden.
Die zu verwendenden Directories für Quell- und Zielverzeichnis müssen bereits existieren, während die
Datei im Zielverzeichnis noch nicht bestehen darf.
COPY_FILE
Mit der COPY_FILE-Prozedur kopieren Sie eine Binär-Datei innerhalb desselben Servers. Dabei kann sich
sowohl das Quellverzeichnis wie auch das Zielverzeichnis entweder im lokalen Dateisystem oder auf einer ASM
Disk Group befinden. Soll eine Datei innerhalb des lokalen Dateisystems kopiert werden, kann es sich um eine
beliebige Binär-Datei handeln. Stellt eines der Verzeichnisse eine ASM Disk Group dar, können nur Datenbank
relevante Dateien kopiert werden, wie z.B. Daten-, Control- oder Logdateien.
Beispiel:
Muniqsoft GmbH
Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40
IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0
Seite 1 von 3
Die Datendatei USERS01.DBF soll kopiert werden. Dazu ist es empfehlenswert, den Tablespace OFFLINE oder
READ ONLY zu setzen, damit während des Kopiervorgangs keinerlei Änderungen an der Datei vorgenommen
werden können.
CREATE OR REPLACE DIRECTORY db_source_dir AS
'c:\oracle\product\oradata\o10g';
CREATE OR REPLACE DIRECTORY db_target_dir AS
'e:\oracle\oradata\o10g';
ALTER TABLESPACE users READ ONLY;
BEGIN
DBMS_FILE_TRANSFER.COPY_FILE (
source_directory_object
=> 'DB_SOURCE_DIR',
source_file_name
=> 'USERS01.DBF',
destination_directory_object => 'DB_TARGET_DIR',
destination_file_name
=> 'USERS01.DBF');
END;
/
ALTER TABLESPACE users READ WRITE;
GET_FILE
Die GET_FILE-Prozedur ermöglicht es Ihnen, eine Binär-Datei von einem remote Server ins lokale Dateisystem
oder auf eine ASM Disk Group zu kopieren. Dazu muss ein Database Link zur remote (Quell-)Datenbank
vorhanden sein bzw. erzeugt werden (an den Eintrag in der TNSNAMES.ORA denken, falls Sie nicht mit Easy
Connect arbeiten).
Beispiel:
Die Exportdatei EXPDAT.DMP soll von einem remote Rechner ins lokale Dateisystem kopiert werden. In der
remote Datenbank wird zunächst das Directory für das Quellverzeichnis erzeugt.
CONNECT system@<remote_db>
CREATE OR REPLACE DIRECTORY db_source_dir AS
'c:\oracle\admin\o10g\dpdump';
CONNECT system@<lokal_db>
CREATE OR REPLACE DIRECTORY db_target_dir AS 'c:\dpdump';
CREATE DATABASE LINK s01
CONNECT TO system IDENTIFIED BY <pwd> USING 's01';
BEGIN
DBMS_FILE_TRANSFER.GET_FILE (
source_directory_object
=> 'DB_SOURCE_DIR',
source_file_name
=> 'EXPDAT.DMP',
source_database
=> 'S01',
destination_directory_object => 'DB_TARGET_DIR',
destination_file_name
=> 'EXPDAT.DMP');
END;
/
Muniqsoft GmbH
Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40
IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0
Seite 2 von 3
PUT_FILE
Als Gegenstück zu GET_FILE können Sie mit der PUT_FILE-Prozedur eine Binär-Datei vom lokalen Server (aus
dem Dateisystem oder aus ASM) zu einem remote Server ins dortige Dateisystem kopieren. Dazu muss wieder
ein Database Link zur remote (Ziel-) Datenbank vorhanden sein bzw. erzeugt werden (an den Eintrag in der
TNSNAMES.ORA denken, falls Sie nicht mit Easy Connect arbeiten).
Beispiel:
Die über ASM verwaltete SPFILE-Datei soll vom lokalen Rechner ins remote Dateisystem kopiert werden. In der
remote Datenbank wird wie gehabt - das Directory für das Zielverzeichnis erzeugt.
CONNECT system@<remote_db>
CREATE OR REPLACE DIRECTORY db_target_dir AS
'c:\oracle\product\10.2.0\db_1\database';
CONNECT system@<lokal_db>
CREATE OR REPLACE DIRECTORY db_source_dir AS '+DG1/myasm';
CREATE DATABASE LINK s01
CONNECT TO system IDENTIFIED BY <pwd> USING 's01';
BEGIN
DBMS_FILE_TRANSFER.PUT_FILE (
source_directory_object
=> 'DB_SOURCE_DIR',
source_file_name
=> 'spfilemyasm.ora',
destination_directory_object => 'DB_TARGET_DIR',
destination_file_name
=> 'spfile.ora',
destination_database
=> 'S01');
END;
/
Abschlussbemerkung
Natürlich müssen Sie einiges an Vorarbeit leisten, damit DBMS_FILE_TRANSFER genutzt werden kann. Haben
Sie sich aber erst einmal die Directories und Database Links erzeugt sowie die notwendigen Berechtigungen
vergeben, ist der Aufruf eine erfreulich unkomplizierte Geschichte. Besonders die Möglichkeit auch ASM Disk
Groups sowohl als Quell- wie auch als Zielverzeichnis ansprechen zu können, macht das Package sehr nützlich.
Bedenken Sie, dass DBMS_FILE_TRANSFER keine Umlaute in Dateinamen unterstützt und nur für
Datenbanken, die sich in der OPEN-Phase befinden nutzbar ist.
Das Package sollte nicht zum Erzeugen von Online Backups genutzt werden, da während des Kopiervorgangs
Inkonsistenzen entstehen können. Diese können zwar in Verbindung mit den archivierten Redo-Log-Dateien
wieder bereinigt werden, jedoch wird empfohlen, die Dateien vor dem Kopieren OFFLINE oder wenigstens auf
READ ONLY zu setzen.
Muniqsoft GmbH
Schulungszentrum, Grünwalder Weg 13a, 82008 Unterhaching, Tel. 089 / 679090-40
IT-Consulting & Support, Witneystraße 1, 82008 Unterhaching, Tel. 089 / 6228 6789-0
Seite 3 von 3
Herunterladen