Automatisierung des Datenbank-Betriebs (in einer sehr großen Oracle-Umgebung) Effizienzsteigerung durch den Einsatz von Skripten und Prozeduren Robert Kruzynski Trivadis GmbH München DOAG NRW 05.06.2007 Einleitung In einer großen Oracle-Umgebung gibt es häufig wiederkehrende Aufgaben Software-Installationen Server und Datenbankumzüge Versions- und Plattformwechsel Wiederherstellung und Klonen von Datenbanken DB-Reorgs Diese Aufgaben lassen sich automatisieren realisiert wird es meistens in einer Skript-Sprache sehr wichtig ist dabei die Standardisierung einer Umgebung (Namenskonventionen,Hardware- und Software-Stand,Schnittstellen zu anderen Betriebsgruppen) der Initialaufwand ist zwar hoch, rechnet sich ab einer bestimmten Menge an Datenbanken Der Pflegeaufwand sollte nicht vernachlässigt werden. Je höher der Automatisierungsgrad, desto höher der Pflegeaufwand. © 2007 Erfahrungsbericht Bei einem Trivadis-Kunden in München fallen jährlich folgende Tätigkeiten an >300 Oracle RDBMS Installationen >300 Oracle Client Installationen >400 neue Datenbanken >200 gelöschte Datenbanken >200 Oracle Relinks (verursacht durch Server-Patch-Aktionen) >50 Serverablösen >800 Datenbankumzüge (inkl. Plattformwechsel) >800 Upgrades >200 bestellte Datenbankklons >100 Recoveries >5000 Tablespace-Erweiterungen bzw. Verkleinerungen © 2007 Software-Installationen Ausgangspunkt ist ein existierender Oracle-User mit ausreichend großem HOME-Verzeichnis Prüfung der Systemvoraussetzungen Erstellung der Umgebung (inkl. Installation der Betriebsprozeduren) Silent-Installation vom NFS-Share inklusive des aktuellen Patch-Sets, CPU-Patch, Single-Patches (opatch), changePerm.sh Relink Funktionsprüfung Eintrag ins Inventar © 2007 Relinks der Oracle-Software ein Relink erscheint einfach, kann aber mühsam und zeitraubend werden (bei mehreren Software Installationen/Server) bestimmte Oracle-Versionen/Plattformen müssen speziell behandelt werden (z.B. OID-Installationen) zunächst wird alles notwendige heruntergefahren, Überwachung und Cronjobs deaktiviert es wird geprüft, ob bestimmte Libraries nicht in Verwendung sind Relink wird gestartet File-Permissions werden angepasst und kontrolliert jedes ORACLE_HOME wird einzeln überprüft sind bestimmte Libraries bzw. Binaries neu erstellt worden? funktionieren: sqlplus '/ as sysdba', tnsping, remote-connect? Startup, Aktivierung von Cronjobs und Überwachung © 2007 Erstellung neuer Datenbanken Skript basiert auf einer Template-Datei bereitet die Umgebung vor (auf allen Cluster-Knoten) berücksichtigt versionsspezifische Einstellungen (z.B. init.ora-Parameter) erstellt eigene Dictionary-Erweiterungen und zusätzliche Tablespaces installiert nach Bedarf Oracle Text bzw. Statspack CPU Patch (catcpu.sql) generiert einen bzw. mehrere OID-Einträge erstellt einen Inventar- und Monitoring-Eintrag © 2007 Löschen von Datenbanken Löschen bestimmter Dateien und Verzeichnisse lokal und auf allen Cluster-Knoten Löschen der Crontab- und oratab-Einträge Löschen der OID-Einträge Löschen aus der Inventar- und Überwachungsdatenbank © 2007 Datenübernahme-Tool verwendet Export/Import parallelisiert bis auf Subpartitionsebene, parallele Streams werden automatisch (nach Größe) zusammengestellt Export und Import können wahlweise gleichzeitig gestartet werden und kommunizieren über eine Pipe (keine Dumpfile-Erstellung) wahlweise Ausschalten des Archivelog Modus Daten-Import ohne Constraints, Trigger und Indizes Parallele Index-Erstellung (Syntax-Generierung aus dem Indexfile) MAXPERFORMANCE Schalter workarea_size_policy=manual sort_area_size=2GB, create_bitmap_area_size=200MB log_buffer=200MB, Verdopplung der SGA und DBWR-Prozesse Sonderbehandlung der größten Segmente Indizes werden PARALLEL und mit NOLOGGING angelegt Primary und Foreign Keys mit ENABLE NOVALIDATE © 2007 Datenübernahme-Tool Übernahme der Oracle-Text Präferenzen Dependent-Indizes (FBI, Oracle Text) werden am Ende erstellt wahlweise paralleler MView-Refresh (Indizes zuerst UNUSABLE) Übernahme von SYS-Grants Abschließender Struktur-Import Statistik-Übernahme mittels DBMS_STATS (EXPORT/IMPORT) anschließender Recompile gemessene Performance Siebel CRM 400GB ab 6h Bank 1TB ab 12h DWH 2TB ab 24h © 2007 Datenbankumzug/Plattformwechsel erstellt die Datenbank bzw. löscht eine bereits vorhandene Datenbank passt folgendes an init.ora Parameter Tablespaces Redo Logs schätzt / prüft UNDO und TEMP Platzbedarf startet Datenübernahme arbeitet „schrittweise“ © 2007 Upgrade I der Versionswechsel von 9 auf 10 wird mittels catupgrd.sql durchgeführt vor catupgrd.sql wird folgendes geprüft bzw. generiert dba_registry, bestimmte init.ora Parameter, letztes Backup, NCHARSet, Filesystem-Platz alle DB-Links auf ihre Funktionstüchtigkeit create database link Syntax wird generiert (für event. Downgrade) ein Struktur-Export wird erzeugt SYS- und PUBLIC-grants werden abgespeichert dba_2pc_pending wird geprüft und aufgeräumt validate structure aller SYS-objekte dbms_stats.gather_dictionary_stats 9i-Statspack Daten werden gesichert und gelöscht das spfile wird vorbereitet Cronjobs und Überwachung werden temporär ausschaltet die Umgebung wird auf 10g umgestellt (alle Cluster-Knoten) © 2007 Upgrade II startup upgrade, create tablespace sysaux, catupgrd.sql nach catupgrd.sql wird folgendes durchgeführt: Recompile Anpassung von ca. 30 Parameter im spfile Erstellung und Zuweisung eines eigenen Profils (mit failed_login_attempts unlimited) move/rebuild aller CTXSYS-Segmente nach SYSAUX ggf. Statspack-Installation Größen bestimmter Tablespaces werden auf 70%-Belegung eingestellt Cronjobs und Überwachung werden aktiviert Inventar wird aktualisiert Full Backup wird gestartet Der Downgrade-Fall ist übrigens auch automatisiert und wird bei kritischen Datenbanken getestet © 2007 Klonen von Datenbanken Vorbereitung der Klondatenbank lokal oder remote mittels ssh Erstellung der Datenbankumgebung bzw. Löschen einer vorhandenen Datenbank Konfiguration eines statischen Listeners DUPLICATE DATABASE (optional Skip Tablespace) © 2007 Recoveries folgende Recovery-Arten werden unterstützt: Target (full bzw. partial) Disaster (Originalserver nicht erreichbar) Switch Target to incremental updated copy Activate incremental updated copy as a clone bei Bedarf werden das Spfile und die Controlfiles wiederhergestellt Disaster-Recovery kann auf einem beliebigen Server mit ausreichend großen Filesystemen und Tape-Zugriff durchgeführt werden. Es wird kein Zugriff auf den Originalserver benötigt. Die Datenbankumgebung wird bei Bedarf automatisch erzeugt. © 2007 Fazit Bei entsprechend hohen Automatisierungsgrad lassen sich Datenbanken sehr effizient betreiben Die Fehlerquote wird dabei noch reduziert, weil wiederkehrende Aufgaben exakt gleich durchgeführt werden Automatisierung erfordert aber viel DBA- und Scripting-Erfahrung Der Teufel steckt bekanntlich im Detail... © 2007 Vielen Dank! ? www.trivadis.com [email protected]