SlideShare ist ein Scribd-Unternehmen logo
www.christian-gohmann.de@CGohmannDE
Datentransfer mit Oracle Tools
Was ist möglich?
Christian Gohmann
About me…
Christian Gohmann
• Senior Consultant at Trivadis GmbH, Düsseldorf
• Instructor since 2014
• O-AI (Oracle Architecture and Internals)
• O-AI-DBA (Oracle Architecture and Internals for DBAs)
• Tool Owner of TVD-Backup
• Experiences with Oracle since 2006 (8i – 19c)
• Architecture, Installation & Configuration
• High Availability Solutions (RAC, Data Guard)
• Migration Projects
• Backup & Recovery (RMAN, Data Pump)
• Blog: http://www.christian-gohmann.de
@CGohmannDE
Agenda
1. Einleitung
2. Data Pump
3. SQL*Loader
4. SQL Developer
5. SQL*Plus / SQLcl
6. External Tables
Einleitung
Zeichenkodierung 1/3
• Zeichensatz wird beim Anlegen der Datenbank festgelegt
• Legt fest, welche Zeichen in der Datenbank gespeichert werden können
• Heutzutage wird immer häufiger der Unicode Zeichensatz (z.B. AL32UTF8) eingesetzt
• Zeichen müssen zwischen Client und Datenbank korrekt konvertiert werden
• Anderenfalls kommt es zu logischer Datenkorruption
• Bei identischen Zeichensatz findet keine Validierung statt
• Auf Client-Seite muss die Umgebungsvariable NLS_LANG korrekt gesetzt sein
• Legt fest welchen Zeichensatz der Client verwendet (z.B. WE8MSWIN1252)
• Standard Zeichensatz ist US7ASCII
$> set/export NLS_LANG=GERMAN_GERMANY.WE8MSWIN1252
Unter Windows kann NLS_LANG auch über einen Registry Key unter dem Zweig
HKEY_LOCAL_MACHINESOFTWAREORACLE<Home Name> gesetzt werden
Zeichenkodierung 2/3
• Bei der Verarbeitung einer Datei muss NLS_LANG ggf. anders gesetzt werden
• Zeichensatz muss mit dem Kodierung der Datei übereinstimmen
• Vor dem Einlesen einer Datei immer die Kodierung überprüfen
$> file data_unicode.txt
data_unicode.txt: UTF-8 Unicode text, with no line terminators
$> export NLS_LANG=GERMAN_GERMANY.AL32UTF8
$> file data_ansi.txt
data_ansi.txt: ISO-8859 text, with CRLF line terminators
$> export NLS_LANG=GERMAN_GERMANY.WE8ISO8859P15
Unter Windows kann die Kodierung einer Datei mit externen Tools, wie zum Beispiel
Notepad++ ausgelesen werden.
Windows End-
of-Line Marker
P15 unterstützt
das €-Zeichen
Zeichenkodierung 3/3
• Für die Überprüfung, ob die Daten korrekt in der Datenbank gespeichert wurden, sollte ein
Unicode Client, wie zum Beispiel der SQL Developer verwendet werden
Die aktuelle Version des SQL Developers kann über das Oracle Technology Network
(https://bit.ly/2LM1UQF) bezogen werden.
Data Pump
Allgemeines
• Eingeführt mit Oracle 10g als Nachfolger des Export/Import Utility
• Server-basiertes Werkzeug zum Entladen und Laden von Metadaten und Daten
• Verwendet intern das Datenbank-Jobsystem
• Ist vollständig in PL/SQL geschrieben (DBMS_DATAPUMP, DBMS_METADATA)
• Legacy Mode zur Verwendung der alten Export/Import Skripte
• Nur für den Austausch von Daten zwischen Oracle Datenbanken geeignet
• Speicherung der Daten erfolgt in dem proprietären Stream Format der Direct Path API
• Alternativ kann ein Datenbank-Link zwischen Quelle und Ziel verwendet werden
• Dumpfile wird auf dem Server abgelegt (DIRECTORY Objekt)
• Nicht kompatibel mit den Dumpfiles des Export/Import Utility
Die Client Werkzeuge expdp und impdp dienen lediglich der Interaktion mit der Data
Pump API.
Data Pump Export/Import Modi
• Full (FULL=YES)
• Entladen der vollständigen Datenbank bzw. Laden aller Objekte des Dumpfiles
• Tablespace (TABLESPACES=CRM_DATA,ERP_DATA)
• Entladen/Laden der Objekte von einem oder mehreren Tablespaces
• Transportable Tablespace (TRANSPORT_TABLESPACES=CRM_DATA,ERP_DATA)
• Entladen/Laden der Metadaten der Objekte der zu transportierenden Tablespaces
• Schema (Default) (SCHEMAS=USER1,USER2,…)
• Entladen/Laden vollständiger Schemas
• Table (TABLES=SCOTT.EMP,SCOTT.DEPT)
• Entladen/Laden von einzelnen Tabellen oder Partitionen
Objekte von System-Schemas, wie zum Beispiel SYS, ORDSYS oder MDSYS werden
nicht exportiert.
Beispiele
• Konsistenter, vollständiger Export der Datenbank
• Benutzer benötigt die Rolle EXP_FULL_DATABASE (z.B. SYSTEM)
• Paralleler Export nur mit der Enterprise Edition nöglich
• Export des Schemas SCOTT, ohne Objekt-Statistiken
• Generierung SQL-Skript für ein bestehndes Dumpfile
$> expdp system DIRECTORY=DATA_PUMP_DIR DUMPFILE=expdp_scott.dmp 
SCHEMAS=SCOTT LOGFILE=expdp_scott.log EXCLUDE=STATISTICS
$> expdp system DIRECTORY=DATA_PUMP_DIR DUMPFILE=expdp_full_%U.dmp 
LOGFILE=expdp_full.log FULL=YES FLASHBACK_TIME=SYSTIMESTAMP PARALLEL=2
$> impdp system DIRECTORY=DATA_PUMP_DIR DUMPFILE=expdp_scott.dmp 
SQLFILE=scott.sql SCHEMAS=SCOTT
Auf Undo
Retention achten
Reduzierung der Spaltenanzahl und Datenmenge
• Bei einem Tabellen Export wird immer die vollständige Tabelle, inkl. aller Spalten exportiert.
• Lediglich die Datenmenge kann durch Angabe des QUERY Parameters eingeschränkt
werden
• Ab Oracle 12c kann eine View definiert werden, die dann als eigenständige Tabelle
exportiert wird
• Erlaubt das Ausblenden sensibler/nicht benötigter Spalten
• Erlaubt die Ergebnismenge einer komplexen Abfrage (z.B. Joins) zu exportieren
• Intern wird eine „Vorlagen-Tabellen“ mit den Spalten der View, aber ohne Daten erstellt
$> expdp scott/tiger DIRECTORY=DATA_PUMP_DIR DUMPFILE=expdp_scott.dmp 
VIEWS_AS_TABLES=V_EMP_DEPT10 NOLOGFILE=YES
$> expdp scott/tiger DIRECTORY=DATA_PUMP_DIR DUMPFILE=expdp_scott.dmp 
TABLES=EMP QUERY=EMP:"WHERE deptno = 10" NOLOGFILE=YES
Manipulation von Metadaten und Daten 1/2
• Data Pump erlaubt das Manipulieren der als XML gespeicherten Metadaten
• Parameter: REMAP_TABLESPACE, REMAP_SCHEMA, REMAP_TABLE, TRANSFORM
• Zusätzlich wird die Manipulation von Daten mittels REMAP_DATA ermöglicht
• Vor dem Schreiben der Daten wird eine Funktion eines PL/SQL Pakets aufgerufen
• Wird auf Spaltenebene definiert
$> impdp scott/tiger DIRECTORY=DATA_PUMP_DIR DUMPFILE=expdp_scott.dmp 
TABLES=EMP REMAP_DATA=EMP.ENAME:DATA_TRANSFORM.HIDE_NAME NOLOGFILE=YES
$> impdp scott/tiger DIRECTORY=DATA_PUMP_DIR DUMPFILE=expdp_scott.dmp 
TABLES=EMP REMAP_TABLESPACE=SCOTT_DATA:EMP_DATA TRANSFORM="PCTSPACE:20" 
NOLOGFILE=YES
Manipulation von Metadaten und Daten 2/2
• Beispiel: PL/SQL Funktion, die den Namen auf den ersten Buchstaben kürzt
Die PL/SQL Funktion sollte kein Rollback oder Commit auslösen.
SQL> CREATE OR REPLACE PACKAGE DATA_TRANSFORM IS
FUNCTION HIDE_NAME (name IN VARCHAR2) RETURN VARCHAR2;
END DATA_TRANSFORM;
/
SQL> CREATE OR REPLACE PACKAGE BODY DATA_TRANSFORM IS
FUNCTION HIDE_NAME (name IN VARCHAR2) RETURN VARCHAR2 IS
BEGIN
RETURN SUBSTR(name, 0, 1) || '.';
END HIDE_NAME;
END DATA_TRANSFORM;
/
Data Pump API – Schema Export
DECLARE
h1 number;
begin
h1 := DBMS_DATAPUMP.OPEN (operation => 'EXPORT', job_mode => 'SCHEMA', job_name => 'EXP_SD_1712-12_17_24‘,
version => '12.2');
DBMS_DATAPUMP.SET_PARALLEL(handle => h1, degree => 1);
DBMS_DATAPUMP.ADD_FILE(handle => h1, filename => 'expdp_scott-'||TO_CHAR(SYSDATE,'hh24_mi_ss')||'.log‘,
directory => 'DATA_PUMP_DIR', filetype => 3);
DBMS_DATAPUMP.SET_PARAMETER(handle => h1, name => 'KEEP_MASTER', value => 1);
DBMS_DATAPUMP.METADATA_FILTER(handle => h1, name => 'SCHEMA_EXPR', value => 'IN(''SCOTT'')');
DBMS_DATAPUMP.ADD_FILE(handle => h1, filename => 'expdp_scott-'||TO_CHAR(SYSDATE,'hh24_mi_ss')||'.dmp‘,
directory => 'DATA_PUMP_DIR', filesize => '500M', filetype => 1);
DBMS_DATAPUMP.SET_PARAMETER(handle => h1, name => 'INCLUDE_METADATA', value => 1);
DBMS_DATAPUMP.DATA_FILTER(handle => h1, name => 'SUBQUERY', value => 'WHERE DEPTNO = 10', table_name => 'EMP‘,
schema_name => 'SCOTT');
DBMS_DATAPUMP.SET_PARAMETER(handle => h1, name => 'FLASHBACK_SCN', value => DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER);
DBMS_DATAPUMP.SET_PARAMETER(handle => h1, name => 'DATA_ACCESS_METHOD', value => 'AUTOMATIC');
DBMS_DATAPUMP.SET_PARAMETER(handle => h1, name => 'ESTIMATE', value => 'BLOCKS');
DBMS_DATAPUMP.START_JOB(handle => h1, skip_current => 0, abort_step => 0);
DBMS_DATAPUMP.DETACH(handle => h1);
END;
/
Liste der Schemas
Data Pump Export Wizard 1/8
Data Pump Export Wizard 2/8
Data Pump Export Wizard 3/8
Data Pump Export Wizard 4/8
Data Pump Export Wizard 5/8
Data Pump Export Wizard 6/8
Data Pump Export Wizard 7/8
Data Pump Export Wizard 8/8
SQL Developer
Allgemeines
• Ergebnisse von SQL Abfragen können direkt im SQL Worksheet exportiert werden
• Über das Kontextmenu Export im Query Result Reiter zu finden
• Unterstützte Formate:
• CSV, DELIMITED, HTML, JSON, T2, TSV, XML
• Microsoft Excel, PDF
• INSERT, FIXED, LOADER
• Externe Textdateien (CSV, DELIMITED, TSV) können über den Import Wizard geladen werden
• Aufruf über das Kontextmenü (Import Data…) einer Tabelle im Connections Browser
• Kann verwendet werden, um ein SQL*Loader Controlfile zu generieren
Export Wizard 1/2
Export Wizard 2/2
Import Wizard 1/5
Vorschau der Daten, bei
Problemen Encoding ändern
Import Wizard 2/5
Import Wizard 3/5
Import Wizard 4/5
Import Wizard 5/5
SQL*Loader
Allgemeines
• Laden von externen Dateien in die Datenbank
• Die flexible Parsing Engine erlaubt das Laden von nahezu beliebig formatierten Dateien
• Inklusive dem Laden von XML Dateien
• Unterstützung unterschiedlicher Load-Methoden
• Direct Path: Formatierte Oracle Blöcke werden direkt in die Datafiles geschrieben
(verbesserte Performance)
• Conventional Path: Ausführung von klassischen INSERT Anweisungen in Kombination
mit einem Bind-Array-Buffer
• Tabellen werden nicht automatisch durch SQL*Loader erstellt
• Konfiguration des SQL*Loader erfolgt in der Regel über ein Control File
• Für einfache Ladevorgänge kann der SQL*Loader Express Mode verwendet werden
Der SQL*Loader kann auch in den Instant Client integriert werden (Paket: Tools).
SQL*Loader Control File
$> vi emp.ctl
LOAD DATA
INFILE 'emp*.csv‘ BADFILE 'emp.bad' DISCARDFILE 'emp.dis'
APPEND
INTO TABLE EMP
WHEN deptno = '10'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
(
EMPNO ":EMPNO + 1000",
ENAME "UPPER(:ename)",
JOB,
MGR,
HIREDATE DATE "dd.mm.yyyy",
SAL,
COMM,
DEPTNO
)
$> sqlldr scott/tiger CONTROL=emp.ctl
Die vom SQL*Loader generierten BADFILE (fehlerhafte Zeilen) und DISCARDFILE
(aussortierte Zeilen) Dateien können wiederum als INFILE verwendet werden.
Eingabedateien, Verwendung
von Wildcards ab 12c möglich
Filterung von Datensätzen
Manipulation der Daten
• Einfache Textdatei zum Steuern
eines SQL*Loader Ladevorganges
• Unterteilt in drei große Bereiche
• Sitzungsinformationen
• Tabellen- und
Feldinformationen
• Eingabedaten (BEGINDATA,
optional)
• Kommentare können mit --
eingeleitet werden
• Escape-Zeichen:  (Backslash)
SQL*Loader Express Mode
• Verfügbar ab Oracle 12c Release 1
• CSV Dateien können direkt in die dazugehörige Tabelle geladen werden
• Der Name der Eingabedatei entspricht dem Namen der Zieltabelle
• Im Hintergrund wird automatisch ein DIRECTORY Objekt angelegt
• Existiert bereits ein entsprechendes Objekt, so wird dies genommen
• Für das Anlegen benötigt der Benutzer das CREATE ANY DIRECTORY Privileg
• Beispiel: Laden von Datensätzen in die Tabelle EMP
$> vi EMP.dat
9999,GOHMANN,CEO,,01-JAN-70,10000,,10
$> sqlldr scott/tiger TABLE=EMP
Bei größeren Eingabedateien empfiehlt sich die Aktivierung der Resumable Operation
(resumable=yes), damit Ladevorgänge nicht direkt abbrechen, wenn ein Tablespace
vollgelaufen ist.
SQL*Plus / SQLcl
Generierung einer CSV Ausgabe mit SQL*Plus 1/3
• Verfügbar ab Oracle 12c Release 2
• Ausgabe der Ergebnismenge einer Abfrage als Comma Separated Values (CSV)
• Änderung des Trennzeichens (DELIMITER) und ob Anführungszeichen bei Zeichenketten
(QUOTE) verwendet werden sollen ist möglich
• Das verwendete Trennzeichen wird in Zeichenketten nicht escaped
SQL> SET MARKUP CSV ON DELIMITER ";" QUOTE ON
SQL> SELECT * FROM scott.emp WHERE ename = 'SCOTT';
"EMPNO";"ENAME";"JOB";"MGR";"HIREDATE";"SAL";"COMM";"DEPTNO"
7788;"SCOTT";"ANALYST";7566;"19-APR-87";3000;;20
Die Generierung einer HTML Ausgabe gab es bereits in früheren Versionen von
SQL*Plus.
Generierung einer CSV Ausgabe mit SQL*Plus 2/3
• Formatierung von Spalten über COLUMN Kommandos ist möglich
• COLUMN FORMAT
• COLUMN HEADING
• COLUMN NULL
SQL> COLUMN empno FORMAT 000009
SQL> COLUMN ename HEADING emp_name
SQL> COLUMN comm NULL 'N/A'
SQL> SELECT * FROM scott.emp WHERE ename = 'SCOTT';
"EMPNO";"EMP_NAME";"JOB";"MGR";"HIREDATE";"SAL";"COMM";"DEPTNO"
007788;"SCOTT";"ANALYST";7566;"19-APR-87";3000;N/A;20
Weitere COLUMN Kommandos, wie z.B. NOPRINT können (negative) Auswirkungen auf
das Resultat haben.
Generierung einer CSV Ausgabe mit SQL*Plus 3/3
• Ausgabe als CSV kann direkt beim Starten von SQL*Plus aktiviert werden
• Praktisch für die automatisierte Generierung von CSV Dateien
• Bestehende SQL Skripte müssen nicht erweitert werden
• Leerzeilen können z.B. mit sed entfernt werden
• Ggf. bei geänderten glogin.sql weitere Zeilen entfernen
• Die Ausgabe als HTML kann analog dazu aktiviert werden
$> sqlplus -S -M "CSV ON DELIMITER ';'" scott/tiger @select_data.sql | sed '/^$/d'
Durch Verwendung des -S Parameters wird SQL*Plus im Silent Mode verwendet.
Wechseln der Formatierung in SQLcl
• SQLcl erlaubt es mit SET SQLFORMAT das Format der Ausgabe zu ändern
• Folgende Formate werden unterstützt:
• CSV, HTML, JSON, XML
• ANSICONSOLE, INSERT, LOADER, FIXED, DELIMITED
• Die Angabe des Formats kann über ein spezielles Kommentar angegeben werden
• Zusätzlich besteht die Möglichkeit eigene Formate zu definieren (Java Script)
• Siehe https://www.thatjeffsmith.com/archive/2016/12/custom-sqlformats-with-sqlcl/
SQL> SET SQLFORMAT csv
SQL> SELECT /*csv*/ * FROM emp;
SET SQLFORMAT und das spezielle Kommentar können im SQL Developer ebenfalls
verwendet werden.
External Tables
Allgemeines
• Spezieller Objekttyp, der lesenden Zugriff auf Dateien außerhalb der Datenbank erlaubt
• Manipulation der Daten ist nicht möglich, entladen von Daten dagegen schon
• Dateien können nahezu beliebig formatiert sein
• Es wird eine Untermenge der Funktionalitäten des SQL*Loaders verwendet
• Lediglich Metainformationen zu der Tabelle werden im Data Dictionary abgelegt
• View: DBA_EXTERNAL_TABLES
• Ab Oracle 18c können Inline External Tables verwendet werden
• Kann wie eine „normale“ Tabelle in SQL Anweisungen verwendet werden
• Zugriff auf die Daten erfolgt über einen Access Driver, die unterschiedliche Funktionalitäten
bereitstellen
Objektstatistiken sollten auch für External Tables mittels DBMS_STATS gesammelt
werden.
SQL> SELECT * FROM EXTERNAL(...);
Access Drivers
ORACLE_LOADER (Default)
• Lesender Zugriff auf Textdateien außerhalb der Datenbank
ORACLE_DATAPUMP
• Entladen der Ergebnismenge einer Abfrage in ein binäres Dumpfile
• Zugriff auf Inhalte von binären Dumpfiles
• Kann nicht von Data Pump gelesen werden
ORACLE_HIVE
• Ab Oracle 12c Release 2
• Lesender Zugriff auf Daten einer Apache Hive Datenquelle
ORACLE_HDFS
• ab Oracle 12c Release 2
• Lesender Zugriff auf Dateien in einem Hadoop Distributed File System (HDFS)
Preprocessor
• Erlaubt das automatische Ausführen eines Betriebssystembefehls/-skriptes
• Nicht verfügbar, wenn Database Vault aktiv ist
• Parameter an einen Befehl können nicht übergeben werden
• Z.B.: Entpacken der gezippten Eingabedateien, Manipulation der Inhalte
• Steht nur für den Access Driver ORACLE_LOADER zur Verfügung
• Es werden EXECUTE Privilegien für das DIRECTORY Objekt benötigt
• ACHTUNG: Der Benutzer kann dann jedes Skript in dem Verzeichnis ausführen
• Unter Windows sollte die erste Anweisung in einem Skript @echo off sein
• Anderenfalls würden die ausgeführten Befehle als Eingabedaten verwendet werden
SQL> GRANT EXECUTE ON DIRECTORY data_dir TO SCOTT;
Ein eigenes Verzeichnis für die ausführbaren Preprocessor Dateien verwendet.
Partitionierte External Tables
• Ab Oracle 12c Release 2 können partitionierte External Tables angelegt werden
• Eine Partition entspricht einer oder mehrerer Eingabedateien
• Bis auf Ebene Subpartition möglich
• Korrektheit der Daten gegenüber dem Partition Key wird nicht geprüft
• DBA ist verantwortlich für die Konsistenz der Daten
• Wird von allen Access Drivern unterstützt
• Optimizer kann z.B. Partition Pruning einsetzen, um die Performance der Abfrage zu
verbessern
ORACLE_LOADER Beispiel
SQL> CREATE DIRECTORY ext_data_dir AS '/data';
SQL> CREATE TABLE emp_xt4 (
empno NUMBER(4),
ename VARCHAR2(10),
deptno NUMBER(2)
) ORGANIZATION EXTERNAL (
TYPE ORACLE_LOADER
DEFAULT DIRECTORY ext_data_dir
ACCESS PARAMETERS (
RECORDS DELIMITED BY NEWLINE
PREPROCESSOR 'unzip_emp.sh'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
))
REJECT LIMIT UNLIMITED
PARTITION BY LIST (deptno)
(PARTITION emp_dept10 VALUES ('10') LOCATION ('emp_dept10a.csv’, 'emp_dept10b.csv'),
PARTITION emp_dept20 VALUES ('20') LOCATION ('emp_dept20.csv'));
Preprocessor
Partitionierung
Entladen von Daten
• Access Driver ORACLE_DATAPUMP erlaubt das Entladen von Daten in eine externe Datei
• Daten werden in einem binären, proprietären Format (Dumpfile) gespeichert
• Kann wiederum nur mittels ORACLE_DATAPUMP eingelesen werden
• Parallelisierung ist durch Angabe von PARALLEL mit mehreren Dumpfiles möglich
Das Dumpfile ist plattform- und betriebssystemunbhängig.
SQL> CREATE TABLE emp_xt ORGANIZATION EXTERNAL
(TYPE ORACLE_DATAPUMP DEFAULT DIRECTORY data_dir LOCATION ('ext_xt.dmp'))
AS SELECT empno, ename FROM emp WHERE deptno = 10;
SQL> CREATE TABLE emp_deptno10_xt (empno NUMBER(4), ename VARCHAR2(10))
ORGANIZATION EXTERNAL
(TYPE ORACLE_DATAPUMP DEFAULT DIRECTORY data_dir LOCATION ('ext_xt.dmp'));
Further Information
SQL Developer Documentation
https://docs.oracle.com/cd/E12151_01/index.htm
Oracle Utilities Guide 19c
https://docs.oracle.com/en/database/oracle/oracle-database/19/sutil/index.html
My Oracle Support
https://support.oracle.com
Questions and answers..
Christian Gohmann
Senior Consultant
Tel. +49-211-58 6664 702
christian.gohmann@trivadis.com
@CGohmannDE

Weitere ähnliche Inhalte

Was ist angesagt?

UKOUG, Oracle Transaction Locks
UKOUG, Oracle Transaction LocksUKOUG, Oracle Transaction Locks
UKOUG, Oracle Transaction Locks
Kyle Hailey
 
Getting started with Apache Camel presentation at BarcelonaJUG, january 2014
Getting started with Apache Camel presentation at BarcelonaJUG, january 2014Getting started with Apache Camel presentation at BarcelonaJUG, january 2014
Getting started with Apache Camel presentation at BarcelonaJUG, january 2014
Claus Ibsen
 
Solr Presentation
Solr PresentationSolr Presentation
Solr Presentation
Gaurav Verma
 
AWR and ASH Deep Dive
AWR and ASH Deep DiveAWR and ASH Deep Dive
AWR and ASH Deep Dive
Kellyn Pot'Vin-Gorman
 
Backup And Recovery
Backup And RecoveryBackup And Recovery
Backup And Recovery
raghu_designer
 
Getting optimal performance from oracle e-business suite presentation
Getting optimal performance from oracle e-business suite presentationGetting optimal performance from oracle e-business suite presentation
Getting optimal performance from oracle e-business suite presentation
Berry Clemens
 
Oracle R12 EBS Performance Tuning
Oracle R12 EBS Performance TuningOracle R12 EBS Performance Tuning
Oracle R12 EBS Performance Tuning
Scott Jenner
 
Oracle db performance tuning
Oracle db performance tuningOracle db performance tuning
Oracle db performance tuning
Simon Huang
 
Ash and awr deep dive hotsos
Ash and awr deep dive hotsosAsh and awr deep dive hotsos
Ash and awr deep dive hotsos
Kellyn Pot'Vin-Gorman
 
Oracle architecture ppt
Oracle architecture pptOracle architecture ppt
Oracle architecture ppt
Deepak Shetty
 
Oracle backup and recovery
Oracle backup and recoveryOracle backup and recovery
Oracle backup and recovery
Yogiji Creations
 
Oracle 10g Performance: chapter 02 aas
Oracle 10g Performance: chapter 02 aasOracle 10g Performance: chapter 02 aas
Oracle 10g Performance: chapter 02 aas
Kyle Hailey
 
Performance Tuning With Oracle ASH and AWR. Part 1 How And What
Performance Tuning With Oracle ASH and AWR. Part 1 How And WhatPerformance Tuning With Oracle ASH and AWR. Part 1 How And What
Performance Tuning With Oracle ASH and AWR. Part 1 How And What
udaymoogala
 
Oracle Database performance tuning using oratop
Oracle Database performance tuning using oratopOracle Database performance tuning using oratop
Oracle Database performance tuning using oratop
Sandesh Rao
 
Proxysql use case scenarios fosdem17
Proxysql use case scenarios    fosdem17Proxysql use case scenarios    fosdem17
Proxysql use case scenarios fosdem17
Alkin Tezuysal
 
Oracle SQL Performance Tuning and Optimization v26 chapter 1
Oracle SQL Performance Tuning and Optimization v26 chapter 1Oracle SQL Performance Tuning and Optimization v26 chapter 1
Oracle SQL Performance Tuning and Optimization v26 chapter 1
Kevin Meade
 
Your tuning arsenal: AWR, ADDM, ASH, Metrics and Advisors
Your tuning arsenal: AWR, ADDM, ASH, Metrics and AdvisorsYour tuning arsenal: AWR, ADDM, ASH, Metrics and Advisors
Your tuning arsenal: AWR, ADDM, ASH, Metrics and Advisors
John Kanagaraj
 
OOW15 - case study: oracle application management suite for oracle e-business...
OOW15 - case study: oracle application management suite for oracle e-business...OOW15 - case study: oracle application management suite for oracle e-business...
OOW15 - case study: oracle application management suite for oracle e-business...
vasuballa
 
Implementing Certificate Based Authentication for HCL Traveler Access - Enga...
 Implementing Certificate Based Authentication for HCL Traveler Access - Enga... Implementing Certificate Based Authentication for HCL Traveler Access - Enga...
Implementing Certificate Based Authentication for HCL Traveler Access - Enga...
Milan Matejic
 
Ash masters : advanced ash analytics on Oracle
Ash masters : advanced ash analytics on Oracle Ash masters : advanced ash analytics on Oracle
Ash masters : advanced ash analytics on Oracle
Kyle Hailey
 

Was ist angesagt? (20)

UKOUG, Oracle Transaction Locks
UKOUG, Oracle Transaction LocksUKOUG, Oracle Transaction Locks
UKOUG, Oracle Transaction Locks
 
Getting started with Apache Camel presentation at BarcelonaJUG, january 2014
Getting started with Apache Camel presentation at BarcelonaJUG, january 2014Getting started with Apache Camel presentation at BarcelonaJUG, january 2014
Getting started with Apache Camel presentation at BarcelonaJUG, january 2014
 
Solr Presentation
Solr PresentationSolr Presentation
Solr Presentation
 
AWR and ASH Deep Dive
AWR and ASH Deep DiveAWR and ASH Deep Dive
AWR and ASH Deep Dive
 
Backup And Recovery
Backup And RecoveryBackup And Recovery
Backup And Recovery
 
Getting optimal performance from oracle e-business suite presentation
Getting optimal performance from oracle e-business suite presentationGetting optimal performance from oracle e-business suite presentation
Getting optimal performance from oracle e-business suite presentation
 
Oracle R12 EBS Performance Tuning
Oracle R12 EBS Performance TuningOracle R12 EBS Performance Tuning
Oracle R12 EBS Performance Tuning
 
Oracle db performance tuning
Oracle db performance tuningOracle db performance tuning
Oracle db performance tuning
 
Ash and awr deep dive hotsos
Ash and awr deep dive hotsosAsh and awr deep dive hotsos
Ash and awr deep dive hotsos
 
Oracle architecture ppt
Oracle architecture pptOracle architecture ppt
Oracle architecture ppt
 
Oracle backup and recovery
Oracle backup and recoveryOracle backup and recovery
Oracle backup and recovery
 
Oracle 10g Performance: chapter 02 aas
Oracle 10g Performance: chapter 02 aasOracle 10g Performance: chapter 02 aas
Oracle 10g Performance: chapter 02 aas
 
Performance Tuning With Oracle ASH and AWR. Part 1 How And What
Performance Tuning With Oracle ASH and AWR. Part 1 How And WhatPerformance Tuning With Oracle ASH and AWR. Part 1 How And What
Performance Tuning With Oracle ASH and AWR. Part 1 How And What
 
Oracle Database performance tuning using oratop
Oracle Database performance tuning using oratopOracle Database performance tuning using oratop
Oracle Database performance tuning using oratop
 
Proxysql use case scenarios fosdem17
Proxysql use case scenarios    fosdem17Proxysql use case scenarios    fosdem17
Proxysql use case scenarios fosdem17
 
Oracle SQL Performance Tuning and Optimization v26 chapter 1
Oracle SQL Performance Tuning and Optimization v26 chapter 1Oracle SQL Performance Tuning and Optimization v26 chapter 1
Oracle SQL Performance Tuning and Optimization v26 chapter 1
 
Your tuning arsenal: AWR, ADDM, ASH, Metrics and Advisors
Your tuning arsenal: AWR, ADDM, ASH, Metrics and AdvisorsYour tuning arsenal: AWR, ADDM, ASH, Metrics and Advisors
Your tuning arsenal: AWR, ADDM, ASH, Metrics and Advisors
 
OOW15 - case study: oracle application management suite for oracle e-business...
OOW15 - case study: oracle application management suite for oracle e-business...OOW15 - case study: oracle application management suite for oracle e-business...
OOW15 - case study: oracle application management suite for oracle e-business...
 
Implementing Certificate Based Authentication for HCL Traveler Access - Enga...
 Implementing Certificate Based Authentication for HCL Traveler Access - Enga... Implementing Certificate Based Authentication for HCL Traveler Access - Enga...
Implementing Certificate Based Authentication for HCL Traveler Access - Enga...
 
Ash masters : advanced ash analytics on Oracle
Ash masters : advanced ash analytics on Oracle Ash masters : advanced ash analytics on Oracle
Ash masters : advanced ash analytics on Oracle
 

Ähnlich wie Datentransfer mit Oracle Tools

Datenbank Migration - Oracle 11gR2 Erfahrungen 2011 - OPITZ CONSULTING - Chri...
Datenbank Migration - Oracle 11gR2 Erfahrungen 2011 - OPITZ CONSULTING - Chri...Datenbank Migration - Oracle 11gR2 Erfahrungen 2011 - OPITZ CONSULTING - Chri...
Datenbank Migration - Oracle 11gR2 Erfahrungen 2011 - OPITZ CONSULTING - Chri...
OPITZ CONSULTING Deutschland
 
Ausgewählte PL/SQL Packages (3)
Ausgewählte PL/SQL Packages (3)Ausgewählte PL/SQL Packages (3)
Ausgewählte PL/SQL Packages (3)
Ulrike Schwinn
 
Sesam (APEX) Öffne Dich
Sesam (APEX) Öffne DichSesam (APEX) Öffne Dich
Sesam (APEX) Öffne Dich
Oliver Lemm
 
APEX 5.1 - Architektur, Installation & Betrieb
APEX 5.1 - Architektur, Installation & BetriebAPEX 5.1 - Architektur, Installation & Betrieb
APEX 5.1 - Architektur, Installation & Betrieb
Niels de Bruijn
 
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
Ulrike Schwinn
 
SQL Tuning Sets: Generieren, Verwenden, Transferieren, Szenarios
SQL Tuning Sets: Generieren, Verwenden, Transferieren, Szenarios SQL Tuning Sets: Generieren, Verwenden, Transferieren, Szenarios
SQL Tuning Sets: Generieren, Verwenden, Transferieren, Szenarios
Ulrike Schwinn
 
Introduction into Oracle Data Pump 11g/12c - Export and Import Data
Introduction into Oracle Data Pump 11g/12c - Export and Import DataIntroduction into Oracle Data Pump 11g/12c - Export and Import Data
Introduction into Oracle Data Pump 11g/12c - Export and Import Data
Gunther Pippèrr
 
Überblick Oracle GoldenGate
Überblick Oracle GoldenGateÜberblick Oracle GoldenGate
Überblick Oracle GoldenGate
Ileana Somesan
 
18c: private temporary tables
18c: private temporary tables18c: private temporary tables
18c: private temporary tables
Ulrike Schwinn
 
Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)
Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)
Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)
Ulrike Schwinn
 
