Zur Erinnerung: Konsistente Exports mit DataPump

27. Juli 2017 Aus Von Markus Flechtner

Meist muss ich mir die Themen für meine Blog-Einträge nicht suchen, sie „finden“ mich in meinen Kundenprojekten und Schulungen. Und so nutze ich meinen Blog immer wieder, um Kundenfragen etwas ausführlicher beantworten zu können. So auch diesmal; wenn es um das Thema „Konsistente Exports mit DataPump“ geht.

Defaultmäßig sind DataPump-Exports nur auf Tabellenebene konsistent. Das kann zu Problemen bei Foreign-Key-Beziehungen führen. Stellen wir uns dazu den folgenden zeitlichen Ablauf vor:

1. DataPump-Export wird gestartet
2. Die Parent-Tabelle T1 einer Foreign-Key-Beziehung wird im aktuellen Stand konsistent exportiert
3. In die Parent-Tabelle T1 und die zugehörige Child-Tabelle T2 werden neue Datensätze (Master und Detail) eingefügt.
4. Der Export exportiert die Tabelle T2 im aktuell konsistenten Stand
Der Export ist erfolgreich und meldet keine Fehler. Die Dump-Datei enthält jetzt allerdings einen Stand der Tabelle T2 der nicht zum Stand der Tabelle T1 passt: es fehlen ein oder mehrere Parent-Datensätze.

Die Probleme kommen erst beim Import, genauer beim Import der Tabelle T2. Dort kommt es dann zum Fehler „ORA-02298: cannot validate (EXAMPLE.T2_FK) – parent keys not found“.

Für einen insgesamt konsistenten Export bietet DataPump die beiden Parameter
• FLASHBACK_SCN
• FLASHBACK_TIME

Wird einer der beiden Parameter gesetzt so arbeitet Oracle mit „Flashback Query“ und exportiert die Daten so wie sie zum angegebenen Zeitpunkt waren. Da „Flashback Query“ die Undo-Segmente nutzt, ist dort auf ausreichend Platz sowie auf einen ausreichend hohen Wert des Parameters UNDO_RETENTION zu achten.

FLASHBACK_SCN ist der genauere der beiden Parameter; FLASHBACK_TIME meist der einfach handhabbare. Wird FLASHBACK_TIME angegeben, so rechnet Oracle das auf die passende SCN um. Dabei kann ein Fehler von bis zu drei Sekunden entstehen.

Die aktuelle SCN kann man z.B. über folgende Abfrage ermitteln:

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
 5968271

Die FLASHBACK_TIME wird im Timestamp-Format angegeben

FLASHBACK_TIME="TO_TIMESTAMP('27-07-2017 12:35:00', 'DD-MM-YYYY HH24:MI:SS')"

Wenn man den gerade aktuellen Stand der Datenbank zum Zeitpunkt „Start des Exports“ exportieren möchte, dann nimmt man

FLASHBACK_TIME=SYSTIMESTAMP

Alternativ geht auch das altbekannte “SYSDATE”.

oracle@nf12cdba:~/ [TVDNCDB] expdp scott/tiger directory=data_pump_dir dumpfile=scott1.dmp logfile=scott1.log FLASHBACK_TIME=SYSTIMESTAMP

Export: Release 12.2.0.1.0 - Production on Thu Jul 27 12:43:08 2017

Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
Starting "SCOTT"."SYS_EXPORT_SCHEMA_01": scott/******** directory=data_pump_dir dumpfile=scott1.dmp logfile=scott1.log FLASHBACK_TIME=SYSTIMESTAMP
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type SCHEMA_EXPORT/STATISTICS/MARKER
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
. . exported "SCOTT"."EMP" 8.734 KB 13 rows
. . exported "SCOTT"."DEPT" 6.023 KB 4 rows
. . exported "SCOTT"."SALGRADE" 5.953 KB 5 rows
. . exported "SCOTT"."DUMMY" 5.054 KB 1 rows
. . exported "SCOTT"."BONUS" 6.289 KB 0 rows
Master table "SCOTT"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SCOTT.SYS_EXPORT_SCHEMA_01 is:
 /u00/app/oracle/admin/TVDNCDB/dpdump/scott1.dmp
Job "SCOTT"."SYS_EXPORT_SCHEMA_01" successfully completed at Thu Jul 27 12:43:32 2017 elapsed 0 00:00:24

Im klassischen Export war der entsprechende Parameter „CONSISTENT=Y“. Seit Oracle 11g Release 2 bietet DataPump den sog. „Legacy-Mode“, bei dem Parameter des klassischen Exports weiterverwendet werden können und automatisch in DataPump-Parameter umgesetzt werden:

oracle@nf12cdba:~/ [TVDNCDB] expdp scott/tiger directory=data_pump_dir dumpfile=scott2.dmp logfile=scott2.log CONSISTENT=YES

Export: Release 12.2.0.1.0 - Production on Thu Jul 27 12:45:11 2017

Copyright (c) 1982, 2017, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
Legacy Mode Active due to the following parameters:
Legacy Mode Parameter: "consistent=TRUE" Location: Command Line, Replaced with: "flashback_time=TO_TIMESTAMP('2017-07-27 12:45:11', 'YYYY-MM-DD HH24:MI:SS')"
Legacy Mode has set reuse_dumpfiles=true parameter.
Starting "SCOTT"."SYS_EXPORT_SCHEMA_01": scott/******** directory=data_pump_dir dumpfile=scott2.dmp logfile=scott2.log flashback_time=TO_TIMESTAMP('2017-07-27 12:45:11', 'YYYY-MM-DD HH24:MI:SS') reuse_dumpfiles=true
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type SCHEMA_EXPORT/STATISTICS/MARKER
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
. . exported "SCOTT"."EMP" 8.734 KB 13 rows
. . exported "SCOTT"."DEPT" 6.023 KB 4 rows
. . exported "SCOTT"."SALGRADE" 5.953 KB 5 rows
. . exported "SCOTT"."DUMMY" 5.054 KB 1 rows
. . exported "SCOTT"."BONUS" 6.289 KB 0 rows
Master table "SCOTT"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SCOTT.SYS_EXPORT_SCHEMA_01 is:
 /u00/app/oracle/admin/TVDNCDB/dpdump/scott2.dmp
Job "SCOTT"."SYS_EXPORT_SCHEMA_01" successfully completed at Thu Jul 27 12:45:33 2017 elapsed 0 00:00:21

Anstelle von “CONSISTENT=YES” kann man auch “CONSISTENT=Y”, “CONSISTENT=TRUE” verwenden.

MOS-Notes:

  • ORA-39083 And ORA-2298 Encountered During DataPump Import (Doc ID 462645.1)
  • When To Use CONSISTENT=Y During An Export With Original Export – Exp (Doc ID 113450.1)
  • Parameters FLASHBACK_SCN And FLASHBACK_TIME: Point In Time Export (Doc ID 204334.1)

Dokumentation:

Links:
https://oracle-base.com/articles/9i/flashback-query

 

Werbung (Amazon-Partner-Link)