Migration von Oracle 9i auf Oracle 10g bei der Deutschen Bahn AG
Transcription
Migration von Oracle 9i auf Oracle 10g bei der Deutschen Bahn AG
KONFERENZ Mittwoch, 10. November 2004 12h00, Variohalle 5 Migration von Oracle 9i auf Oracle 10g bei der Deutschen Bahn AG Jens Behring its-people Hochtaunus GmbH, Oberursel Schlüsselworte: Oracle 10g, Migration, Transportable Tablespaces, Erfahrungsbericht Zusammenfassung Bei der DB Netz AG, einer Tochter der Deutschen Bahn AG, ist das geographische Auskunftssystem STREDA.X im Einsatz. Weiterentwicklungen sowie Ergänzungen dieses Systems haben eine Migration notwendig werden lassen. Der Vortrag beschreibt verschiedene Migrationswege: zum einen mittels der DBNEWID Funktionalität, eines vorhandenen Offline-Backups sowie des "Database Upgrade Assistent" von Oracle 10g, zum anderen mittels transportabler Tablespaces. Probleme während und nach der Migration und die entsprechenden Lösungen werden vorgestellt. Einleitung Im geographischen Auskunftssystem STREDA.X der DB Netz AG wird die heutige Ausstattung des Streckennetzes der Deutschen Bahn mit Elektronischen Stellwerken abgebildet. Zusätzlich werden dort die Planungszustände d.h. die mittelfristige und langfristige strategische Abdeckung des Streckennetzes mit Elektronischen Stellwerken definiert. Dieses System basierte bisher auf einer Oracle 9.2 Datenbank auf die mittels OC4J, Apache oder HTMLDB zugegriffen wird. Vorbereitung der Migration Vor der Migration sollte natürlich ein Backup vorhanden sein, um jederzeit auf die bisher vorhandene Umgebung zurückgreifen zu können. In unserem Fall hatten wir das Problem, keinen separaten Rechner zur Verfügung zu haben, auf dem die Migration durchgeführt werden konnte und nach derem erfolgreichen Abschluss sämtliche Applikationen zu einem definierten Zeitpunkt umgestellt werden konnten. Aus diesem Grund wurde parallel zur vorhandenen Produktiv-Datenbank auf dem gleichen Rechner eine zweite identische Datenbank aufgesetzt und migriert. Zum Erstellen dieser Kopie wurde die Funktionalität DBNEWID genutzt. DBNEWID DBNWEWID ist ein seit Oracle 9.2 vorhandenes Feature um den "Datenbanknamen" (DBNAME) und den "internal database identifier" (DBID) zu verändern. Bis zu diesem Zeitpunkt konnten Datenbankkopien durch Kopieren der Datenbankdateien und Erzeugen von neuen Kontrolldateien erstellt werden, ein Ändern der DBID war allerdings nicht möglich. Nach einer Änderung der DBID mittels DBNWEWID sind alle bisherigen Backups und Archive-Log-Dateien nicht mehr brauchbar, die Datenbank muss mit der Option RESETLOGS gestartet werden. Bei Änderung des Datenbanknamens muss lediglich daran gedacht werden, den Initialisierungsparameter DB_NAME entsprechend zu ändern. Die Nutzung von DBNEWID erwies sich als überaus einfach und problemlos. Es waren nur folgende Statements nötig, um die vorhandene Datenbank umzubenennen: SQL>SHUTDOWN IMMEDIATE SQL>STARTUP MOUNT C:\oracle\ora10\bin\nid TARGET=sys/sys@jbe DBNAME=jbe_2 SQL>SHUTDOWN IMMEDIATE SQL>STARTUP MOUNT SQL>ALTER DATABASE OPEN RESETLOGS; Nachdem auf diese Art und Weise die vorhandene Datenbank umbenannt wurde, konnte nun das ursprüngliche Backup der Originaldatenbank wieder eingespielt werden und auf dem Rechner befanden sich zwei identische Datenbanken. DBUA – Database Upgrade Assistant Die Migration wurde mit dem "Database Upgrade Assistant" durchgeführt. Mit Hilfe dieses Tools ist es möglich, Datenbanken der Versionen 8.0.6, 8i, 9.0.1 und 9.2.0 zu migrieren. Installierte Datenbanken dieser Versionen werden in einer Auswahlliste präsentiert, aus der die zu migrierende Datenbank auszuwählen ist. Database 17. Deutsche ORACLE-Anwenderkonferenz KONFERENZ Oracle 10g benötigt einen sog. Auxiliary Tablespace, in dem Metadaten folgender Optionen bzw. Features hinterlegt werden: Option / Feature OLAP Text Ultra Search Intermedia / Spatial Workspace Manager Data Mining EM Repository Streams LogMiner Logical Standby Statspack Job Scheduler Schema CWMLITE CTSYS WKSYS ORDSYS WMSYS DMSYS SYSMAN SYS SYSTEM SYSTEM PERFSTAT SYS Dieser Tablespace wird im zweiten Schritt angelegt. Der Anwender kann hier die Lage sowie die Größe der Datendatei angeben. In einem weiteren Schritt hat der Anwender die Wahl, den "Database Upgrade Assistant" ein Backup durchführen zu lassen. Wird diese Option gewählt, so wird im Falle eines Fehlers dieses Backup automatisch eingespielt. Andernfalls muss dies durch den Anwender vorgenommen werden. Sind alle Angaben getätigt, läuft der "Upgrade Assistant" im Grunde ohne Problem durch. Lediglich beim ersten Versuch ergab sich ein Problem. Der "Upgrade Assistant" hatte den Wert des Initalisierungsparameters OPEN_CURSORS von ursprünglich 100000 auf 32767 gesetzt und sich danach mit der Fehlermeldung beendet, dass maximal ein Wert von 32766 erlaubt sei. Laut Oracle ist dieses Problem aber mit dem Patch 10.1.0.3 behoben. Einspielen des Patches 10.1.0.3 Kurz nach der Migration auf Oracle 10g wurde der Patch 10.1.0.3 ausgeliefert und bei uns installiert. Bei der Installation dieses Patches kam es zur Fehlermeldung "Mit den Programmen, die Sie ausgewählt haben, sind keine Dienste verknüpft". Die Fehlerdetails enthielten den Hinweis "orageneric10.dll (Prozesseinstiegspunkt kgmindl konnte in der Dynamic Link Library nicht gefunden werden)" Sowohl bei OTN als auch bei Metalink konnte zu dieser Fehlermeldung kein Hinweis gefunden werden. Ein erneutes Aufrufen des Oracle Installers ergab, dass die "Required Support Files" nicht installiert wurden. Ein erneuter Installationsversuch verlief erfolgreich. Die Fehlermeldung konnte reproduziert werden, wenn bei einem Einspielen des Patches ein SQL-Fenster geöffnet war. Vermutlich hat noch ein Prozess die angegebene DLL blockiert und damit diesen Fehler verursacht. Erfahrungen Migration Die Durchführung der Migration erwies sich, von kleinen Problemen abgesehen, als recht einfach. Der "Database Upgrade Assistent" erwiess sich als ein sehr ausgereiftes Tool, um Datenbanken auf 10g zu migrieren. Die Migration kann auch manuell über die Kommandozeile erfolgen. Diesen Weg haben wir allerdings nicht ausprobiert. TOAD Leider war es nach der Migration nicht mehr möglich, mittels TOAD (Version 7.5) auf Tabellen, die Oracle-Spatial-Daten enthalten, zuzugreifen. Auch externe Tabellen konnten nicht mehr angezeigt werden. Erst durch die Verwendung der neuen Version 8.0 konnten diese Probleme behoben werden. Verbindungen zu Oracle 8.0.4 und älter Unter Oracle 10g ist es nicht mehr möglich, sich gegen Datenbanken der Versionen 8.0.4 und früher zu verbinden. Dies betrifft sowohl die Verwendung von SQL-Plus als auch von Datenbank-Links. Bei der Nutzung von DatenbankLinks ist es allerdings möglich, eine Oracle 9i Datenbank zwischenzuschalten und somit Zugriff auf eine Datenbank der Version 8.0.4 zu erhalten (s. Abb. 1). Abb. 1: Zugriff auf Datenbanken der Versionen 8.0.x Database 17. Deutsche ORACLE-Anwenderkonferenz KONFERENZ Hierzu wird auf einer Oracle 9i Datenbank ein View eingerichtet, der über einen Datenbank-Link die Daten aus einer Datenbank der Version 8.0.4 erhält. Auf den View in der Oracle 9i Datenbank kann nun über einen Datenbank-Link aus Oracle 10g zugegriffen werden. HTMLDB Unsere HTMLDB-Anwendung (HTMLDB 10g) erfuhr nach der Migration eine deutliche Performancesteigerung, ohne dass an der Anwendung etwas verändert wurde. Apache Die eigentliche Oracle 10g Installation benötigt nur noch eine CD. Dies wurde dadurch erreicht, dass mit dieser CD nur die Datenbank installiert wird. Tools wie die bereits erwähnte HTMLDB oder der Apache Webserver müssen von der Companion CD installiert werden. Optimizer Bei einigen SQL-Statements ist zu beobachten, dass der Optimizer sich gegenüber der Oracle 9.2 Datenbank anders verhält. Unter Oracle 10g führen diese Statements zu einem Full-Table-Scan, wo hingegen für das gleiche Statement unter Oracle 9i ein Index genutzt wird. Auch eine Aktualisierung der Statistiken konnte dieses Problem bisher nicht beheben. Initialisierungsparameter COMPATIBLE Der Initialisierungsparameter COMPATIBLE steht nach der Migration zunächst auf 9.2.0. Dies führt dazu, dass zunächst nicht alle neuen Features von Oracle 10g genutzt werden können. Ein neues Feature von Oracle 10g ist die Möglichkeit, Informationen im Undo-Tablespace eine garantierte Zeit vorzuhalten. Dies geschieht durch Angabe von ALTER TABLESPACE undo_jbe_ts_1 RETENTION GUARANTEE Eine Nutzung dieses Features war jedoch erst nach einer Änderung des Initialisierungsparameter COMPATIBLE auf 10.1.0.0 möglich. Registry Eine Änderung, die nur unter Microsoft Windows auffällt, betrifft die Windows Registry. Bisher fanden sich unter HKEY_LOCAL_MACHINE\SOFTWARE\ ORACLE\ Schlüssel der Form HOME0, HOME1, etc. Ab Oracle 10g tragen diese Schlüssel den Namen KEY_<ORACLE_HOME>, z.B KEY_ORACLE_10g. Die Zeichenfolgen innerhalb dieser Schlüssel haben sich allerdings nicht verändert. Transportable Tablespaces Einleitung Um Daten zwischen Datenbanken auszutauschen gibt es neben der Möglichkeit des Exports und Imports auch die Funktionalität der "Transportable Tablespaces". Da hierbei lediglich Dateien kopiert werden müssen, ist dies wesentlich schneller als die Nutzung von Export und Import. Die beteiligten Datenbanken müssen allerdings mindestens Oracle 8i EE sein. Seit Oracle 10g ist es möglich, Tablespaces zwischen verschiedenen Plattformen zu kopieren. Eine Übersicht, welche Plattformen möglich sind, erhält man durch folgenden SQL-Befehl: SQL> SELECT * FROM v$transportable_platform; Das Ergbnis ist folgende Tabelle: PLATFORM_ID 1 2 7 10 6 3 5 4 11 15 8 9 13 16 12 17 PLATFORM_NAME Solaris[tm] OE (32-bit) Solaris[tm] OE (64-bit) Microsoft Windows IA (32-bit) Linux IA (32-bit) AIX-Based Systems (64-bit) HP-UX (64-bit) HP Tru64 UNIX HP-UX IA (64-bit) Linux IA (64-bit) HP Open VMS Microsoft Windows IA (64-bit) IBM zSeries Based Linux Linux 64-bit for AMD Apple Mac OS Microsoft Windows 64-bit for AMD Solaris Operating System (x86) ENDIAN_FORMAT Big Big Little Little Big Big Little Big Little Little Little Big Little Big Little Little Bei Plattformen mit unterschiedlichem ENDIAN_FORMAT ist beim Transfer ein zusätzlicher Schritt nötig, der später erläutert wird. Bzgl. des Transfers bestehen folgende Einschränkungen: • Quell- und Zieldatenbank müssen das gleiche Character Set und National Character Set nutzen • Der Tablespace-Name darf in der Zieldatenbank noch nicht genutzt werden (ein Umbenennen des zu tranportierenden Tablespaces ist möglich) Database 17. Deutsche ORACLE-Anwenderkonferenz KONFERENZ • Alle abhängigen Objekte müssen im selben Tablespace liegen (z.B. bei Materialized Views) • Der System-Tablespace kann nicht transportiert werden Durchführung Anhand eines Beispiels soll die Nutzung von Transportable Tablespaces beschrieben werden. Zunächst wird ein Tablespace im Quellsystem (Oracle 9.2, Windows 2003 Server) angelegt: SQL> CREATE TABLESPACE transport_test DATAFILE 'e:\oracle\oradata\stredaxe\transport_test' SIZE 20 M; Anlegen und füllen einer Tabelle in diesem Tablespace: SQL> CREATE TABLE TRANSPORT_TABLE (ID NUMBER, TEXT VARCHAR2(4000 BYTE) ) TABLESPACE TRANSPORT_TEST SQL>INSERT INTO transport_table VALUES (1, 'Text 1'); SQL>INSERT INTO transport_table VALUES (2, 'Text 2'); Die zu transportierenden Tablespaces müssen READ_ONLY sein: SQL> ALTER TABLESPACE transport_test READ ONLY; Auf dem Server der Quelldatenbank wird nun die Metadatenstruktur exportiert: C:\> EXP transport_tablespace=y tablespaces=(transport_test) file=transport.dmp Nun werden sowohl die Datendatei sowie die eben erzeugt Dump-Datei auf den Zielserver kopiert. Auf dem Server der Zieldatenbank (Oracle 10.1.0.3, Windows NT 4.0) kann nun der Tablespace eingebunden werden: C:\> IMP transport_tablespace=y file=transport.dmp datafiles='E:\oracle\oradata\stredaxe\TRANSPORT_TEST.DBF' tablespaces=transport_test tts_owners=(stredax_stage) fromuser=(stredax_stage) touser=(stredax_stage) Bei Plattformen mit verschiedenen Angaben für ENDIAN_FORMAT muss vor dem Kopiervorgang mit Hilfe von RMAN eine Konvertierung vorgenommen werden: RMAN> CONVERT TABLESPACE transport_test TO PLATFORM ´Microsoft Windows NT´ FORMAT ´/temp/%U´. Eine solche Konvertierung war bei uns im Projekt nicht notwendig, daher gibt es dazu auch keine Erfahrungswerte. Nach dem Einbinden des Tablespaces in die Zieldatenbank befindet sich dieser im Modus READ ONLY. Sollen in diesem Tablespace Änderungen vorgenommen werden, muss dies natürlich geändert werden. Es ist möglich, einen Tablespace und damit ein und dieselbe Datendatei in mehreren Datenbanken auf dem oben beschriebenen Weg einzubinden, um von mehreren Datenbanken auf die Daten zugreifen zu können. In diesem Fall darf der Tablespace in keiner der Datenbanken auf READ WRITE gesetzt werden. Ein Löschen des Tablespaces ist in einer der beteiligten Datenbanken möglich, in den anderen Datenbanken bleibt dieser Tablespace aber erhalten. Die Nutzung von Transportable Tablespaces verlief in unserem Projekt bisher ohne Probleme, sofern die oben angegebenen Bedingungen eingehalten wurden. Genutzt wurde dieses Feature für Tablespaces zwischen 20MB und 2GB Größe. Ein erstes Test, Tablespaces von einem Linux-Rechner auf Windows zu kopieren verlief ebenfalls ohne Probleme, allerdings steht ein produktiver Einsatz noch aus. Referenzen • Oracle Database Documentation, Oracle 9i Database Utilities Release 2 (9.2) Part No. A96652-01 • Oracle Database Documentation Oracle Database Installation Guide 10g Release 1 (10.1.0.2.0) for Windows Part No. B10130-01 • Oracle Database Documentation Oracle Database Adminstrator’s Guide 9i Release 2 (9.2) Part No. A96521-01 • Oracle Database Documentation Oracle Database Adminstrator’s Guide 10g Release 1 (10.1) Part No. B10739-01 • Oracle Metalink (http://metalink.oracle.com) 10g: SYSAUX Tablespace Doc ID: 243246.1 Kontaktadresse: Jens Behring its-people Hochtaunus GmbH Nassauer Str. 60 D-61440 Oberursel Telefon: E-Mail: Internet: +49-172-7824137 jens.behring@its-people.de www.its-people.de Database 17. Deutsche ORACLE-Anwenderkonferenz