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?

High Performance Mysql
High Performance MysqlHigh Performance Mysql
High Performance Mysql
liufabin 66688
 
ETL Design for Impala Zero Touch Metadata.pptx
ETL Design for Impala Zero Touch Metadata.pptxETL Design for Impala Zero Touch Metadata.pptx
ETL Design for Impala Zero Touch Metadata.pptx
Manish Maheshwari
 
Scaling for Performance
Scaling for PerformanceScaling for Performance
Scaling for Performance
ScyllaDB
 
New Generation Oracle RAC Performance
New Generation Oracle RAC PerformanceNew Generation Oracle RAC Performance
New Generation Oracle RAC Performance
Anil Nair
 
Deep Dive : Spark Data Frames, SQL and Catalyst Optimizer
Deep Dive : Spark Data Frames, SQL and Catalyst OptimizerDeep Dive : Spark Data Frames, SQL and Catalyst Optimizer
Deep Dive : Spark Data Frames, SQL and Catalyst Optimizer
Sachin Aggarwal
 
Oracle mysql comparison
Oracle mysql comparisonOracle mysql comparison
Oracle mysql comparison
Arun Sharma
 
MySQL Slow Query log Monitoring using Beats & ELK
MySQL Slow Query log Monitoring using Beats & ELKMySQL Slow Query log Monitoring using Beats & ELK
MySQL Slow Query log Monitoring using Beats & ELK
YoungHeon (Roy) Kim
 
Developer Special: How to Prepare Applications for Notes 64-bit Clients
Developer Special: How to Prepare Applications for Notes 64-bit ClientsDeveloper Special: How to Prepare Applications for Notes 64-bit Clients
Developer Special: How to Prepare Applications for Notes 64-bit Clients
panagenda
 
Top 10 Mistakes When Migrating From Oracle to PostgreSQL
Top 10 Mistakes When Migrating From Oracle to PostgreSQLTop 10 Mistakes When Migrating From Oracle to PostgreSQL
Top 10 Mistakes When Migrating From Oracle to PostgreSQL
Jim Mlodgenski
 
Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...
Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...
Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...
Aaron Shilo
 
Using ansible vault to protect your secrets
Using ansible vault to protect your secretsUsing ansible vault to protect your secrets
Using ansible vault to protect your secrets
Excella
 
DB2 for z/OS Architecture in Nutshell
DB2 for z/OS Architecture in NutshellDB2 for z/OS Architecture in Nutshell
DB2 for z/OS Architecture in Nutshell
Cuneyt Goksu
 
Apache Knox setup and hive and hdfs Access using KNOX
Apache Knox setup and hive and hdfs Access using KNOXApache Knox setup and hive and hdfs Access using KNOX
Apache Knox setup and hive and hdfs Access using KNOX
Abhishek Mallick
 
Adaptive Query Execution: Speeding Up Spark SQL at Runtime
Adaptive Query Execution: Speeding Up Spark SQL at RuntimeAdaptive Query Execution: Speeding Up Spark SQL at Runtime
Adaptive Query Execution: Speeding Up Spark SQL at Runtime
Databricks
 
Alfresco: Escenarios de Arquitectura para Despliegue
Alfresco: Escenarios de Arquitectura para DespliegueAlfresco: Escenarios de Arquitectura para Despliegue
Alfresco: Escenarios de Arquitectura para Despliegue
Alkaid · Open Source Business Software
 
Simplifying And Accelerating Data Access for Python With Dremio and Apache Arrow
Simplifying And Accelerating Data Access for Python With Dremio and Apache ArrowSimplifying And Accelerating Data Access for Python With Dremio and Apache Arrow
Simplifying And Accelerating Data Access for Python With Dremio and Apache Arrow
PyData
 
How to understand and analyze Apache Hive query execution plan for performanc...
How to understand and analyze Apache Hive query execution plan for performanc...How to understand and analyze Apache Hive query execution plan for performanc...
How to understand and analyze Apache Hive query execution plan for performanc...
DataWorks Summit/Hadoop Summit
 
Lessons Learned Using arc42 in a Real DevOps Team
Lessons Learned Using arc42 in a Real DevOps TeamLessons Learned Using arc42 in a Real DevOps Team
Lessons Learned Using arc42 in a Real DevOps Team
Johannes Dienst
 
Building Robust ETL Pipelines with Apache Spark
Building Robust ETL Pipelines with Apache SparkBuilding Robust ETL Pipelines with Apache Spark
Building Robust ETL Pipelines with Apache Spark
Databricks
 
