Total Recall – Eine Reise in die Tiefen des Oracle Gedächtnis Mirko Hotzy Discipline Manager Databases Trivadis GmbH Niederlassung Stuttgart Dezember 2008 Basel · Baden · Bern · Lausanne · Zürich · Düsseldorf · Frankfurt/M. · Freiburg i. Br. · Hamburg · München · Stuttgart · Wien Agenda Flashback – Übersicht & Historie Total Recall – Flashback Data Archives Total Recall – Einschränkungen Daten sind immer im Spiel. Oracle Database 11g – Total Recall, eine Reise in die Tiefen des Oracle Gedächtnis 2 © 2008 Was bisher geschah? Das Oracle Gehirn war bisher eher übersichtlich konstruiert… Oracle Database 11g – Total Recall, eine Reise in die Tiefen des Oracle Gedächtnis 3 © 2008 Übersicht & Historie – bis Oracle 10 (1) 3 vollständig unabhängige und unterschiedliche Mechanismen Flashback-Typ Flashback Query Flashback Table Mechanismus Basiert auf Undo-Informationen UNDO_MANAGEMENT UNDO_RETENTION UNDO_TABLESPACE Recyclebin Umbenennen von Tabellen und Abhängigen Objekten in systemverwaltete Objekte innerhalb desselben Tablespace Flashback Database Flashback Logging, RVWR Prozess schreibt Flashback Logs, abgelegt in Flash Recovery Area, Erweiterung des Rewind Buttons durch Restore Point Techniken Oracle Database 11g – Total Recall, eine Reise in die Tiefen des Oracle Gedächtnis 4 © 2008 Flashback Befehlsportfolio (1) Flashback Query (auch SCN möglich) SELECT * FROM emp AS OF TIMESTAMP to_timestamp('26.10.2008 13:52:00'‚ 'DD.MM.YYYY HH24:MI:SS') WHERE deptno = 30; Flashback Version Query SELECT empno, ename, job, versions_starttime, versions_endtime FROM emp VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE WHERE ename = 'MEIER' ORDER BY versions_starttime NULLS FIRST; Flashback Transaction Query SELECT ftq.xid, ftq.start_scn, ftq.commit_scn, ftq.operation, ftq.logon_user, ftq.undo_sql FROM emp VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE, flashback_transaction_query ftq WHERE ftq.xid = '04001F000F2D0000' AND ftq.undo_sql IS NOT NULL AND ftq.xid = versions_xid; Oracle Database 11g – Total Recall, eine Reise in die Tiefen des Oracle Gedächtnis 5 © 2008 Flashback Befehlsportfolio (2) Flashback Table FLASHBACK TABLE emp TO TIMESTAMP to_timestamp('25.10.2008 12:00:00','DD.MM.YYYY HH24:MI:SS'); Recyclebin FLASHBACK TABLE emp TO BEFORE DROP RENAME TO emp_restore; -- Rename is optional Flashback Database (mount status) ALTER DATABASE FLASHBACK ON; FLASHBACK DATABASE TO [ SCN … | TIMESTAMP … | Restore Point]; Oracle Database 11g – Total Recall, eine Reise in die Tiefen des Oracle Gedächtnis 6 © 2008 Übersicht & Historie – bis Oracle 10 (2) Anzeigen vergangener Zustände von Datenbankobjekten (Flashback-Query, Flashback Transaction Query, Flashback Version Query) Zurücksetzen von Objekten auf einen früheren Stand ohne Point-in-time Media Recovery (primär Generierung & Anwendung von Undo-SQL) Mit Flashback-Funktionen waren bisher folgende Aktionen möglich: Durchführen von Queries, die frühere Datenzustände anzeigen Durchführen von Queries, die eine detaillierte Historie von Datenbankänderungen anzeigt Wiederherstellen von Tabellen oder Zeilen zu einem früheren Zeitpunkt Zurückrollen einer Transaktion und der davon abhängigen Transaktionen, während die Datenbank online verfügbar ist Voraussetzungen: FLASHBACK DATABASE benötigt Flashback-Logs FLASHBACK Query benötigt ausreichend Undo-Tablespaceplatz Oracle Database 11g – Total Recall, eine Reise in die Tiefen des Oracle Gedächtnis 7 © 2008 Und nun … Was hat sich nun mit Oracle 11g geändert? Oracle Database 11g – Total Recall, eine Reise in die Tiefen des Oracle Gedächtnis 8 © 2008 Agenda Flashback - Übersicht & Historie Total Recall – Flashback Data Archives Total Recall – Einschränkungen Daten sind immer im Spiel. Oracle Database 11g – Total Recall, eine Reise in die Tiefen des Oracle Gedächtnis 9 © 2008 ORACLE Total Recall – Worum geht es? Historische Daten werden einfach aufgefressen … … aber nicht terminiert! Oracle Database 11g – Total Recall, eine Reise in die Tiefen des Oracle Gedächtnis 10 © 2008 Total Recall – Meine Erwartungen Einfache Erstellung und Verwaltung von FlashbackDatenarchiven Datensicherheit – nicht jeder darf historische Daten abfragen Effizientes Management von Flashback Data Archives durch Oracle selbst Automatische Datenbereinigung Effiziente Speicherplatznutzung für historische Daten Einfacher und schneller Zugriff auf historische Daten Keine Zeitbeschränkung – jeder Aufbewahrungszeitraum ist möglich Einfache Administration und Visualisierung über EM11g Database Control Oracle Database 11g – Total Recall, eine Reise in die Tiefen des Oracle Gedächtnis 11 © 2008 Flashback Data Archives Flashback Data Archive (Total Recall) Automatisches Protokollieren und Archivieren von geänderten Daten für reguläre Queries und Flashback Queries Ermöglichen den Zugriff auf einzelne Versionen der Datenbankobjekte, ohne «snapshot-too-old»-Fehler Speichern alle Änderungen eines Datensatzes über seine gesamte Lebensdauer ora_fbda_SID startet beim Hochfahren der Datenbank Quelle Oracle Corporation Kein Archivelog Mode notwendig! Oracle Database 11g – Total Recall, eine Reise in die Tiefen des Oracle Gedächtnis 12 © 2008 Flashback Data Archives – Konzept (2) Ein weiterer, neuer Mechanismus ist hinzugekommen Flashback-Typ Mechanismus Flashback Data Archives Asynchrones Protokollieren von Änderungen auf Tabellenebene, Systemgenerierte, partitionierte Historientabellen protokollieren alle Änderungen (Update, Delete), Platzoptimierung Limits Quotas für Flashback Data Archives Tablespace-/Storagelimits Oracle Database 11g – Total Recall, eine Reise in die Tiefen des Oracle Gedächtnis 13 © 2008 Flashback Data Archives – Vorbereitungen Erstellen eines Tablespaces für Flashback Data Archives CREATE SMALLFILE TABLESPACE FDA_LONG_RET DATAFILE '/u01/oradata/DB1110A/DB1110A_FDA_LONG_RET01.dbf' SIZE 100M REUSE AUTOEXTEND ON NEXT 10M MAXSIZE 200M LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO; Vergeben der Administrationsrechte an Benutzer GRANT FLASHBACK ARCHIVE ADMINISTER TO scott; Erstellen des Flashback-Archivs CREATE FLASHBACK ARCHIVE flasharch_long TABLESPACE FDA_LONG_RET QUOTA 100M RETENTION 10 YEAR; Oracle Database 11g – Total Recall, eine Reise in die Tiefen des Oracle Gedächtnis 14 © 2008 Flashback Data Archives – Nutzung Aktivieren der Flashback-Archivierung für eine Tabelle ALTER TABLE SCOTT.cust2 FLASHBACK ARCHIVE flasharch_long; Abfragen der Daten, zu einem spezifischen Zeitpunkt select * from scott.cust2 AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '10' DAY) WHERE cust_last_name ='Ruddy'; Relevante Dictionary-Views DBA_FLASHBACK_ARCHIVE (Erstellungsdatum…) DBA_FLASHBACK_TABLES (archivierte Tabellen…) DBA_FLASHBACK_ARCHIVE_TS (Tablespace für FlashbackArchiv…) Oracle Database 11g – Total Recall, eine Reise in die Tiefen des Oracle Gedächtnis 15 © 2008 Flashback Data Archives – Internals (1) Für historische Daten werden Range-Partitionierte Tabellen erstellt Der Name der Archiv- und Mappingtabellen ist systemgeneriert (SYS_FBA_*) Oracle Database 11g – Total Recall, eine Reise in die Tiefen des Oracle Gedächtnis 16 © 2008 Flashback Data Archives – Internals (2) Systemgenerierte, rangepartitionierte Tabellen werden benutzt DBMS_METADATA.GET_DDL('TABLE','SYS_FBA_HIST_88149','SCOTT') --------------------------------------------------------------CREATE TABLE "SCOTT"."SYS_FBA_HIST_88149" ( "RID" VARCHAR2(4000), "STARTSCN" NUMBER, "ENDSCN" NUMBER, "XID" RAW(8), "OPERATION" VARCHAR2(1), … ) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 COMPRESS STORAGE( BUFFER_POOL DEFAULT) TABLESPACE "FDA_LONG_RET" PARTITION BY RANGE ("ENDSCN") (PARTITION "PART_11369538" VALUES LESS THAN (11369538) … TABLESPACE "FDA_LONG_RET" COMPRESS FOR ALL OPERATIONS ) Oracle Database 11g – Total Recall, eine Reise in die Tiefen des Oracle Gedächtnis 17 © 2008 Flashback Data Archives – Internals (3) OLTP Table Compression ist ebenfalls involviert select table_owner, table_name, partition_name, compress_for from dba_tab_partitions where table_name like 'SYS_FBA_HIST%' order by table_owner TAB_OWNER --------HR SCOTT SCOTT SCOTT SCOTT TABLE_NAME -----------------SYS_FBA_HIST_88150 SYS_FBA_HIST_88149 SYS_FBA_HIST_88149 SYS_FBA_HIST_88148 SYS_FBA_HIST_88148 PART_NAME ------------HIGH_PART PART_11369538 HIGH_PART HIGH_PART PART_11272997 COMPRESS_FOR ---------------FOR ALL OPERATIONS FOR ALL OPERATIONS FOR ALL OPERATIONS FOR ALL OPERATIONS FOR ALL OPERATIONS Chained Rows? – Fehlanzeige! TABLE_NAME CHAIN_CNT ------------------------------ ---------SYS_FBA_HIST_88148 0 SYS_FBA_HIST_88149 0 Oracle Database 11g – Total Recall, eine Reise in die Tiefen des Oracle Gedächtnis 18 © 2008 Flashback Data Archives – Internals (4) Was macht eigentlich die SYS.SMON_SCN_TIME Tabelle? select count(*) from sys.smon_scn_time; COUNT(*) ---------4378 Sie wächst … und wächst und … Eine Row ist durchschnittlich 993 Bytes groß Alle 5 Minuten entsteht eine Row in SYS.SMON_SCN_TIME 0,27MB pro Tag x 365Tage x 10Jahre = ca. 985 MB 10 Jahre = 1.051.200 rows! Genaues Überwachen des SYSAUX Tablespaces wird dringend empfohlen! Oracle Database 11g – Total Recall, eine Reise in die Tiefen des Oracle Gedächtnis 19 © 2008 Flashback Data Archives – Internals (5) Performance Overhead durch asynchrones Schreiben? Sollte sorgfältig von Fall zu Fall getestet werden! Oracle Database 11g – Total Recall, eine Reise in die Tiefen des Oracle Gedächtnis 20 © 2008 Agenda Flashback - Übersicht & Historie Total Recall – Flashback Data Archives Total Recall – Einschränkungen Daten sind immer im Spiel. Oracle Database 11g – Total Recall, eine Reise in die Tiefen des Oracle Gedächtnis 21 © 2008 Flashback Data Archives – Administration (1) Manuelles Bereinigen eines Flashback Data Archives ALTER FLASHBACK ARCHIVE flasharch_long PURGE BEFORE TIMESTAMP (SYSTIMESTAMP – INTERVAL '1' Year) Folgende DDL-Anweisungen sind für Quelltabellen, für die Flashback Data Archive aktiviert ist, nicht erlaubt (ORA-55610) ALTER TABLE Befehl Löschen, Umbenennen oder Modifizieren einer Spalte Durchführen von Partitions- oder Subpartitionsoperationen Konvertierung einer LONG-Spalte in eine LOB-Spalte UPGRADE TABLE, mit oder ohne einer INCLUDING DATA Klausel DROP TABLE Befehl RENAME TABLE Befehl TRUNCATE TABLE Befehl Oracle Database 11g – Total Recall, eine Reise in die Tiefen des Oracle Gedächtnis 22 © 2008 Flashback Data Archives – Administration (2) Was passiert bei Platzmangel in Flashback Data Archives? … Sun Sep 07 00:56:31 2008 Flashback Archive FLASHARCH_SHORT ran out of space in tablespace FDA_SHORT_RET. Flashback archive FLASHARCH_SHORT is full, and archiving is suspended. Please add more space to flashback archive FLASHARCH_LOW. Sun Sep 07 01:56:32 2008 Flashback Archive FLASHARCH_SHORT ran out of space in tablespace FDA_SHORT_RET. … Datenbank läuft normal weiter, Fehlermeldungen erscheinen im Alert.log Oracle Database 11g – Total Recall, eine Reise in die Tiefen des Oracle Gedächtnis 23 © 2008 Flashback Data Archives – Administration (3) Kein einfaches Löschen eines Flashback Data Archive Tablespaces DROP TABLESPACE FDA_LONG_RET INCLUDING CONTENTS AND DATAFILES *ERROR at line 1:ORA-00604: error occurred at recursive SQL level 1ORA-55622: DML, ALTER and CREATE UNIQUE INDEX operations are not allowed on table "SCOTT"."SYS_FBA_TCRV_19334" Zuerst „De-Archivieren“ und dann das Flashback-Archiv löschen ALTER TABLE scott.cust2 NO FLASHBACK ARCHIVE; DROP FLASHBACK ARCHIVE flasharch_long; Anschließend das zugehörige Tablespace löschen DROP TABLESPACE FDA_LONG_RET INCLUDING CONTENTS AND DATAFILES; Abhängigkeiten sind zu beachten; Flashbacks müssen in der richtigen Reihenfolge erfolgen, da ansonsten Constraint Fehler auftreten können Oracle Database 11g – Total Recall, eine Reise in die Tiefen des Oracle Gedächtnis 24 © 2008 Flashback Data Archives – Administration (4) DML auf Flashback-Archivtabellen sind nicht erlaubt, Erstellung von zusätzlichen nonunique Indices sind zulässig DELETE FROM SYS_FBA_HIST_73420 WHERE ENAME='KING' ERROR at line 1: ORA-55622: DML, ALTER and CREATE UNIQUE INDEX operations are not allowed on table "SCOTT"."SYS_FBA_HIST_73420" Flashback Data Archives sind nicht exportierbar/importierbar (weder über Data Pump noch über die alten exp/imp utilities) ORA-31693: Table data object "SCOTT"."SYS_FBA_DDL_COLMAP_22297" failed to load/unload and is being skipped due to error: ORA-02354: error in exporting/importing data ORA-01426: numeric overflow ORA-31693: Table data object "SCOTT"."SYS_FBA_DDL_COLMAP_22299" failed to load/unload and is being skipped due to error: ORA-02354: error in exporting/importing data ORA-01426: numeric overflow Oracle Database 11g – Total Recall, eine Reise in die Tiefen des Oracle Gedächtnis 25 © 2008 Total Recall – Erwartungen und Realität Einfache Erstellung und Administration von Flashback Data Archives Datensicherheit – nicht jeder darf historische Daten abfragen Wissen vermitteln ist erst der Anfang. Wissen umsetzen das Entscheidende. Keine Zeitbeschränkung – jeder Aufbewahrungszeitraum ist möglich Effizientes Management der Flashback Data Archives durch Oracle Integration EM11g Database Control Option ist mit zusätzlichen Kosten verbunden Oracle Database 11g – Total Recall, eine Reise in die Tiefen des Oracle Gedächtnis 26 © 2008 Total Recall – Anmerkungen Für unterschiedliche Aufbewahrungszeiträume sollten unterschiedliche Flashback Data Archives benutzt werden Möglichen Performance Overhead gut testen! Wissen vermitteln ist erst der Anfang. Wissen umsetzen das Entscheidende. Flashback Data Archives eignen sich gut … Oracle Database 11g – Total Recall, eine Reise in die Tiefen des Oracle Gedächtnis Zur Bereinigung menschlicher DMLFehler Zur Abfrage historischer Daten über lange Zeiträume hinweg (Bereinigungsintervall kann auf täglicher Basis konfiguriert werden) 27 © 2008 Vielen Dank für Ihre Aufmerksamkeit! Q&A Basel · Baden · Bern · Lausanne · Zürich · Düsseldorf · Frankfurt/M. · Freiburg i. Br. · Hamburg · München · Stuttgart · Wien