Domino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG Konferenz
Domino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG KonferenzDomino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG Konferenz
Domino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG Konferenz
panagenda
 
Oracle-DB: Beeinflussen der Ausführungspläne von SQL-Statements ohne Code-Anp...
Oracle-DB: Beeinflussen der Ausführungspläne von SQL-Statements ohne Code-Anp...Oracle-DB: Beeinflussen der Ausführungspläne von SQL-Statements ohne Code-Anp...
Oracle-DB: Beeinflussen der Ausführungspläne von SQL-Statements ohne Code-Anp...
Peter Ramm
 
Oracle Datenbank-Architektur
Oracle Datenbank-ArchitekturOracle Datenbank-Architektur
Oracle Datenbank-Architektur
Markus Flechtner
 
SAP Datashpere - von Bits und Bites zu Widgets und Charts
SAP Datashpere - von Bits und Bites zu Widgets und ChartsSAP Datashpere - von Bits und Bites zu Widgets und Charts
SAP Datashpere - von Bits und Bites zu Widgets und Charts
IBsolution GmbH
 
Froscon 2012 DWH
Froscon 2012 DWHFroscon 2012 DWH
Froscon 2012 DWH
FromDual GmbH
 
SQL Server 2012 070-462 prüfung deutsch
SQL Server 2012 070-462 prüfung deutschSQL Server 2012 070-462 prüfung deutsch
SQL Server 2012 070-462 prüfung deutsch
holgerschmitz2011
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
Josef Adersberger
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
QAware GmbH
 