Best Practices in Security with PostgreSQL
Best Practices in Security with PostgreSQLBest Practices in Security with PostgreSQL
Best Practices in Security with PostgreSQL
EDB
 

Was ist angesagt? (20)

High Performance Mysql
High Performance MysqlHigh Performance Mysql
High Performance Mysql
 
ETL Design for Impala Zero Touch Metadata.pptx
ETL Design for Impala Zero Touch Metadata.pptxETL Design for Impala Zero Touch Metadata.pptx
ETL Design for Impala Zero Touch Metadata.pptx
 
Scaling for Performance
Scaling for PerformanceScaling for Performance
Scaling for Performance
 
New Generation Oracle RAC Performance
New Generation Oracle RAC PerformanceNew Generation Oracle RAC Performance
New Generation Oracle RAC Performance
 
Deep Dive : Spark Data Frames, SQL and Catalyst Optimizer
Deep Dive : Spark Data Frames, SQL and Catalyst OptimizerDeep Dive : Spark Data Frames, SQL and Catalyst Optimizer
Deep Dive : Spark Data Frames, SQL and Catalyst Optimizer
 
Oracle mysql comparison
Oracle mysql comparisonOracle mysql comparison
Oracle mysql comparison
 
MySQL Slow Query log Monitoring using Beats & ELK
MySQL Slow Query log Monitoring using Beats & ELKMySQL Slow Query log Monitoring using Beats & ELK
MySQL Slow Query log Monitoring using Beats & ELK
 
Developer Special: How to Prepare Applications for Notes 64-bit Clients
Developer Special: How to Prepare Applications for Notes 64-bit ClientsDeveloper Special: How to Prepare Applications for Notes 64-bit Clients
Developer Special: How to Prepare Applications for Notes 64-bit Clients
 
Top 10 Mistakes When Migrating From Oracle to PostgreSQL
Top 10 Mistakes When Migrating From Oracle to PostgreSQLTop 10 Mistakes When Migrating From Oracle to PostgreSQL
Top 10 Mistakes When Migrating From Oracle to PostgreSQL
 
Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...
Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...
Exploring Oracle Database Performance Tuning Best Practices for DBAs and Deve...
 
Using ansible vault to protect your secrets
Using ansible vault to protect your secretsUsing ansible vault to protect your secrets
Using ansible vault to protect your secrets
 
DB2 for z/OS Architecture in Nutshell
DB2 for z/OS Architecture in NutshellDB2 for z/OS Architecture in Nutshell
DB2 for z/OS Architecture in Nutshell
 
Apache Knox setup and hive and hdfs Access using KNOX
Apache Knox setup and hive and hdfs Access using KNOXApache Knox setup and hive and hdfs Access using KNOX
Apache Knox setup and hive and hdfs Access using KNOX
 
Adaptive Query Execution: Speeding Up Spark SQL at Runtime
Adaptive Query Execution: Speeding Up Spark SQL at RuntimeAdaptive Query Execution: Speeding Up Spark SQL at Runtime
Adaptive Query Execution: Speeding Up Spark SQL at Runtime
 
Alfresco: Escenarios de Arquitectura para Despliegue
Alfresco: Escenarios de Arquitectura para DespliegueAlfresco: Escenarios de Arquitectura para Despliegue
Alfresco: Escenarios de Arquitectura para Despliegue
 
Simplifying And Accelerating Data Access for Python With Dremio and Apache Arrow
Simplifying And Accelerating Data Access for Python With Dremio and Apache ArrowSimplifying And Accelerating Data Access for Python With Dremio and Apache Arrow
Simplifying And Accelerating Data Access for Python With Dremio and Apache Arrow
 
How to understand and analyze Apache Hive query execution plan for performanc...
How to understand and analyze Apache Hive query execution plan for performanc...How to understand and analyze Apache Hive query execution plan for performanc...
How to understand and analyze Apache Hive query execution plan for performanc...
 
Lessons Learned Using arc42 in a Real DevOps Team
Lessons Learned Using arc42 in a Real DevOps TeamLessons Learned Using arc42 in a Real DevOps Team
Lessons Learned Using arc42 in a Real DevOps Team
 
Building Robust ETL Pipelines with Apache Spark
Building Robust ETL Pipelines with Apache SparkBuilding Robust ETL Pipelines with Apache Spark
Building Robust ETL Pipelines with Apache Spark
 
Best Practices in Security with PostgreSQL
Best Practices in Security with PostgreSQLBest Practices in Security with PostgreSQL
Best Practices in Security with PostgreSQL
 

Ä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