Redesign des vorhandenen Backup Gliederung Seite I; Einleitung - Entwicklungstendenzen - Entfernen nicht mehr benötigter Daten 2 II; Lifecycle Management A; Informationslebenszyklus-Management (ILM) B; Implementierung von ILM auf 10g 1; Definition von Daten-Klassen 2; Erstellen von Speichermedientypen zu den Daten-Klassen 3; Verwaltung der Daten für den Zugang 3.1 Sicherheit auf DB-Ebene 3.2. Virtuelle private DB (VPD) 3.3 Auditing 3.4 Verschieben der Daten unter Verwendung von Partitioning 3.5 Datenverschlüsselung III; Ergänzungen zu ILM in 10g 3 4 5 6 7 8 9 11 A; Storage Management 12 - ASM (Automatic Storage Management) B; Data Movement 13 C; Informationstransfer zwischen DBs 1; Transportable Tablespaces 2; Data Pump 14 3; Streams D; Datensicherheit 15 1; Anwenden von Flashback 2; Schutz vor Korruption 3; Schutz vor Verlust der Gesamt-DB 4; Sicherheit und Schutz der Daten vor Veränderung 16 4.1; XML 5; Verfahren zur Reduzierung des Speichers 17 - Datenkompression und Beseitigen ungenutzten Speicherplatzes - Advanced Compression 6; Konsolidierung der Daten (Materialized Views) 18 IV; Anhang A; Erstellung von Speicherungstypen in der Oracle DB B; Beispiel zu VPD (virtuelle private DB) C; Der ILM-Assistent D; Konvertierung in XML (Beispiel) 19 21 22 23 1 I: Einleitung Entwicklungstendenzen Die Entwicklung geht dahin, dass das klassische Backup auf Tape nicht mehr dem technologischen Fortschritt entspricht. Im Mittelpunkt steht nunmehr das „Lifecircle Management“ der Daten. Es erfolgt kein Backup mehr. Die Daten werden bevorzugt in Partitionen gespeichert. Grund für den technologischen Wandel ist, dass es verhältnismäsig preiswerte ATALaufwerke auf dem Markt gibt. Die Kosten hierfür sind nur unwesentlich höher pro Terrabyte als wie beim Tape. Ferner ergeben sich aus der Archivierung mittels Tape zahlreiche Probleme, die bei ONLINEArchivierung nicht auftreten. - werden Daten vom Tape benötigt, so muß das Tape erst einmal gefunden werden ferner sollten die Daten auf dem Tape noch lesbar sein im Lauf der Jahre hat sich das Verfahren für den Reload der Daten aus dem TapeArchiv geändert, sodaß weitere Entwicklungsarbeit notwendig wird. Ein wichtiger Vorteil der Speicherung der Daten auf Low Cost Disk ist die online Verfügbarkeit der Daten in der DB und deren aktuelles Format. Indem die historischen Daten in der DB gehalten werden, so hat dies keine Auswirkung auf den Sachverhalt der Zeit für das Backup und den Umfang des Backup. Wenn RMAN angewiesen wird die DB zu sichern, so werden von RMAN nur die Änderungen erfasst. Da die historischen Daten sich nicht weiter ändern, so können diese auf READ ONLY gesetzt werden. Das Backup hierfür erfolgt nur einmalig. Deswegen ist sind die Anforderungen an die Zeit des Backups und an die Speicherung in etwa gleich der Archivierung per Tape. Im letzteren Fall werden die Daten in einem Set von Bändern gesichert. Entfernen nicht mehr benötigter Daten: Ein weiteres Problem besteht in der physischen Entfernung der Daten aus der DB. Im Falle der Verwendung von Tape ist dies ein sehr zeitaufwendiger Prozeß. Insbesonders ist dies der Fall von SQL-DELETE. Der schnellste um Daten aus der DB zu entfernen, ist die vorangegangene Speicherung in der jeweiligen Partition. Um diese Daten nun zu entfernen genügt z.B. die Anweisung: ALTER TABLE orders DROP PARTITION orders_pre_2008. 2 II; Lifecycle Management Die Herausforderungen für die Organisation ist das Verständnis dafür, wie sich die Daten entwickeln, ihre Verwendung sich im Laufe der Zeit verändert und schließlich wie lange diese erhalten bleiben. ILM ist dafür geeignet diesen Herausforderungen zusammen mit einer Kombination von Prozessen, Policies, Software und Hardware zu begegnen, sodaß die geeignete Technologie für jede Phase des Daten-Lebenszykluses angewendet werden kann Für die Datensicherung in Verbindung mit Partitioning wird von Oracle das Produkt ILM (Informationslebenszyklus-Management) empfohlen. A; Informationslebenszyklus-Management (ILM) Mit ILM lassen sich Daten effektiver verwalten. Der ILM Assistent von Oracle für 10g ist kostenlos. Aber auch EMC bietet dieses Produkt an. Zusammen mit Partitionierungsfunktionen ermöglicht dieses Tool die rechtzeitige Migration oder Löschung der Daten. Die Entwicklung von ILM wurde von EMC erweitert. Es dient u.a. der Verwaltung von Mails,PDFDateien und EXCEL-Dateien. Selten genutzte Dateien oder ungenutzte Dateien werden auf langsamere und billigere Speicher-Systeme ausgelagert. Häufig benutzte Inhalte hingegen werden auf teure Speichermedien (SAN-Maschinen) hinterlegt. E-Mail, Dokumente, Images und weitere Datentypen Die Oracle DB speichert sowohl strukturierte als auch unstrukturierte Daten. Bisher werden diese Daten wie E-Mail, Dokumente, Images und weitere Datentypen außerhalb der DB gespeichert und außerdem manuell verwaltet. Dieses Scenario kann die Ursache für zahlreiche Probleme sein. U.a. können diese Dokumente verloren gehen. Ferner kann nicht kontrolliert werden, wer diese Dokumente unberechtigt liest. Oracle begegnet diesem Problem mit „Oracle Collaboration Suite (OCS). OCS ermöglicht ermöglicht die Speicherung von beliebigen Typen an Dokumenten bezw. Images. Dabei merkt der Anwender nicht, dass diese Daten aus der Oracle DB stammen. Ebenso könnten die E-Mails des gesamten Unternehmens zentral in der Oracle DB gespeichert werden. Für die Speicherung der Daten in der DB spricht die Performance, leichtere Verwaltbarkeit und ihre Sicherheit. 3 B; Implementierung von ILM auf 10g Die Implementierung von ILM erfolgt in den Stufen: 1; Definition von Daten-Klassen 2; Erstellen von Speichermedientypen zu den Daten-Klassen 3; Verwaltung der Daten für den Zugang, bezw. Migration getrennt nach Klassen 1; Definition von Daten-Klassen Die am meisten angewendete Klassifizierung ist die je nach Alter oder Datum. Es kann jedoch auch nach anderen Klassen klassifiziert werden, wie z:B. nach Produkt oder Sicherheit. Es sind auch zusammengesetzte Klassen möglich. Beispiel Bestellsystem: Es wird das Datum der Bestellung auf Zeilenebene als Klasse ausgewählt. Alle Bestellungen für das Produkt Q1 werden als klassenunabhängige Einheit angesehen. Die Bestellungen für das Produkt Q2 werden einer anderen Klasse zugeordnet. Nun können die Klassen über Partitionierung implementiert werden. Hierbei werden zwar die Daten physikalisch separiert, die Applikation sieht jedoch alle Bestellungen. Partitioning In der Partitionierung werden die Daten anhand eines Wertes physikalisch platziert. Oracle unterscheidet folgende Partitionierungstechniken: - Range ( bevorzugt) Hash Composite List Vorteil der Partitionierung besteht in der Möglickeit, die Daten über das jeweilige Speicher-Medium zu verteilen. Das Verteilkriterium ist dabei die Häufigkeit der Nutzung. Der Anwender sieht die Daten online, unabhängig von dem Speichermedium. Es werden keine Änderungen in der Aplikation notwendig. Wenn neue Partitionen angehängt werden sollen (z.B. wegen weiteren Datums), so wird dies mit der Anweisung ADD PARTITION bewirkt. Ein weiterer Vorteil bei der Partitionierung ist die Möglichkeit, dass jede Partition ihren eigenen lokalen Index hat. Die Performance der Query wird erhöht, wenn der Optimizer Partition Elimnation verwendet. Dabei richtet sich die Query nicht an alle Partitionen, sondern nur an die relevanten. 4 2; Erstellen von Speichermedientypen zu den Daten-Klassen Die Abbildung zeigt die Verwendung der Daten im Laufe der Zeit. Im Beispiel werden drei Speicherungstypen definiert. Sie enthalten zusammen alle Daten. - High Performance - Low Cost - Historical Auf dem „High Performance“ Speichertyp werden alle wichtigen und häufig angegangen Daten gespeichert. Er liegt auf schnellen SAAN Disks. In obigem Beispiel ist dies die Partition, welche die aktuellen Bestellungen zum Produkt Q1 enthält. Diese Bestellungen werden als besonders wichtig klassifiziert. Der „Low Cost“ Speicherungstyp ist der Ort wo die meisten Bestellungen gespeichert werden. Im Beispiel sind dies die Bestellungen für das Produkt Q2, Q3 und Q4. Dieser Speicherungstyp besteht aus großen ATA Disks oder Disks mit großer Kapazitat, wie z.B. in modularen Speicher-Arrays. Kennzeichnend für den Speicherungstyp ist, dass für diesen nur geringe Kosten anfallen. Der Speichertyp zu „Historical“ ist der Ort wo Daten liegen, auf die relativ selten zugegriffen wird oder die selten modifiziert werden. Als Speichertyp werden hier besonders preiswerte Medien verwendet, wie z.B. ATA Laufwerke. Laufwerke deren Kosten kaum höher sind als die für die Speicherung auf Tape. Zusätzlich entfallen hier die Nachteile wie in der Einleitung beschrieben. Im Beispiel Bestellungen käme zu den Produkten der Typ „alte Bestellungen“, der hier „Historical“ zugeordnet wird. Im Anhang befindet sich ein Beispiel für das Erstellen von Speicherungstypen sowie ein Screenshot von ILM. 5 3; Verwaltung der Daten für den Zugang, bezw. Migration getrennt nach Klassen Der letzte Schritt dient dazu dass nur berechtigte User Zutritt zu den Daten haben. Es gibt eine Sammlung von Techniken zur Datenmigration zwischen den Speicherungstypen. Kontrolle des Datenzugangs Eine Kontrolle des Datenzugangs ist besonders bedeutsam für das Livecycle Management. Im Laufe der Jahre kann sich die Zugangsberechtigung zu den Daten ändern. Zusätzlich gibt es regulatorische Anforderungen zur Datenhaltung, wenn diese im elektronischen Format gehalten werden. Zum Beispiel verlangt gegebenenfalls das Finanzamt den Nachweis, dass die Daten vor unberechtigtem Zugriff und Änderungen sicher sind. Ferner muß bei geänderten Daten der Nachweis geführt werden, wer diese verändert hat. Sicherung der Daten ist ganz erheblich einfacher, wenn diese in der DB gehalten werden. Die Sicherung wird unterstützt von: 3.1; Datenbank Sicherheit 3.2; Virtuelle private Datenbank 3.3; Auditing 3.4; Partitioning 3.5; Daten-Verschlüsselung 3.1; Sicherheit auf Datenbank Ebene Ursprünglich wird die DB über das Passwort abgesichert. Zusätzliche Sicherheit wird über GRANT / REVOKE realisiert. 3.2; Virtuelle private DB (VPD) Schützt den Datenzugang. Der User erhält einen View zu einen oder mehreren Tabellen. Es werden Policies mit sehr differenzierten Details für den Zugang erstellt. Z.B. welche Spalten und Zeilen ein User sehen darf. Multiple Policies können definiert werden, sodaß verschiedene User in ihren Applikationen nur ausgewählte Views der Daten sehen. Da die Policies auf DB-Ebene definiert sind, so erzwingen sie die Einhaltung der Policies, und zwar unerheblich wie der Dateizugriff erfolgt. z.B. Wenn eine Policy festlegt, dass ein User nur seine eigenen Daten sehen darf , formt VPD um: aus SELECT * FROM table formt VPD um in: SELECT * FROM table WHERE employee = ‚username’. Daraus läßt sich eine sehr sichere Umgebung definieren. In ihr kann man sichergehen, dass kein authorisierter Zugang erfolgt. Ein weiterer Vorteil von VPD ist, dass hinsichtlich historischer Daten man genau festlegen kann, welche Daten der User sehen darf. z.B. Eine Standard Policy legt fest, dass kein Zugang zu historischen Daten erfolgen darf. Eine weitere Policy legt fest, dass bestimmte User historische Daten ab dem Jahr 2008 sehen dürfen. Wenn ein User eingibt „SELECT * FROM orders, so formt VPD diesen String um in: SELECT * FROM orders WHERE time_id > `31-Dec-2007`. Ein weiteres Beispiel siehe im Anhang 6 3.3; Auditing Aus Gründen des Business bezw. wegen Richtlinien ist es erforderlich, dass nicht nur die Daten geschützt werden, sondern es ist von Interesse, wer auf die Daten zugegriffen hat. Für die Aufsicht mag es erforderlich sein, dass man in der Lage ist zu benennen, wann der Datensatz erstellt worden ist, sondern auch wann auch immer dieser abgeändert wurde und durch wen. Auditing sollte auf „enabled“ gesetzt werden. Dann landen alle Daten über den Datenzugriff im AuditTrail. Beispiel: SQL> AUDIT insert,update,delete ON ilm_orders BY ACCESS. Eine Abfrage des Audit-Trail zeigt, dass der User ILM_NORMAL versucht hat einige Bestellungen abzuändern. Dabei war er nicht erfolgreich. SQL> SELECT username, timestamp ,returncode, sql_text FROM dba_audit_trail; USERNAME TIMESTAMP RETURNCODE SQL_TEXT ILM_POWER 20-JAN-05 0 insert into orders select * from orders where time_id > '01-Jan-1994' ILM_NORMAL 20-JAN-05 2004 delete from ilm.orders where time_id ='01-Jan-2007' Für weitere Details zu Auditing wird das vom selben Author erstellte Paper “Fine Grained Auditing” (30 Seiten) empfohlen. 3.4; Verschieben der Daten unter Verwendung von Partitionierung Im Laufe des Lebenszyklus der Daten wird es notwendig sein, diese zu verschieben. Einbeziehung von Partitioning im DB-Design, erleichtert ganz erheblich die Verschiebung der Daten, jeweils gemäß ihrer Verwendung in ihrem Lebenszyklus. Wird die in einer Partition enthaltene Information nicht mehr regelmäßig benötigt, so kann diese Partition mit dem Kommando MOVE PARTITION auf preiswertere Platten verschoben werden. Beispiel: Eine neue Partition wird für den hoch performanten Speicherungstyp angelegt. Er dient der Speicherung der Bestellungen von Oktober bis Dezember 2008. Die Bestellungen von Juli bis September 2008 werden von dem hoch performanten Speicherungstyp auf den kostengünstigeren Speicherungstyp LOW_COST verschoben. ALTER TABLE orders ADD PARTITION orders_octdec_2008 VALUES LESS THAN (TO_DATE('1/10/2008','DD/MM/YYYY')) TABLESPACE ilm_high_performance UPDATE INDEXES ALTER TABLE orders MOVE PARTITION orders_julsep_2008 TABLESPACE ilm_low_cost UPDATE INDEXES; 7 Partitionierung kann auch dazu verwendet werden, um zwischen partitionierten und nicht partitionierten die Daten zu verschieben mittels EXCHANGE PARTITION So können Daten in einer normalen Tabelle zuerst gesammelt werden und dann in eine partitionierte Tabelle verschoben werden. Das Gleiche umgekehrt. Zeilen können automatisch von einer Partitition zur anderen verschoben werden wenn für die Partition ROW MOVEMENT eingeschaltet worden ist. z.B. ein Kunde hat seit den vergangenen 12 Monaten nichts bestellt. Falls hier ein Update erfolgt, so wird der Datensatz zu dem Kunden automatisch zu einer Partition im Low-Cost Speichertyp weitergeleitet. 8 3.5; Datenverschlüsselung Die Sicherheit auf DB-Basis reichte vor einigen Jahren noch aus. Im Laufe der Jahre entwickelte sich die Notwendigkeit nachzuweisen, dass die Daten von Niemanden verändert worden sind. Der Nachweis dafür, dass eine Datei niemals verändert worden ist kann mit der cryptograpischen Signatur erfolgen. Dieses gleicht einer persönlichen Unterschrift unter ein Dokument. Oracle DB 10g erstellt eine cryptographische Signatur mittels des Package DBMS_CRYPTIO. Eine Spalte, ein Datensatz oder ein Abfrage-Ergebnis kann in das Package eingegeben werden. Die daraus resultierende Signatur kann dann mit den Daten oder an einem anderen neutralen Ort abgespeichert werden. Jederzeit kann die Signatur wieder erstellt werden und mit der ursprünglichen Signatur verglichen werden zum Nachweis, dass die Datei ganz und gar nicht verändert worden ist. Beispiel: Es wird das Package DBMS_CRYPTO verwendet. Damit wird die in der DB gespeicherte KreditkartenNr verschlüsselt und entschlüsselt. Diese Nummer wird im Bestellsystem verwendet. DECLARE cc_number VARCHAR2(16) := '4567123443215678'; cc_raw RAW(128) := UTL_RAW.CAST_TO_RAW(CONVERT(cc_number,'AL32UTF8','US7ASCII')); key_string VARCHAR2(8) := 'ilm7demo'; raw_key RAW(128) := UTL_RAW.CAST_TO_RAW(CONVERT(key_string,'AL32UTF8','US7ASCII')); encrypted_cc RAW(2048); encrypted_string VARCHAR2(2048); decrypted_cc RAW(2048); decrypted_string VARCHAR2(2048); BEGIN dbms_output.put_line('Credit Card Number : ' || CONVERT(UTL_RAW.CAST_TO_VARCHAR2(cc_raw),'US7ASCII','AL32UTF8')); encrypted_cc := dbms_crypto.Encrypt( src => cc_raw, typ => DBMS_CRYPTO.DES_CBC_PKCS5, key => raw_key); dbms_output.put_line('Encrypted Credit card Number : ' || rawtohex(UTL_RAW.CAST_TO_RAW(encrypted_cc))); decrypted_cc := dbms_crypto.Decrypt( src => encrypted_cc, typ => DBMS_CRYPTO.DES_CBC_PKCS5, key => raw_key); decrypted_string := CONVERT(UTL_RAW.CAST_TO_VARCHAR2(decrypted_cc),'US7ASCII','AL32UTF8'); dbms_output.put_line('Decrypted Credit Card Number : ' || decrypted_string); END; Implementing DECLARE cc_number VARCHAR2(16) := '4567123443215678'; cc_raw RAW(128) := UTL_RAW.CAST_TO_RAW(CONVERT(cc_number,'AL32UTF8','US7ASCII')); key_string VARCHAR2(8) := 'ilm7demo'; raw_key RAW(128) := UTL_RAW.CAST_TO_RAW(CONVERT(key_string,'AL32UTF8','US7ASCII')); encrypted_cc RAW(2048); encrypted_string VARCHAR2(2048); decrypted_cc RAW(2048); decrypted_string VARCHAR2(2048); BEGIN dbms_output.put_line('Credit Card Number : ' || CONVERT(UTL_RAW.CAST_TO_VARCHAR2(cc_raw),'US7ASCII','AL32UTF8')); 9 encrypted_cc := dbms_crypto.Encrypt( src => cc_raw, typ => DBMS_CRYPTO.DES_CBC_PKCS5, key => raw_key); dbms_output.put_line('Encrypted Credit card Number : ' || rawtohex(UTL_RAW.CAST_TO_RAW(encrypted_cc))); decrypted_cc := dbms_crypto.Decrypt( src => encrypted_cc, typ => DBMS_CRYPTO.DES_CBC_PKCS5, key => raw_key); decrypted_string := CONVERT(UTL_RAW.CAST_TO_VARCHAR2(decrypted_cc),'US7ASCII','AL32UTF8'); dbms_output.put_line('Decrypted Credit Card Number : ' || decrypted_string); END; Implementing Der Output der PL/SQL Prozedur zu der Kreditkarte 4567123443215678 lautet verschlüsselt: 334441423444433532353134383644323339423344454638323839393146423639434134323543343445363742453030 Entschlüsselt: 4567123443215678 10 III; Ergänzungen zu ILM in 10g Folgende Bereiche ergänzen ILM: - Partitioning (siehe im Anhang) - Storage Management - Data Movement - Sicherheit und Schutz der Daten vor Veränderung - Verfahren zur Reduzierung des Speichers A;Storage Management Für die Betrachtung des Lifecycle Management sind die Hardware zur Datenhaltung sowie die Art und Weise wie die Daten verwaltet, gesichert und deren Zugang gestaltet wird. Es werden drei Gruppen unterschieden: - Disk Storage (SCSI,ATA,Cached Disk Array, usw.) - Optical Disk (CD-ROM,WORM, usw) - Tape (eignet sich nicht für den Online Zugang) Der Zugang der Daten auf Tape ist nur sequentiell. Der wahlfreie Zugang auf Optical Disk ist relativ langsam. Der große Vorteil der Optical Disk ist die längere Erhaltungsdauer der Daten im Gegensatz zu Tape oder Disk. Die Optical Disk ist unempfindlich gegenüber Magnetismus in der Umgebung. Eine (welche ?) Studie in den U.S.A. belegte, dass bei großem Datenumfang (Terrabyte) die Optical Disk gegenüber dem Tape die kostengünstigere Lösung darstellt. Automatic Storage Management (ASM) Das Angebot preiswerter ATA Disks hat auf dem Markt für Speicherungssysteme einen entscheidenen Technologiewandel bewirkt. Siehe hierzu auch in der Einletung (Entwicklungstendenzen). Oracle begegnet dieser technischen Entwicklung mit zahlreichen Tools für die Disk-Verwaltung. Eines dieser Tools ist „Automatic Storage Management“ ASM. ASM ermöglicht es, große Pools von Disks relativ einfach zu verwalten. Dabei werden Disks und Dateien in sogenannten „Diskgroups“ erfasst. Alle DB-Dateien mit entsprechenden Strukturen beziehen sich nunmehr auf eine Disk-Group und nicht mehr auf einen physischen Speicherort. Der DBA kann über ASM nunmehr Disks dynamisch zuordnen oder entfernen. So kann die DB ohne Shutdown vergrößert werden. Daten können gespiegelt werden. Ferner werden dieDaten über die Disks gleichmäßig verteilt, sodaß keine „Hot Spots“ entstehen. 11 Bei der Verwendung von ILM (siehe -> ILM) empfiehlt sich die Einteilung in die Gruppen: - high performance - low cost - historical Jedem dieser Gruppen kann nun eine Diskgroup zugeordnet werden. Wenn ASM zusammen mit Data Partitioning auf eine Table angewendet wird, so können sich die Partitionen über alle Disk – Gruppen erstrecken. Wenn sich später ergeben sollte, die Daten auf eine andere Disk-Gruppe zu transferrieren, so kann dies geschehen mit: - MOVE PARTITION - ONLINE REORGANIZATION - COPY eines Tablespace gefolgt von RENAME 12 B; Data Movement Datendateien und Tabellen einen anderen Speicherort zuweisen Die Zuweisung eines anderen Speicherortes erfolgt mit: ALTER TABLESPACE RENAME DATAFILE Dieser Schritt erfordert voraussehende Planung, um sicherzugehen, dass die zu bewegende Datei keine Zahlreiche Zugriffe hat. Tabellen können auch bewegt werden unter Anwendung des Packages: DBMS_REDEFINATION Vorteil hierbei ist, dass User auf die Tabelle online zugreifen können, obwohl dieser ein neuer Speicherort zugewiesen wird. C; Informationstransfer zwischen DBs Informationsaustausch zwischen DBs kann erfolgen mit: - Transportable Tablespaces - Data Pump - Streams 1;Transportable Tablespaces In der Vergangenheit dauerte ein EXPORT/IMPORT im Extremfall mehrere Stunden.. „Transportable Tablespaces“ ist ein Mittel, um umfangreiche Datenvolumina unter Datenbanken relativ schnell zu bewegen, unabhängig vom Betriebssystem. Es werden nicht mehr einzelne Datensätze extrahiert. Unter der Voraussetzung, dass die Daten in der Tablespace in sich geschlossen sind, also keine Links zu Daten außerhalb, kann eine Tablespace komplett in eine andere DB transferriert werden. Dieses Verfahren eignet sich besonders für Partitionen. Transportable Tablespaces lassen sich auf CDROM oder DVD speichern. Diese CD kann dann gemountet werden. Mittels des Kommandos IMPDP kann das Tablespace in eine andere DB eingefügt werden. Normalerweise werden Daten, die aus der DB entfernt worden sind, nicht wieder zurückgeschrieben . Im Falle einer Revision kann ein Restore notwendig werden. In diesem Fall kann der Tablespace schnell zurückgeladen werden. Beispiel siehe Anhang 13 2; Data Pump Das Verfahren mit „Transportable Tablespaces“ für den Fall umfangreichen Datentransfers kann manchmal nicht den vorgesehenen Zweck erfüllen. Dies ist z.B. der Fall, wenn im darunterliegenden Betriebssystem die Reihung der Bytes unterschiedlich ist. “Data Pump“ ist neu ab Version 10g. Es umgeht die Problematik des Export/Import Utility, wenn auf Beiden Seiten unterschiedliche ORACLE Versionen vorhanden sind. “Data Pump“ wird dazu verwendet, Daten in das Dateisystem des Betriebssystem zu transferrieren.Auf dem Zielsystem wird dann die transferrierte Datei in die DB geladen. 3; Streams Oracle Streams ermöglicht das Sharing von Informationen zwischen DBs. Es ermöglicht bequem und effizient Daten für andere Datenbanken zu replizieren. Jede Veränderung in der ursprünglichen DB sei es mittels DML oder DDL, wird erfasst und bei anderen DBs repliziert. Mittels Rules kann eine Auswahl der zu sendenden Daten getroffen werden. Auf die zu sendenden Daten können auch Transformationen angewendet werden. Für den Transfer von Tablespaces wird das Package DBMS_STREAMS_TABLESPACE_ADM empfohlen. Vorteil hierbei ist, dass die einzelnen Zwischenschritte für den Transfer von Tablespaces entfallen. Es kann im Zusammenhang mit „Transportable Tablespaces“, „Data Pump“ und dem Package DBMS_FILE_TRANSFER angewendet werden. Mittels Streams entfällt die Notwendigkeit Anwendungen für individuellen Datenauszug und Ladevorgänge zu entwickeln. 14 D; Datensicherheit Wenn große Datenmengen online gehalten werden so sollten folgende Störfälle zur Datensicherheit berücksichtigt werden: - Hardwarefehler (RAC & ASM) Menschliche Fehler (Flashback) Daten Korruption (RMAN / Flash Recovery Area) Komplettes Disaster (Data Guard) ungewollte Datenänderungen Datenstruktur (Datentyp, weitere Spalte, DB-Version, Platform) haben sich geändert Oracle bietet die folgenden Möglichkeiten zur Störungsbeseitigung an: 1; Anwenden von Flashback Daten werden ungültig. Dies ist z.B. der Fall wenn eine Applikation die DB korrumpiert oder der DBAdministrator einen Batch zweimal startet. Diese Störung kann mit Flashback relativ einfach behoben werden. Es bedarf nur eines Kommandos um die DB in einen zeitlich verschiedenen Zustand zu wandeln. Da die die DB nur die veränderten Blöcke aufzeichnet berührt ein Flashback-Kommando nur die veränderten Datenblöcke. 2; Schutz vor Korruption Wenn die DBs an Umfang zunehmen so vergrößert sich auch die Zeit für das Backup. Gleichzeitig vergrößern sich die Anforderungen an den Speicher. Oracle empfiehlt hier das „inkrementielle Backup“ als Ersatz für das Full Backup.Diese inkrementiellen Backups sollten auf ATA – Laufwerken online gespeichert werden und nicht auf Tape. Damit lässt sich innerhalb kürzester Zeit das Recovery bei Bedarf durchführen. Um im Umfang vor größerer Korruption zu schützen, die z.B. ein komplettes Restore der DB erfordern, empfiehlt Oracle eine „Flashback Recovery Area“. Letztere fasst alle Dateien, die für das Recovery maßgeblich sind. Dabei wird die „Flasback Recovery Area“ online gehalten und erfasst auch das letzte Backup der Datenbank. Mit den inkrementiellen Backups auf Disk (ATA) dauert ein Recovery nunmehr nur noch einzelne Minuten. Die Verwendung von ATA und „Flash Recovery Area“ ist der Lösung unter Verwendung von Tape eindeutig überlegen. 3; Schutz vor Verlust der Gesamt-DB Im Hause ist existiert eine „Cold Standby“. Bei Umwandlung in eine Warm-Standby kann bei Verwendung ab DB-Version 11g diese als Backup Server mit eingesetzt werden. Eine Logical Standby empfiehlt sich für „Hot Patching“ und für „Rolling Upgrades“. Auch für Zeiten der Wartung ist diese Vorgehensweise zu empfehlen, da die Downtime hier entfällt. 15 4; Sicherheit und Schutz der Daten vor Veränderung Im Laufe der Jahre kann die Notwendigkeit entstehen, dass sich die Daten nicht mehr verändern. Informationen werden in der Oracle DB in Tablespaces gespeichert. Im laufe der Zeit altern diese Daten . Die Tablespaces sollten dann auf READ-ONLY gesetzt werden mit ALTER TABLESPACE ilm_historical READ ONLY Mit diesem Kommando wird verhindert, dass sich die Daten unter keinen Umständen ändern. Da die Daten in dem READ_ONLY Tablespace sich nicht mehr ändern können werden diese in Zukunft nicht mehr mit RMAN gesichert, wenn sie einmal gesichert worden sind. Diese Technik angewendet auf „historische Daten“ verhindert dass keine Resourcen für das Backup nicht mehr veränderbarer Daten verwendet werden. Ein weiterer sehr beachtlicher Vorteil bei READ ONLY ist, dass diese sich für die Speicherung auf CDROM,DVD oder WORM anbieten. Wenn der Parameter READ_ONLY_OPEN_DELAYED Parameter in der INIT<SID>.ORA auf TRUE gesetzt wird, dann wird Oracle erst den Zugriff auf diese READ_ONLY Tablespaces realisieren, wenn dieser real angefordert wird. Datenstruktur (Datentyp, weitere Spalte, DB-Version, Platform) haben sich geändert Sollte nun entschieden werden die Daten auf Tape zu archivieren, so müßte dabei bedacht werden dass aus der DB entfernte Daten zu einem zukünftigen Zeitpunkt evtl. wieder benötigt werden. Wichtig ist dieser Punkt wenn ein Datensatz für die Revision aufgefunden und dargestellt werden soll. Die Daten müssen bis mindestens 10 Jahre rückwirkend darstellbar bleiben, unabhängig von der DB Version (vielleicht schon 14g) und unabhängig von der Platform. Deswegen sollte ein Format gewählt werden welches diesen Umstand berücksichtigt. Eine beliebte Lösung ist das XML-Format.. Im XML-Format lassen sich Daten unabhängig von der Hardware bezw. Software verwenden. Man umgeht hiermit auch die Schwierigkeit, dass das Format im Laufe der Zeit abgeändert wird.z.B. wenn ein Datentyp umgewandelt worden ist oder wenn an den Datensatz neue Felder anghängt worden sind. Kurzum die Daten können in XML rückwirkend dargestellt werden, unabhängig von der Art der Speicherung und unabhängig von der Platform. ORACLE 10g bietet für die Wandlung in XML-Format XML DB an. Beispiel für ein third Party Tool siehe unter: http://www.stylusstudio.com/convert_to_xml.html Beispiel für eine XML-Konvertierung siehe Anhang 16 5; Verfahren zur Reduzierung des Speichers Datenkompression und Beseitigen ungenutzten Speicherplatzes Wenn sich die Daten nicht mehr ändern, sollten diese komprimiert werden. Deswegen, wenn die Partition zur Peripherie mit geringen Kosten verschoben wird, so können diese zugleich komprimiert werden. Zu ILM wird weiter unten eingegangen. Komprimierung kann die Performance für den Datenzugriff beschleunigen. Ebenso ist dies der Fall für Backup und Recovery. ALTER TABLE orders MOVE PARTITION orders_octdec_2008 TABLESPACE ilm_low_cost COMPRESS Für Entfernen ungenutzten Speicherplatzes: ALTER TABLE orders SHRINK SPACE; Ferner kann PCTFREE auf Null gesetzt warden. Oracle bietet ab Version 11g „Advanced Compression“ an. Advanced Compression Hilft beim Verwalten der Daten. Es komprimiert jeden Datentyp, inklusive unstrukturierte Daten, wie z,B. Dokumente, Bilder und Multimedia. Ebenso komprimiert es den Verkehr im Netz sowie die Daten die gerade in einem Backup gesichert werden. Eigenschaften sind: - OLTP Kompression: ermöglicht die Kompression von strukturierten Daten bei DML Operationen. - Absicherung replizierter Daten: entdeckt und entfernt doppelte Datei-Kopien gespeicherter Daten. - komprimiert auch unstrukturierte Daten - komprimiert RMAN Backups und DATApump Export - komprimiert bei DATA-GUARD die über das Netzwerk gesendeten Redo-Logs 17 6; Konsolidierung der Daten (Materialized Views) Wenn Informationen erhalten werden, so wird zuerst daran gedacht diese in der ursprünglichen Form zu erhalten. Nach einiger Zeit ist man nicht mehr daran interessiert z.B. an den Details zu einem Kunden an einem bestimmten Tag. Nach einiger Zeit genügt die Zusammenfassung der Daten. Oracle bietet hierzu die Möglichkeit der „Materialized Views“ an. Diese können den Umfang der Speicherung reduzieren. Ist ein Materialized View aus der ursprünglichen Datenquelle erst einmal erstellt, so genügt für den Datenrefresh , dass nur die inkrementiellen Änderungen angewendet werden. Beispiel: Ein Materialized View wird angelegt. Dieser speichert die Bestellungen des Kunden, zusammengefasst nach Anzahl und Gesamtwert pro Monat. CREATE MATERIALIZED VIEW Cust_orders BUILD IMMEDIATE REFRESH COMPLETE ENABLE QUERY REWRITE AS SELECT o:cust_id,T.month,COUNT(*) AS num_orders, sum(amount_sold) as total_spend FROM orders o, time t WHERE o.time_id=t.time_id GROUP BY o.cust_id,t.month; “QUERY REWRITE” richtet automatisch und transparent eine Annfrage an den Materialized View, zum schnelleren Zugang zu den aufsummierten Daten. Und dies obwohl sich die Anfrage an die ursprüngliche Datenquelle richtet. 18 IV; Anhang A; Erstellung von Speicherungstypen in der Oracle Datenbank Es werden Tablespaces definiert, die sich auf unterschiedlichen Speichermedien befinden. In diesem Fall ist es das Tablespace ILM_HIGH_PERFORMANCE auf der hoch performanten Disk „/hdsk1“ CREATE TABLESPACE "ILM_HIGH_PERFORMANCE" DATAFILE '/hdsk1/oradata/orcl/ilm_high_perf' SIZE 10G AUTOEXTEND ON NEXT 1G MAXSIZE UNLIMITED LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO ; Der low cost Speichertyp ist eine Disk bekannt als „/lcdsk1“ CREATE SMALLFILE TABLESPACE "ILM_LOW_COST" DATAFILE '/lcdsk1/oradata/orcl/ilm_low_cost' SIZE 100G AUTOEXTEND ON NEXT 10G MAXSIZE UNLIMITED LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO ; Da der Speichertyp “Historical” sehr umfangreiche Daten enthält, wird dieser als solcher mit multiplen low cost Speicherlaufwerken definiert. Diese werden hier als „lcdisk0“ und als „lcdisk11“ benannt. CREATE SMALLFILE TABLESPACE "ILM_HISTORICAL" DATAFILE '/lcdisk10/oradata/orcl/ilm_hist1' SIZE 15T AUTOEXTEND ON NEXT 1G MAXSIZE UNLIMITED, '/lcdisk11/oradata/orcl/ilm_hist2' SIZE 5T AUTOEXTEND ON NEXT 1G MAXSIZE UNLIMITED LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO ; Nachdem nun die Speichertypen erstellt worden sind, so werden die Datenklassen wie im Step 1 definiert physikalisch in der DB unter Verwendung von Partitionen implementiert. Im folgenden die Struktur der Tabelle „ORDERS“. Es werden dann die Datenklassen (Partitionen) den entsprechenden Speichertypen (Tablespaces) zugeordnet. Diese Vorgehensweise ist sehr komfortabel, wenn es darum geht die Daten über die SpeicherungsMedien zu verteilen, und dies in Abhängigkeit von ihrer Häufigkeit des Gebrauchs. Zugleich werden die Daten online gehalten und sind sofort zugänglich auf den am ehesten kosteneffektiven Laufwerk. 19 Im folgenden Beispiel werden die aktuellsten Bestellungen auf dem Laufwerkstyp mit der höchsten Performance gespeichert. Die Bestellungen der letzten drei Vierteljahre werden in dem „Low Cost“ speicherungstyp gespeichert. Der Rest kommt zu dem Speicherungstyp „Historical“. CREATE TABLE orders ( prod_id NUMBER NOT NULL, cust_id NUMBER NOT NULL, time_id DATE NOT NULL, channel_id NUMBER NOT NULL, promo_id NUMBER NOT NULL, quantity_sold NUMBER(10,2) NOT NULL, amount_sold NUMBER(10,2) NOT NULL) --- partitions -PARTITION BY RANGE (time_id) ( partition orders_pre_2005 VALUES LESS THAN (TO_DATE('1/1/2006','DD/MM/YYYY')) TABLESPACE ILM_HISTORICAL, partition orders_2006 VALUES LESS THAN (TO_DATE('1/1/2007','DD/MM/YYYY')) TABLESPACE ILM_HISTORICAL , partition orders_janmar_2007 VALUES LESS THAN (TO_DATE('1/4/2007','DD/MM/YYYY')) TABLESPACE ILM_LOW_COST , partition orders_aprjun_2007 VALUES LESS THAN (TO_DATE('1/7/2007','DD/MM/YYYY')) TABLESPACE ILM_LOW_COST , partition orders_julsep_2007 VALUES LESS THAN (TO_DATE('1/10/2007','DD/MM/YYYY')) TABLESPACE ILM_LOW_COST, partition orders_octdec_2007 VALUES LESS THAN (TO_DATE('1/1/2008','DD/MM/YYYY')) TABLESPACE ILM_HIGH_PERFORMANCE ); ASM – beschrieben an einer anderen Stelle - kann zur Verteilung der Daten über die Speicherungstypen zusätzlich herangezogen werden. 20 B; Beispiel zu VPD (virtuelle private DB) The first step is to create a function which specifies that user ILM_POWER may view all data, and user ILM_NORMAL can only see data from 2004. All other users will not be allowed to view this data. Zuerst wird eine Funktion erstellt, die festlegt daß der User ILM_POWER alle Daten sehen darf. Und User ILM_NORMAL kann nur die Daten ab dem Jahr 2004 sehen. CREATE OR REPLACE FUNCTION ilm_seehist (oowner IN VARCHAR2, ojname IN VARCHAR2) RETURN VARCHAR2 AS con VARCHAR2 (200); BEGIN If SYS_CONTEXT('USERENV','SESSION_USER') = 'ILM_POWER' THEN -- see all data con:= '1=1'; ELSIF SYS_CONTEXT('USERENV','SESSION_USER') = 'ILM_NORMAL ' THEN -- see 2004 con := 'time_id > ''31-Dec-2007'''; ELSE -- no data con:= '1=2'; END IF; RETURN (con); END ilm_seehist; Erstellung der Sicherheitspolitik mit dem Package DBMS_RLS. Das Package verwendet die Function ilm_seehist s.o. BEGIN DBMS_RLS.ADD_POLICY (object_schema=>'ILM', object_name=>'orders', policy_name=>'ilm_view_history_data', function_schema=>'ilm', policy_function=>'ilm_seehist', sec_relevant_cols=>'time_id'); END; Nun kann die Wirkung dieser Sicherheits-Politik überprüft werden, wenn mehrere User die Daten abfragen. Die Abfrage des Users ILM_POWER liefert alle Zeilen zurück. SQL> connect ilm_power/ilm; SQL> select count(*) from ilm.orders; COUNT(*) 916039 Der User ILM_NORMAL kann nur die Date nab dem Jahr 2008 abfragen. SQL> connect ilm_normal/ilm; SQL> select count(*) from ilm.orders; COUNT(*) 6039 21 C; Beispiel: Der ILM-Assistent: 22 D; Beispiel zu Konvertierung in XML mittels Package DBMS_XMLGEN Im folgenden BEISPIELE WERDEN ALLE Bestellungen vor 2008 in das XML Format konvertiert CREATE TABLE temp_clob (result CLOB); DECLARE qryCtx DBMS_XMLGEN.ctxHandle; result CLOB; BEGIN -- Select all Orders prior to 2008 qryCtx := DBMS_XMLGEN.newContext ('SELECT * from orders WHERE time_id < ''1-Jan-08 '' '); -- set row header to be ORDERS prior to 1996 DBMS_XMLGEN.setRowTag(qryCtx, 'ORDERS_PRIOR_2008'); -- now get result result := DBMS_XMLGEN.getxml(qryCtx); insert into TEMP_CLOB values(result); dbms_xmlgen.closeContext(qryCtx); END; Eine andere einfache Methode besteht darin, die in Oracle DB 10g vorhandenenen XML – Funktionen in SQL einzubauen. SELECT XMLELEMENT("Orders", XMLElement ("timeid", time_id ), XMLElement ("prodid", prod_id ), XMLElement ("Customer", cust_id ), XMLElement ("amount", amount_sold) ) AS "RESULT" FROM orders WHERE time_id < '1-Jan-08 '; 23