Rollout-Prozess für APEX Anwendungen
Rollout-Prozess für APEX AnwendungenRollout-Prozess für APEX Anwendungen
Rollout-Prozess für APEX Anwendungen
Oliver Lemm
 
Norbert Rieger – IT-Tage 2015 – Optimierung der Performance bei Oracle-Datenb...
Norbert Rieger – IT-Tage 2015 – Optimierung der Performance bei Oracle-Datenb...Norbert Rieger – IT-Tage 2015 – Optimierung der Performance bei Oracle-Datenb...
Norbert Rieger – IT-Tage 2015 – Optimierung der Performance bei Oracle-Datenb...
Informatik Aktuell
 

Ähnlich wie Datentransfer mit Oracle Tools (20)

Datenbank Migration - Oracle 11gR2 Erfahrungen 2011 - OPITZ CONSULTING - Chri...
Datenbank Migration - Oracle 11gR2 Erfahrungen 2011 - OPITZ CONSULTING - Chri...Datenbank Migration - Oracle 11gR2 Erfahrungen 2011 - OPITZ CONSULTING - Chri...
Datenbank Migration - Oracle 11gR2 Erfahrungen 2011 - OPITZ CONSULTING - Chri...
 
Ausgewählte PL/SQL Packages (3)
Ausgewählte PL/SQL Packages (3)Ausgewählte PL/SQL Packages (3)
Ausgewählte PL/SQL Packages (3)
 
