Zur Erinnerung: Konsistente Exports mit DataPump
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)