Sesam (APEX) Öffne Dich
Sesam (APEX) Öffne DichSesam (APEX) Öffne Dich
Sesam (APEX) Öffne Dich
 
APEX 5.1 - Architektur, Installation & Betrieb
APEX 5.1 - Architektur, Installation & BetriebAPEX 5.1 - Architektur, Installation & Betrieb
APEX 5.1 - Architektur, Installation & Betrieb
 
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
Überblick: 18c und Autonomous Data Warehouse Cloud (ADWC)
 
SQL Tuning Sets: Generieren, Verwenden, Transferieren, Szenarios
SQL Tuning Sets: Generieren, Verwenden, Transferieren, Szenarios SQL Tuning Sets: Generieren, Verwenden, Transferieren, Szenarios
SQL Tuning Sets: Generieren, Verwenden, Transferieren, Szenarios
 
Introduction into Oracle Data Pump 11g/12c - Export and Import Data
Introduction into Oracle Data Pump 11g/12c - Export and Import DataIntroduction into Oracle Data Pump 11g/12c - Export and Import Data
Introduction into Oracle Data Pump 11g/12c - Export and Import Data
 
Überblick Oracle GoldenGate
Überblick Oracle GoldenGateÜberblick Oracle GoldenGate
Überblick Oracle GoldenGate
 
18c: private temporary tables
18c: private temporary tables18c: private temporary tables
18c: private temporary tables
 
Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)
Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)
Komprimierung in der Oracle Datenbank (Stand 11gR2, 12c)
 
Domino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG Konferenz
Domino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG KonferenzDomino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG Konferenz
Domino Statistiken verstehen und nutzen (Teil 1) - 41. DNUG Konferenz
 
Oracle-DB: Beeinflussen der Ausführungspläne von SQL-Statements ohne Code-Anp...
Oracle-DB: Beeinflussen der Ausführungspläne von SQL-Statements ohne Code-Anp...Oracle-DB: Beeinflussen der Ausführungspläne von SQL-Statements ohne Code-Anp...
Oracle-DB: Beeinflussen der Ausführungspläne von SQL-Statements ohne Code-Anp...
 
Oracle Datenbank-Architektur
Oracle Datenbank-ArchitekturOracle Datenbank-Architektur
Oracle Datenbank-Architektur
 
SAP Datashpere - von Bits und Bites zu Widgets und Charts
SAP Datashpere - von Bits und Bites zu Widgets und ChartsSAP Datashpere - von Bits und Bites zu Widgets und Charts
SAP Datashpere - von Bits und Bites zu Widgets und Charts
 
Froscon 2012 DWH
Froscon 2012 DWHFroscon 2012 DWH
Froscon 2012 DWH
 
SQL Server 2012 070-462 prüfung deutsch
SQL Server 2012 070-462 prüfung deutschSQL Server 2012 070-462 prüfung deutsch
SQL Server 2012 070-462 prüfung deutsch
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
Docker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-PatternsDocker und Kubernetes Patterns & Anti-Patterns
Docker und Kubernetes Patterns & Anti-Patterns
 
Rollout-Prozess für APEX Anwendungen
Rollout-Prozess für APEX AnwendungenRollout-Prozess für APEX Anwendungen
Rollout-Prozess für APEX Anwendungen
 
Norbert Rieger – IT-Tage 2015 – Optimierung der Performance bei Oracle-Datenb...
Norbert Rieger – IT-Tage 2015 – Optimierung der Performance bei Oracle-Datenb...Norbert Rieger – IT-Tage 2015 – Optimierung der Performance bei Oracle-Datenb...
Norbert Rieger – IT-Tage 2015 – Optimierung der Performance bei Oracle-Datenb...
 

Datentransfer mit Oracle Tools

  • 1. www.christian-gohmann.de@CGohmannDE Datentransfer mit Oracle Tools Was ist möglich? Christian Gohmann
  • 2. About me… Christian Gohmann • Senior Consultant at Trivadis GmbH, Düsseldorf • Instructor since 2014 • O-AI (Oracle Architecture and Internals) • O-AI-DBA (Oracle Architecture and Internals for DBAs) • Tool Owner of TVD-Backup • Experiences with Oracle since 2006 (8i – 19c) • Architecture, Installation & Configuration • High Availability Solutions (RAC, Data Guard) • Migration Projects • Backup & Recovery (RMAN, Data Pump) • Blog: http://www.christian-gohmann.de @CGohmannDE
  • 3. Agenda 1. Einleitung 2. Data Pump 3. SQL*Loader 4. SQL Developer 5. SQL*Plus / SQLcl 6. External Tables
  • 5. Zeichenkodierung 1/3 • Zeichensatz wird beim Anlegen der Datenbank festgelegt • Legt fest, welche Zeichen in der Datenbank gespeichert werden können • Heutzutage wird immer häufiger der Unicode Zeichensatz (z.B. AL32UTF8) eingesetzt • Zeichen müssen zwischen Client und Datenbank korrekt konvertiert werden • Anderenfalls kommt es zu logischer Datenkorruption • Bei identischen Zeichensatz findet keine Validierung statt • Auf Client-Seite muss die Umgebungsvariable NLS_LANG korrekt gesetzt sein • Legt fest welchen Zeichensatz der Client verwendet (z.B. WE8MSWIN1252) • Standard Zeichensatz ist US7ASCII $> set/export NLS_LANG=GERMAN_GERMANY.WE8MSWIN1252 Unter Windows kann NLS_LANG auch über einen Registry Key unter dem Zweig HKEY_LOCAL_MACHINESOFTWAREORACLE<Home Name> gesetzt werden
  • 6. Zeichenkodierung 2/3 • Bei der Verarbeitung einer Datei muss NLS_LANG ggf. anders gesetzt werden • Zeichensatz muss mit dem Kodierung der Datei übereinstimmen • Vor dem Einlesen einer Datei immer die Kodierung überprüfen $> file data_unicode.txt data_unicode.txt: UTF-8 Unicode text, with no line terminators $> export NLS_LANG=GERMAN_GERMANY.AL32UTF8 $> file data_ansi.txt data_ansi.txt: ISO-8859 text, with CRLF line terminators $> export NLS_LANG=GERMAN_GERMANY.WE8ISO8859P15 Unter Windows kann die Kodierung einer Datei mit externen Tools, wie zum Beispiel Notepad++ ausgelesen werden. Windows End- of-Line Marker P15 unterstützt das €-Zeichen
  • 7. Zeichenkodierung 3/3 • Für die Überprüfung, ob die Daten korrekt in der Datenbank gespeichert wurden, sollte ein Unicode Client, wie zum Beispiel der SQL Developer verwendet werden Die aktuelle Version des SQL Developers kann über das Oracle Technology Network (https://bit.ly/2LM1UQF) bezogen werden.
  • 9. Allgemeines • Eingeführt mit Oracle 10g als Nachfolger des Export/Import Utility • Server-basiertes Werkzeug zum Entladen und Laden von Metadaten und Daten • Verwendet intern das Datenbank-Jobsystem • Ist vollständig in PL/SQL geschrieben (DBMS_DATAPUMP, DBMS_METADATA) • Legacy Mode zur Verwendung der alten Export/Import Skripte • Nur für den Austausch von Daten zwischen Oracle Datenbanken geeignet • Speicherung der Daten erfolgt in dem proprietären Stream Format der Direct Path API • Alternativ kann ein Datenbank-Link zwischen Quelle und Ziel verwendet werden • Dumpfile wird auf dem Server abgelegt (DIRECTORY Objekt) • Nicht kompatibel mit den Dumpfiles des Export/Import Utility Die Client Werkzeuge expdp und impdp dienen lediglich der Interaktion mit der Data Pump API.
  • 10. Data Pump Export/Import Modi • Full (FULL=YES) • Entladen der vollständigen Datenbank bzw. Laden aller Objekte des Dumpfiles • Tablespace (TABLESPACES=CRM_DATA,ERP_DATA) • Entladen/Laden der Objekte von einem oder mehreren Tablespaces • Transportable Tablespace (TRANSPORT_TABLESPACES=CRM_DATA,ERP_DATA) • Entladen/Laden der Metadaten der Objekte der zu transportierenden Tablespaces • Schema (Default) (SCHEMAS=USER1,USER2,…) • Entladen/Laden vollständiger Schemas • Table (TABLES=SCOTT.EMP,SCOTT.DEPT) • Entladen/Laden von einzelnen Tabellen oder Partitionen Objekte von System-Schemas, wie zum Beispiel SYS, ORDSYS oder MDSYS werden nicht exportiert.
  • 11. Beispiele • Konsistenter, vollständiger Export der Datenbank • Benutzer benötigt die Rolle EXP_FULL_DATABASE (z.B. SYSTEM) • Paralleler Export nur mit der Enterprise Edition nöglich • Export des Schemas SCOTT, ohne Objekt-Statistiken • Generierung SQL-Skript für ein bestehndes Dumpfile $> expdp system DIRECTORY=DATA_PUMP_DIR DUMPFILE=expdp_scott.dmp SCHEMAS=SCOTT LOGFILE=expdp_scott.log EXCLUDE=STATISTICS $> expdp system DIRECTORY=DATA_PUMP_DIR DUMPFILE=expdp_full_%U.dmp LOGFILE=expdp_full.log FULL=YES FLASHBACK_TIME=SYSTIMESTAMP PARALLEL=2 $> impdp system DIRECTORY=DATA_PUMP_DIR DUMPFILE=expdp_scott.dmp SQLFILE=scott.sql SCHEMAS=SCOTT Auf Undo Retention achten
  • 12. Reduzierung der Spaltenanzahl und Datenmenge • Bei einem Tabellen Export wird immer die vollständige Tabelle, inkl. aller Spalten exportiert. • Lediglich die Datenmenge kann durch Angabe des QUERY Parameters eingeschränkt werden • Ab Oracle 12c kann eine View definiert werden, die dann als eigenständige Tabelle exportiert wird • Erlaubt das Ausblenden sensibler/nicht benötigter Spalten • Erlaubt die Ergebnismenge einer komplexen Abfrage (z.B. Joins) zu exportieren • Intern wird eine „Vorlagen-Tabellen“ mit den Spalten der View, aber ohne Daten erstellt $> expdp scott/tiger DIRECTORY=DATA_PUMP_DIR DUMPFILE=expdp_scott.dmp VIEWS_AS_TABLES=V_EMP_DEPT10 NOLOGFILE=YES $> expdp scott/tiger DIRECTORY=DATA_PUMP_DIR DUMPFILE=expdp_scott.dmp TABLES=EMP QUERY=EMP:"WHERE deptno = 10" NOLOGFILE=YES
  • 13. Manipulation von Metadaten und Daten 1/2 • Data Pump erlaubt das Manipulieren der als XML gespeicherten Metadaten • Parameter: REMAP_TABLESPACE, REMAP_SCHEMA, REMAP_TABLE, TRANSFORM • Zusätzlich wird die Manipulation von Daten mittels REMAP_DATA ermöglicht • Vor dem Schreiben der Daten wird eine Funktion eines PL/SQL Pakets aufgerufen • Wird auf Spaltenebene definiert $> impdp scott/tiger DIRECTORY=DATA_PUMP_DIR DUMPFILE=expdp_scott.dmp TABLES=EMP REMAP_DATA=EMP.ENAME:DATA_TRANSFORM.HIDE_NAME NOLOGFILE=YES $> impdp scott/tiger DIRECTORY=DATA_PUMP_DIR DUMPFILE=expdp_scott.dmp TABLES=EMP REMAP_TABLESPACE=SCOTT_DATA:EMP_DATA TRANSFORM="PCTSPACE:20" NOLOGFILE=YES
  • 14. Manipulation von Metadaten und Daten 2/2 • Beispiel: PL/SQL Funktion, die den Namen auf den ersten Buchstaben kürzt Die PL/SQL Funktion sollte kein Rollback oder Commit auslösen. SQL> CREATE OR REPLACE PACKAGE DATA_TRANSFORM IS FUNCTION HIDE_NAME (name IN VARCHAR2) RETURN VARCHAR2; END DATA_TRANSFORM; / SQL> CREATE OR REPLACE PACKAGE BODY DATA_TRANSFORM IS FUNCTION HIDE_NAME (name IN VARCHAR2) RETURN VARCHAR2 IS BEGIN RETURN SUBSTR(name, 0, 1) || '.'; END HIDE_NAME; END DATA_TRANSFORM; /
  • 15. Data Pump API – Schema Export DECLARE h1 number; begin h1 := DBMS_DATAPUMP.OPEN (operation => 'EXPORT', job_mode => 'SCHEMA', job_name => 'EXP_SD_1712-12_17_24‘, version => '12.2'); DBMS_DATAPUMP.SET_PARALLEL(handle => h1, degree => 1); DBMS_DATAPUMP.ADD_FILE(handle => h1, filename => 'expdp_scott-'||TO_CHAR(SYSDATE,'hh24_mi_ss')||'.log‘, directory => 'DATA_PUMP_DIR', filetype => 3); DBMS_DATAPUMP.SET_PARAMETER(handle => h1, name => 'KEEP_MASTER', value => 1); DBMS_DATAPUMP.METADATA_FILTER(handle => h1, name => 'SCHEMA_EXPR', value => 'IN(''SCOTT'')'); DBMS_DATAPUMP.ADD_FILE(handle => h1, filename => 'expdp_scott-'||TO_CHAR(SYSDATE,'hh24_mi_ss')||'.dmp‘, directory => 'DATA_PUMP_DIR', filesize => '500M', filetype => 1); DBMS_DATAPUMP.SET_PARAMETER(handle => h1, name => 'INCLUDE_METADATA', value => 1); DBMS_DATAPUMP.DATA_FILTER(handle => h1, name => 'SUBQUERY', value => 'WHERE DEPTNO = 10', table_name => 'EMP‘, schema_name => 'SCOTT'); DBMS_DATAPUMP.SET_PARAMETER(handle => h1, name => 'FLASHBACK_SCN', value => DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER); DBMS_DATAPUMP.SET_PARAMETER(handle => h1, name => 'DATA_ACCESS_METHOD', value => 'AUTOMATIC'); DBMS_DATAPUMP.SET_PARAMETER(handle => h1, name => 'ESTIMATE', value => 'BLOCKS'); DBMS_DATAPUMP.START_JOB(handle => h1, skip_current => 0, abort_step => 0); DBMS_DATAPUMP.DETACH(handle => h1); END; / Liste der Schemas
  • 16. Data Pump Export Wizard 1/8
  • 17. Data Pump Export Wizard 2/8
  • 18. Data Pump Export Wizard 3/8
  • 19. Data Pump Export Wizard 4/8
  • 20. Data Pump Export Wizard 5/8
  • 21. Data Pump Export Wizard 6/8
  • 22. Data Pump Export Wizard 7/8
  • 23. Data Pump Export Wizard 8/8
  • 25. Allgemeines • Ergebnisse von SQL Abfragen können direkt im SQL Worksheet exportiert werden • Über das Kontextmenu Export im Query Result Reiter zu finden • Unterstützte Formate: • CSV, DELIMITED, HTML, JSON, T2, TSV, XML • Microsoft Excel, PDF • INSERT, FIXED, LOADER • Externe Textdateien (CSV, DELIMITED, TSV) können über den Import Wizard geladen werden • Aufruf über das Kontextmenü (Import Data…) einer Tabelle im Connections Browser • Kann verwendet werden, um ein SQL*Loader Controlfile zu generieren
  • 28. Import Wizard 1/5 Vorschau der Daten, bei Problemen Encoding ändern
  • 34. Allgemeines • Laden von externen Dateien in die Datenbank • Die flexible Parsing Engine erlaubt das Laden von nahezu beliebig formatierten Dateien • Inklusive dem Laden von XML Dateien • Unterstützung unterschiedlicher Load-Methoden • Direct Path: Formatierte Oracle Blöcke werden direkt in die Datafiles geschrieben (verbesserte Performance) • Conventional Path: Ausführung von klassischen INSERT Anweisungen in Kombination mit einem Bind-Array-Buffer • Tabellen werden nicht automatisch durch SQL*Loader erstellt • Konfiguration des SQL*Loader erfolgt in der Regel über ein Control File • Für einfache Ladevorgänge kann der SQL*Loader Express Mode verwendet werden Der SQL*Loader kann auch in den Instant Client integriert werden (Paket: Tools).
  • 35. SQL*Loader Control File $> vi emp.ctl LOAD DATA INFILE 'emp*.csv‘ BADFILE 'emp.bad' DISCARDFILE 'emp.dis' APPEND INTO TABLE EMP WHEN deptno = '10' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ( EMPNO ":EMPNO + 1000", ENAME "UPPER(:ename)", JOB, MGR, HIREDATE DATE "dd.mm.yyyy", SAL, COMM, DEPTNO ) $> sqlldr scott/tiger CONTROL=emp.ctl Die vom SQL*Loader generierten BADFILE (fehlerhafte Zeilen) und DISCARDFILE (aussortierte Zeilen) Dateien können wiederum als INFILE verwendet werden. Eingabedateien, Verwendung von Wildcards ab 12c möglich Filterung von Datensätzen Manipulation der Daten • Einfache Textdatei zum Steuern eines SQL*Loader Ladevorganges • Unterteilt in drei große Bereiche • Sitzungsinformationen • Tabellen- und Feldinformationen • Eingabedaten (BEGINDATA, optional) • Kommentare können mit -- eingeleitet werden • Escape-Zeichen: (Backslash)
  • 36. SQL*Loader Express Mode • Verfügbar ab Oracle 12c Release 1 • CSV Dateien können direkt in die dazugehörige Tabelle geladen werden • Der Name der Eingabedatei entspricht dem Namen der Zieltabelle • Im Hintergrund wird automatisch ein DIRECTORY Objekt angelegt • Existiert bereits ein entsprechendes Objekt, so wird dies genommen • Für das Anlegen benötigt der Benutzer das CREATE ANY DIRECTORY Privileg • Beispiel: Laden von Datensätzen in die Tabelle EMP $> vi EMP.dat 9999,GOHMANN,CEO,,01-JAN-70,10000,,10 $> sqlldr scott/tiger TABLE=EMP Bei größeren Eingabedateien empfiehlt sich die Aktivierung der Resumable Operation (resumable=yes), damit Ladevorgänge nicht direkt abbrechen, wenn ein Tablespace vollgelaufen ist.
  • 38. Generierung einer CSV Ausgabe mit SQL*Plus 1/3 • Verfügbar ab Oracle 12c Release 2 • Ausgabe der Ergebnismenge einer Abfrage als Comma Separated Values (CSV) • Änderung des Trennzeichens (DELIMITER) und ob Anführungszeichen bei Zeichenketten (QUOTE) verwendet werden sollen ist möglich • Das verwendete Trennzeichen wird in Zeichenketten nicht escaped SQL> SET MARKUP CSV ON DELIMITER ";" QUOTE ON SQL> SELECT * FROM scott.emp WHERE ename = 'SCOTT'; "EMPNO";"ENAME";"JOB";"MGR";"HIREDATE";"SAL";"COMM";"DEPTNO" 7788;"SCOTT";"ANALYST";7566;"19-APR-87";3000;;20 Die Generierung einer HTML Ausgabe gab es bereits in früheren Versionen von SQL*Plus.
  • 39. Generierung einer CSV Ausgabe mit SQL*Plus 2/3 • Formatierung von Spalten über COLUMN Kommandos ist möglich • COLUMN FORMAT • COLUMN HEADING • COLUMN NULL SQL> COLUMN empno FORMAT 000009 SQL> COLUMN ename HEADING emp_name SQL> COLUMN comm NULL 'N/A' SQL> SELECT * FROM scott.emp WHERE ename = 'SCOTT'; "EMPNO";"EMP_NAME";"JOB";"MGR";"HIREDATE";"SAL";"COMM";"DEPTNO" 007788;"SCOTT";"ANALYST";7566;"19-APR-87";3000;N/A;20 Weitere COLUMN Kommandos, wie z.B. NOPRINT können (negative) Auswirkungen auf das Resultat haben.
  • 40. Generierung einer CSV Ausgabe mit SQL*Plus 3/3 • Ausgabe als CSV kann direkt beim Starten von SQL*Plus aktiviert werden • Praktisch für die automatisierte Generierung von CSV Dateien • Bestehende SQL Skripte müssen nicht erweitert werden • Leerzeilen können z.B. mit sed entfernt werden • Ggf. bei geänderten glogin.sql weitere Zeilen entfernen • Die Ausgabe als HTML kann analog dazu aktiviert werden $> sqlplus -S -M "CSV ON DELIMITER ';'" scott/tiger @select_data.sql | sed '/^$/d' Durch Verwendung des -S Parameters wird SQL*Plus im Silent Mode verwendet.
  • 41. Wechseln der Formatierung in SQLcl • SQLcl erlaubt es mit SET SQLFORMAT das Format der Ausgabe zu ändern • Folgende Formate werden unterstützt: • CSV, HTML, JSON, XML • ANSICONSOLE, INSERT, LOADER, FIXED, DELIMITED • Die Angabe des Formats kann über ein spezielles Kommentar angegeben werden • Zusätzlich besteht die Möglichkeit eigene Formate zu definieren (Java Script) • Siehe https://www.thatjeffsmith.com/archive/2016/12/custom-sqlformats-with-sqlcl/ SQL> SET SQLFORMAT csv SQL> SELECT /*csv*/ * FROM emp; SET SQLFORMAT und das spezielle Kommentar können im SQL Developer ebenfalls verwendet werden.
  • 43. Allgemeines • Spezieller Objekttyp, der lesenden Zugriff auf Dateien außerhalb der Datenbank erlaubt • Manipulation der Daten ist nicht möglich, entladen von Daten dagegen schon • Dateien können nahezu beliebig formatiert sein • Es wird eine Untermenge der Funktionalitäten des SQL*Loaders verwendet • Lediglich Metainformationen zu der Tabelle werden im Data Dictionary abgelegt • View: DBA_EXTERNAL_TABLES • Ab Oracle 18c können Inline External Tables verwendet werden • Kann wie eine „normale“ Tabelle in SQL Anweisungen verwendet werden • Zugriff auf die Daten erfolgt über einen Access Driver, die unterschiedliche Funktionalitäten bereitstellen Objektstatistiken sollten auch für External Tables mittels DBMS_STATS gesammelt werden. SQL> SELECT * FROM EXTERNAL(...);
  • 44. Access Drivers ORACLE_LOADER (Default) • Lesender Zugriff auf Textdateien außerhalb der Datenbank ORACLE_DATAPUMP • Entladen der Ergebnismenge einer Abfrage in ein binäres Dumpfile • Zugriff auf Inhalte von binären Dumpfiles • Kann nicht von Data Pump gelesen werden ORACLE_HIVE • Ab Oracle 12c Release 2 • Lesender Zugriff auf Daten einer Apache Hive Datenquelle ORACLE_HDFS • ab Oracle 12c Release 2 • Lesender Zugriff auf Dateien in einem Hadoop Distributed File System (HDFS)
  • 45. Preprocessor • Erlaubt das automatische Ausführen eines Betriebssystembefehls/-skriptes • Nicht verfügbar, wenn Database Vault aktiv ist • Parameter an einen Befehl können nicht übergeben werden • Z.B.: Entpacken der gezippten Eingabedateien, Manipulation der Inhalte • Steht nur für den Access Driver ORACLE_LOADER zur Verfügung • Es werden EXECUTE Privilegien für das DIRECTORY Objekt benötigt • ACHTUNG: Der Benutzer kann dann jedes Skript in dem Verzeichnis ausführen • Unter Windows sollte die erste Anweisung in einem Skript @echo off sein • Anderenfalls würden die ausgeführten Befehle als Eingabedaten verwendet werden SQL> GRANT EXECUTE ON DIRECTORY data_dir TO SCOTT; Ein eigenes Verzeichnis für die ausführbaren Preprocessor Dateien verwendet.
  • 46. Partitionierte External Tables • Ab Oracle 12c Release 2 können partitionierte External Tables angelegt werden • Eine Partition entspricht einer oder mehrerer Eingabedateien • Bis auf Ebene Subpartition möglich • Korrektheit der Daten gegenüber dem Partition Key wird nicht geprüft • DBA ist verantwortlich für die Konsistenz der Daten • Wird von allen Access Drivern unterstützt • Optimizer kann z.B. Partition Pruning einsetzen, um die Performance der Abfrage zu verbessern
  • 47. ORACLE_LOADER Beispiel SQL> CREATE DIRECTORY ext_data_dir AS '/data'; SQL> CREATE TABLE emp_xt4 ( empno NUMBER(4), ename VARCHAR2(10), deptno NUMBER(2) ) ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY ext_data_dir ACCESS PARAMETERS ( RECORDS DELIMITED BY NEWLINE PREPROCESSOR 'unzip_emp.sh' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' )) REJECT LIMIT UNLIMITED PARTITION BY LIST (deptno) (PARTITION emp_dept10 VALUES ('10') LOCATION ('emp_dept10a.csv’, 'emp_dept10b.csv'), PARTITION emp_dept20 VALUES ('20') LOCATION ('emp_dept20.csv')); Preprocessor Partitionierung
  • 48. Entladen von Daten • Access Driver ORACLE_DATAPUMP erlaubt das Entladen von Daten in eine externe Datei • Daten werden in einem binären, proprietären Format (Dumpfile) gespeichert • Kann wiederum nur mittels ORACLE_DATAPUMP eingelesen werden • Parallelisierung ist durch Angabe von PARALLEL mit mehreren Dumpfiles möglich Das Dumpfile ist plattform- und betriebssystemunbhängig. SQL> CREATE TABLE emp_xt ORGANIZATION EXTERNAL (TYPE ORACLE_DATAPUMP DEFAULT DIRECTORY data_dir LOCATION ('ext_xt.dmp')) AS SELECT empno, ename FROM emp WHERE deptno = 10; SQL> CREATE TABLE emp_deptno10_xt (empno NUMBER(4), ename VARCHAR2(10)) ORGANIZATION EXTERNAL (TYPE ORACLE_DATAPUMP DEFAULT DIRECTORY data_dir LOCATION ('ext_xt.dmp'));
  • 49. Further Information SQL Developer Documentation https://docs.oracle.com/cd/E12151_01/index.htm Oracle Utilities Guide 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/sutil/index.html My Oracle Support https://support.oracle.com
  • 50. Questions and answers.. Christian Gohmann Senior Consultant Tel. +49-211-58 6664 702 christian.gohmann@trivadis.com @CGohmannDE