====Eine Oracle Datenbank 11g R2 auf eine neue Oracle 12c Datenbank Umgebung unter Windows 2012 R2 umziehen==== **Die Aufgabe:** Eine Oracle 11g R2 Datenbank, in unseren Falls mit der SID VDS, auf einem 2008 Server soll auf einen neuen Windows 2012 R2 Server und zusätzlich als Container in eine Oracle 12c PDB umziehen. === Vorüberlegungen === Im ersten Schritt muss eine 12c Datenbank Software Umgebung auf dem neuen Windows Server aufgesetzt werden. Laut [[http://www.oracle.com/technetwork/database/upgrade/upgrading-oracle-database-wp-12c-1896123.pdf|12c Upgrade Dokumentation]] kann von folgenden Versionen direkt auf 12c ein Upgrade durchgeführt werden: * Oracle Database 11g Release 2 11.2.0.2 und später * Oracle Database 11g Release 11.1.0.7 * Oracle Database 10g 10.2.0.5 Bei allen anderen Versionen kommt nur ein Export/Import der Daten oder ein Upgrade auf eine unterstützte Version in Frage. Bei uns liegt eine Oracle Database 11g Release 2 11.2.0.4 vor, daher kann der Upgrade direkt erfolgen. Aber immer daran denken das ZUVOR das preUpgrade Script der Version 12c auf der 11g Datenbank gelaufen sein muss und das alle Ergebnisse aus dem Test auch umgesetzt worden sind! In der neuen Umgebung wird die Produktion Datenbank geklont und auf 12c ein Upgrade durchgeführt. Diese 12c Datenbank wird dann als eine [[https://www.youtube.com/watch?v=2MrouEW9j88|Plugable Database Container]] in eine CDB Datenbank eingefügt. Dazu muss allerdings zuvor eine neue CDB Datenbank erzeugt werden, in diese wird dann die VDS Datenbank als PDB Container eingefügt. Auch sind folgende Schritte vor einem Upgrade sehr zu empfehlen: * Möglichst keine ungültigen Objekte in der Datenbank in User Schemas * Auf keinen Fall ungültige Objekte in der Datenbank im SYS/SYSTEM andere Systemuser Schemas! * Recycle Bin gelöscht * Verwendete Timezone geprüft und verstanden * Genügend Platz im System Tablespace (min 30% frei bzw. großzügig auf Autoextend) * Data Dictionary Statistik und Fixed Objekt Statistik am Tag zuvor neu erzeugt Vor einem Server Umzug prüfen und aufräumen: * Werden die DB Links noch verwendet? * Wenn ja, sind die IP Adressen der remote Datenbanken vom neuen Server erreichbar? (Routen und Firewall) * Wenn nein, gleich mal löschen und alle abhängigen Objekte reparieren * Datenbank Directory Objekte noch in Verwendung? * Wenn ja, Dateistrukturen auf Zielserver neu anlegen und Rechte nach der Software Installation vergeben (Oracle System User ist dann in unseren Fall ORARUN, dieser User muss hier die Schreib/Leserechte besitzen!) * Wenn nein, gleich löschen! * ACL's in der Datenbank im Einsatz? Z.B. Mailversandt über UTL_SMTP! * Entsprechend Schritte einplanen um nach dem Umzug das zu testen und wieder gerade zuziehen! * Passwörter der Applikation genau prüfen und in RICHTIGER GROSS/klein Schreibung überall hinterlegen! Nach dem Umzug * Statistiken der Datenbank neu erzeugen / SQL Profile löschen * Applikation genauestens überwachen und überprüfen, alles im Detail testen === Zeitplanung === Voraussetzung: MS Windows 2012 installiert und in der Domain aufgenommen, Admin Passwort bekannt * 3h - Optimierung Windows + Software Installation * 1h - Vorbereitung neuer DB Umgebung (Listener, Verzeichnisstruktur, SQL*Net Settings, Datenbank Service + Spfile) * xh - Kopieren der alten DB Umgebung, je nach Netz ca 100GB pro Stunden als Daumenregel * 2h - Upgrade der Datenbank und optimieren der Settings ( kann bei etwas Übung und sehr guter Verbreitung auf 20 bis 30 Minuten (je nach vorhanden I/O) optimiert werden) * 2h - Nacharbeiten und erste Kontrolle D.h. in einem Tage kann ein erster Testumzug erfolgen. Bei guter Planung und mit RMan Duplicate bzw. Verwendung eines Backups kann mit einer minimalen Downtime für die Applikation von ca. 1h für den Live Umzug (nach eine paar Übungsläufen und etwas Skripting!) gerechnet werden. Natürlich ohne die Zeit, die die Applikation selber für einen Konsistenten Stop und dem erneuten Start benötigt! In ganz kritischen Fällen können auch Umzugszeiten von unter 30 Minuten erreicht werden, dann muss aber entsprechende Performance für den DB Upgrade (CPU /I/O) zur Verfügung stehen und zuvor einiges an der Quell DB optimiert werden (OLAP und weitere nicht benötigte Optionen löschen, DB Console löschen, Statistiken optimieren etc.). Auch sollte dann der komplette Umzug per Skript erfolgen, d.h. der Vorbereitungsaufwand steigt entsprechend an. === Platz === Für die Datenbank Software Installation werden min. 6 GB benötigt, würde aber wenigstens 12GB für das Oracle Home einplanen um später auch einfacher einen Patch einzuspielen! ---- ====Vorbereitung:==== ===Software Download=== Oracle Datenbank Software: * Oracle Datenbank Software herunterladen über http://www.oracle.com/technetwork/database/enterprise-edition/downloads/database12c-win64-download-2297732.html - in unseren Fall Zip1 und Zip2 für die Datenbank Installation * Über das Support Portal den aktuellen Patch laden ( (11.2015) => Patch 21821214: WINDOWS DB BUNDLE PATCH 12.1.0.2.10 p21821214_121020_MSWIN-x86-64.zip 471.4 MB (494280638 bytes) SHA-1 8239C7C198353EEC4C5ED0EFD4AB2597CA9249BA MD5 0EE5EE8635985AD90EE0D9B622C204DD Darauf achten das nach dem Download auch der Hash der Datei auch stimmt! MS Windows: * Für das Üben der Umstellung wird hier eine Test VM für MS Windows 2012 R2 verwendet => https://www.microsoft.com/en-us/evalcenter/evaluate-windows-server-2012-r2 === Windows 2012 Test Umgebung vorbereiten === Um unnötigen Bugs und ähnlichen Wirrungen der Softwareentwicklung aus den Weg zu gehen, eine Englische Version des Betriebssystems wählen und Usernamen mit "einfachen" Buchstaben (ohne Umlaute etc.!) und Verzeichnisse immer ohne " " Leerzeichen angeben! ==Server aufsetzen== Die Virtuelle Platte (VHD) des Windows 2012 R2 Servers kann auch mit einer VMWare Workstation 11 genützt werden. Dazu VHD herunterladen und in ein Verzeichnis kopieren. Unter VMWare einen neue Virtuelle Maschine mit 4GB RAM anlegen und dabei als IDE Platte die VHD Datei angeben. Zusätzlich eine D Platte für die Oracle Datenbank Software und die Test Datenbank anlegen. Für die Software 10GB einplanen + die eigentlichen Datenbank Daten, in meinen Fall nochmals 40GB. Bei ersten Start die Sprache der Maschine auswählen (alles US) und DE für die Tastatur wählen. Passwort für den Administrator Account setzen und an der Maschine anmelden. Die D Platte wie gewohnt einrichten, um die D Platte aber auch als d: verwenden zu können muss das DVD Laufwerk auf einen anderen Buchstaben gemappt werden. Das geht am einfachsten wie gewohnt im alten Server Manager, diesen mit "compmgmt.msc" aufrufen, im neuen Server Manager leider diese Funktion nicht wie gewohnt gefunden. Danach die die VMWare Tools installieren und neu starten (an die neue Funktion mit der rechten untern Ecke und dem Zahnrad denken um die Power Button von Windows 2012 zu erreichen). == Name und Domain setzen == Neuen Maschinenname vergeben (wie 12CWIN2012ORA01) und in die Domain aufnehmen, nach der Installation sollte der Name und die Domain sich NIE mehr ändern! (Neuer Server Manager => Local Server => Computer Name anklicken, gewohnten Dialog ausfüllen) ==Netzwerk konfigurieren== Das Netzwerk konfigurieren und wenn nicht unbedingt benötigt IPV6 so weit wie möglich deaktivieren. * Auf den Adaptern direkt das IPV6 Protokoll deaktivieren * In der Host Datei (Der Pfad zur Hostdatei lautet : %systemroot%\system32\drivers\etc ) Eintrag für localhost mit 127.0.0.1 einfügen und evtl. den IPv6 Eintrag ::1: auskommentieren! Administrative Powershell Session starten cd $ENV:systemroot\system32\drivers\etc notepad .\hosts * Registry Eintrag hinzufügen (in der CMD starten!)cmd reg add hklm\system\currentcontrolset\services\tcpip6\parameters /v DisabledComponents /t REG_DWORD /d 0xFFFFFFFF * System neu starten * Ein ping auf localhost muss die 127.0.0.1 Adresse zurückgeben, ein ipconfig darf keine IPv6 Adressen anzeigen * Siehe auch [[http://www.techunboxed.com/2014/01/how-to-disable-ipv6-in-windows-server.html|How to Disable IPv6 in Windows Server 2012]] Laut Microsoft ist das abschalten von IPV6 keine so gute Idee mehr! In einer Single DB Umgebung kann auch darauf verzichtet werden bzw. vorher gut in das Thema einlesen! ==User Software Owner anlegen== Oracle Software Owner zum Beispiel ORASYSTEM als User in der Domaine (oder eben dann lokal) anlegen und in die lokale Admin Gruppe auf dem Server explizit mitaufnehmen! (auch hier am einfachsten erst mal wieder mit „compmgmt.msc“ bzw. "lusrmgr.msc" arbeiten! ) Vergeben der Local Security Policies für diesen User über Server Manager, Tools in der oberen Bar -> Local Security Policy auswählen Knoten Local Policies -> User Rights Assignment Dem Account ORASYSTEM die folgenden Policies (Richtlinien) zuweisen: Single Instance * Log on as a batch job * Log on as a service RAC * Act as part of the operating system * Adjust memory quotas for a process * Back up files and directories * Restore files and directories ==Mit dem neuen Oracle User anmelden== Prüfen das sich der Oracle Software Owner selber die Laufwerke der Maschine mit "net" mounten kann: net use \\localhost\c$ net use \\localhost\d$ The command completed successfully. ==TMP Verzeichnis erstellen== Auf C: und D: einen Ordner TEMP erstellen und systemweit diesen kurzen Pfad d:\temp für TMP und TEMP setzen (Umgebungseinstellungen für den User und das System anpassen!) ==Advanced System Settings setzen== Aufruf "Advanced System Settings" ( Control Panel\System and Security\System\Advanced System Settings ) oder einfach über die Suche eingeben und suchen lassen Reiter Advanced: * Performance Options :: Visual Effects :: "Best performance" aktivieren * Performance Options :: Advanced :: "Background services" aktivieren * Data Execution Prevention :: "Turn on DEP for essential Windows programs and services only" * Enviroment Variables :: TEMP und TMP auf d:\temp für "System variables" und "User variables" ==Internet Explorer Securtiy== Internet Explorer Security ausschalten, falls lokal mit der DB Console gearbeitet werden soll Server Manager starten, Local Server anwählen, auf der rechten Seite unter Windows Error Reporting! siehe auch http://blog.blksthl.com/2012/11/28/how-to-disable-ie-enhanced-security-in-windows-server-2012/ Daher alternativ Firefox oder Chrome installieren und sich nicht mit dem Mist ärgern .-). ==Bildschirmschoner== Bildschirmschoner auf "Blank" stellen bzw. deaktivieren (Control Panel\Appearance\Display) ==Spracheeinstellungen kontrollieren== Region and Language (English US) Control Panel -> Clock, Language, and Region ->Region Welcome Screen and new user account settings Hacken setzen bei: * Welcome screen and system accounts * New user accounts ==Firewall deaktivieren oder konfigurieren== Listener Port 1521 mit hinzufügen ==Virenscanner== Während der Installation, besonders bei einem Real Application Cluster, sollte der Virenscanner am besten deinstalliert sein! Läuft das System kann der Virenscanner wieder installiert werden, sollte aber möglichst nicht permanent die Filesystem scannen und so einschränkt wie möglich konfiguriert werden! == Zeitzone und Windows Zeitdienst konfigurieren== Zeitzone einstellen (Control Panel/time/date and time) siehe [[windows:windows_ntp_w32tm_zeitdienst|NTP Service MS Windows 2008 / 2012 auf einen eigenen NTP Server konfigurieren]] ==Software Update== Auf letzte Updates prüfen und diese einspielen. (Control Panel\Updates) ==Mit einen Snapshot die Maschine sichern== Abschließen die Maschine herunterfahren, Offline Snapshot ziehen (als Basis für weitere Maschinen) und neu starten. == Tools / Werkzeuge einrichten == * Editor für init und log Files installieren wie [[https://notepad-plus-plus.org/|Notepad++]] * Prozesse überwachen und suchen wie [[https://technet.microsoft.com/en-us/sysinternals/processexplorer.aspx|Process Explorer von SysInternals]] * Google Chrome oder Firefox um den IE zu übergehen für die DB Express Console Software herunterladen und zum Beispiel unter d:\tools installieren ---- ====Oracle 12c Datenbank Software installieren==== Ist die Windows Maschine gut vorbereitet, ist die eigentliche Installation trivial. Die Installationspakete auf der Maschine auspacken und installieren. Bei der Installation wird noch ein eigener OS User für den Datenbank Service angelegt. Benötigter Plattenplatz: 6.07 GB (6,525,054,976 bytes) Im ersten Schritt aber keine Datenbank bei der Installation anlegen! Ablauf: Verzeichnis d:\install anlegen Dort die Datenbank Software kopieren, md5 Hash prüfen: Get-FileHash .\p17694377_121020_MSWIN-x86-64_1of8.zip -Algorithm MD5 Algorithm Hash --------- ---- MD5 BFD76313558670D78773816BEEE62DD8 Get-FileHash .\p17694377_121020_MSWIN-x86-64_2of8.zip -Algorithm MD5 Algorithm Hash --------- ---- MD5 BD6C1C3B4452402A1339E428E9BBA353 Get-FileHash .\p21821214_121020_MSWIN-x86-64.zip -Algorithm MD5 Algorithm Hash --------- ---- MD5 0EE5EE8635985AD90EE0D9B622C204DD Wenn der Hash jeweils stimmt (mit dem zuvor gemerkten Wert auf der jeweiligen Download Seite vergleichen!) auspacken der beiden 1 und 2 Archive nach d:\install\database. Nach dem Auspacken die Zip Files löschen um Plattenplatz zu sparen. Setup.exe als Administrator starten (rechte MausTaste, "run as Administrator" wählen - Configure Security Updates - Hacken bei "I wish" entfernen - Next - Dialog Box mit "Yes" bestätigen - Select Installation Option - "Install database software only" anwählen - Next - Grid Installation Options - "Single instance database installation" - Next - Select Product Languages - Default - Next - Select Database Edition - Default - Enterprise - Next - Specify Oracle Home User - Create New Windows User * Usernamen wie "ORARUN" angeben und Password hinterlegen, dieses sofort dokumentieren! * Next - Specify Installation Location * Oracle Base: d:\oracle * Software location: D:\oracle\product\12.1.0.2\dbhome_1 * Next - Prerequisite Checks are running - Summary - "Save Responce File" für die Dokumentation - Install - Install Product - Installation läuft * Über Details gibt es mehr Informationen * Finish! mit "Close" beenden Die Software ist nun installiert und ein neuer User unter dem später die DB Prozesse laufen wurde angelegt. ===Patch einspielen === Nun im Anschluss gleich den aktuellen Patch einspielen. Aktuell letzten Patch auf der Produktiven DB einspielen (Stand 03.01.2017 Patch 24922906: WINDOWS DB BUNDLE PATCH 12.1.0.2.161118 , p24922906_121020_MSWIN-x86-64.zip) und den letzen OPatch p6880880_121010_MSWIN-x86-64.zip - Zuerst "%ORACLE_HOME/Opatch" mit letzen OPatch aus p6880880_121010_MSWIN-x86-64.zip ersetzen - Patch p24922906_121020_MSWIN-x86-64.zip auspacken und mit "opatch apply"einspielen cmd d: set ORACLE_HOME=D:\oracle\product\12.1.0.2\dbhome_1 cd D:\install\patch\p24922906_121020_MSWIN-x86-64\24922906 D:\oracle\product\12.1.0.2\dbhome_1\OPatch\opatch apply **Stand 04.2019:** : - Patch 6880880: OPatch 12.2.0.1.16 for DB 12.x and 18.x releases (OCT 2018) - Patch 28810679: WINDOWS DB BUNDLE PATCH 12.1.0.2.190115 - Patch 28994063: WINDOWS ORACLE JAVAVM COMPONENT BUNDLE PATCH 12.1.0.2.190115 ===Listener einrichten=== Nach der Software Installation muss der Oracle Listener eingerichtet werden. Apps Seite von Windows 2012 starten (Windows Symbol unten rechts, auf Start Seite Pfeil nach unten anwählen). {{:dba:12c:installation_12c_windows2012_listener_v00.png?direct&100|Net Configuration Wizard starten}} Von der App Seite den Net Configuration Wizard als Administrator starten * "Listner configuration" anwählen - Next * "add" - Next * Listener Name vergeben wie "LISTENER" und Password vom Oracle User, in unseren Fall "ORARUN" angeben - Next * Protokolle auswählen - TCP und TCPS - Next * TCP Port wählen bzw. den Standard belassen - Next * TCPS Port wählen bzw. den Standard belassen - Next * Keinen weiteren Listener konfigurieren - Next * Die Listener Konfiguration wird abgeschlossen - Next * Abschließen - Finsh Nun in eine Command Shell prüfen ob der Listener bereits erfolgreich läuft. lsnrctl status === Optional - OraPowerShell einrichten=== Meine [[https://github.com/gpipperr/OraPowerShell |OraPowerShell Scripte]] dienen dazu die DB Umgebung über die PowerShell zu verwalten und zu sichern. Auch ist eine Library von wichtigen SQL Skripten enthalten um die DB einfach per SQL*Plus zu steuern und zu verwalten. Die wichtigste Funktion ist das jeweilige Setzen der Umgebung mit "setdb" um immer die richtigen Umgebungsvariablen gesetzt zu haben. ---- ==== Bestehende Datenbank vorbereiten ==== PreUpgrade Script von der neuen Umgebung in die alten Umgebung kopieren und dort ausführen. In meine Fall die Datei "preupgrd.sql" und "utluppkg.sql" aus den neuen Server Oracle Home D:\oracle\product\12.1.0.2\dbhome_1\RDBMS\ADMIN\ auf den alten Server kopieren, z.B. nach d:\temp\upgrade. Das Script in der 11g Umgebung starten: cd d:\temp\upgrade sqlplus / as sysdba @preupgrd.sql ... ACTIONS REQUIRED: 1. Review results of the pre-upgrade checks: D:\oracle\cfgtoollogs\VDS\preupgrade\preupgrade.log 2. Execute in the SOURCE environment BEFORE upgrade: D:\oracle\cfgtoollogs\VDS\preupgrade\preupgrade_fixups.sql 3. Execute in the NEW environment AFTER upgrade: D:\oracle\cfgtoollogs\VDS\preupgrade\postupgrade_fixups.sql ... Das zeugte Logfile öffnen und die Einträge prüfen und befolgen Zum Beispiel: * EM DBConsole entfernen, wird in 12 nicht mehr unterstützt * OLAP entfernen, falls nicht in Verwendung * Statistik anlegen mit EXECUTE dbms_stats.gather_dictionary_stats; EXECUTE dbms_stats.gather_dictionary_stats; * preupgrade_fixups.sql prüfen dann ausführen @D:\oracle\cfgtoollogs\VDS\preupgrade\preupgrade_fixups.sql ---- ====Bestehende 11g Datenbank in die 12c Umgebung einlesen / kopieren==== Im ersten Schritte wird die Datenbank 1zu1 im die neuen Umgebung kopiert, entweder als Klone der Produktion um die Downtime minimal zu gestalten oder einfach als eine Kopie der Produktion, falls diese lang genug gestoppt werden kann. === Bestehende Umgebung über RMAN Duplicate einlesen=== Beim Einssatz von "Rman Duplicate" von 11.2.0.4 Windows 2008 auf 12.1.0.2 Windows 2012 auf einen BUG gelaufen (ORA-17628: Oracle-Fehler 17630 von Remote Oracle-Server zurückgegeben), trotz neusten Patchsets keine Lösung gefunden, Patch für das Problem läßt sich nicht einspielen, bei diesem Problemen dann den Oracle Support einbinden! Vorbereitung für einen RMAN Klon: * Netzwerk muss 100% gut funktionieren und SQL*Net Protokoll in der FW freigeschaltet sein! * SQL*Net Konfiguration vom alten Server für Datenbank Links übertragen * Neue Listener Konfiguration auf beiden Umgebungen für den Klone Vorgang erstellen (Anmelden über die SID an einer heruntergefahrenen DB und das starten der DB über SQL*Net muss möglich sein!) * Password Datei und SPFile von der alten DB in die neue Umgebung kopieren (SYS Password muss auf beiden Seiten gleich sein! * 12c PreUpgrade Script auf der 11g Produktion laufen lassen * Alle vom Skript angemerkten Probleme fixen! * Backup Strategie überdenken, alle Archivelogs müssen für den Zeitraum des Klonprozesse auf Platte weiterhin zur Verfügung stehen * Oracle DB Service auf der neuen Datenbank Umgebung mit oradim anlegen * Remote starten in den "startup nomount" Modus muss über SQL*Net möglich sein Nach dem Vorbereitungen: Mit "RMAN Duplicate" die bestehende 11g Datenbank aus der Live Umgebung klonen, siehe dazu die folgende Anleitung [[dba:db_clone_rman_active_database_online|Eine Oracle Datenbank 11g R2 mit RMAN "DUPLICATE TARGET DATABASE TO xxxx FROM ACTIVE DATABASE " klonen]] Letzte Archive vor der Downtime der produktiven Umgebung holen und alte Produktion stoppen. Letzte Archive in die neue Datenbank einspielen und danach die Datenbank im Upgrade Modus öffnen. === Alternativ - Datenbank einfach kopieren === Unsere Datenbank heißt in unseren Beispiel "VDS" === Alle notwendigen Dateien kopieren=== Da es Probleme mit dem Rman Duplicate gab, die Quell Datenbank herunterfahren und die Dateien per Hand kopieren. Vom neuen Datenbank Server aus die Datendateien als Oracle Software Owner kopieren, sonst muss zweimal an den Rechten herum geschraubt werden! Struktur der DB prüfen: rman rman>connect target / rman>report schema; .. # Gute übersicht über die Struktur der Datenbank! .. Aus dem alten Oracle Home aus dem Verzeichnis "database" spfilevds.ora und pwdvds.ora in die neue Umgebung in das neue Oracle Home in das Verzeichnis "database" kopieren. Die Verzeichnisstruktur der Datenbank inkl. Inhalt 1zu1 auf den neuen Server kopieren (inklusive der fast_recovery_area). Meine Struktur sieht dann so aus: * d:\oracle * fast_recovery_area\VDS => Backup und Archivelogs * oradata\VDS => Datendateien + 1. Controlfile + 1. Redo Log Member * oradata02\VDS => 3. Controlfile + 2. Redo Log Member ===Rechte setzen=== Als neuen Eigentümer der Daten Verzeichnisse und der Dateninhalte den ORARUN User definieren, den spfile und die password Datei unter $ENV:ORACLE_HOME nicht vergessen! * Rechte Maus Taste auf den jeweiligen Ordner, Properties, Tab Security, Button Advanced * Oben Neben dem Owner nun den ORARUN User als Eigentümer setzen und den Hacke "Replace owner ..." anwählen * Mit "Apply" bestätigen ===Neue DB Service VDS anlegen== Eine Administrative PowerShell öffnen und den DB Service anlegen: $env:ORACLE_HOME="D:\oracle\product\12.1.0.2\dbhome_1" cd $env:ORACLE_HOME\bin oradim -new -sid VDS Enter password for Oracle service user: Instance created. Tritt ein "O/S-Error: (OS 5) Access is denied." Fehler auf, prüfe ob wirklich eine administrative PowerShell Session gestartet wurde! === Alternativ - RMan Restore === ==Backup der Orginal Datenbank == Auf der original Datendatenbank: * Auto Backup einschalten - RMAN>CONFIGURE CONTROLFILE AUTOBACKUP ON; * Full Backup anlegen - RMAN>backup database; * Backup der letzen Archive Logs - RMAN>backup archive log all; * Erstellen eines letzen Controlfile Backups - RMAN>backup current controlfike Kopieren das Full Backups + Archivelog Backup + Auto Backup + Controlfile Backup in die gleiche Verzeichnisstruktur auf den neuen Server wie in der alten Umgebung. == Restore in der neuen 12c Umgebung == Nun die Datenbank in der alten Umgebung wieder herstellen. * Datenbank mit dem zuvor erstellen Pfile im nomount Status starten * Controlfile über ein Auto Backup oder mit Pfadangabe wieder herstellen rman>restore controlfile from autobackup; # alternativ rman>restore controlfile from ’f:\backup\name…..’ --hier das aktuellste controlfile nach dem backup nehmen * Datenbank im Mount Modus öffnen rman>ALTER database mount; * Backup überprüfen und alte Backups aus dem Controlfile löschenrman>crosscheck backup; rman>DELETE expired backup; * Falls Backups nicht in der Flash Recovery Area liegen, neu katalogisieren rman>catalog START WITH ’f:\backup’; * Datenbank zurücksichern restore database * Datenbank recoveren recover database * Alternativ zum Schluss "sqlplus> RECOVER DATABASE USING BACKUP CONTROLFILE UNTIL CANCEL;" * Datenbank mit Rest Logs im Upgrade Modus öffnen ALTER database OPEN resetlogs migrate; ---- ==== DB Upgrade auf 12c ==== === Als SYS an der gestoppten Instance anmelden und im Upgrade Modus starten=== $ENV:ORACLE_SID="VDS" sqlplus / as sysdba startup upgrade exit Zur Überwachung des Alert Logs der DB diese mit einem Tail in zweiten Fenster anzeigen lassen: adrci adrci> show homes ADR Homes: diag\rdbms\vds\vds diag\tnslsnr\12CWIN2012ORA01\listener adrci> set home diag\rdbms\vds\vds adrci> show alert -tail -f ... Completed: ALTER DATABASE OPEN MIGRATE ... ---- === Den DB Upgrade auf 12c mit dem Perl Script starten=== Nach dem Klone die Datenbank auf 12 mit dem neuen Perl Script "perl catctl.pl catupgrd.sql" upgraden. ==Aufruf des perl catctl.pl catupgrd.sql== Für das Loging den Ordner d:\temp\upgtrade anlegen. Gibt es die Hardware etwas her kann mit dem Schalter "-n" die Parallelität beim Upgrade gesetzt werden. Auch sollte ein Log File Directory mit -l definiert werden, sonst landen die Logs alle im rdbms/Admin Verzeichnis! Aufruf: cd $ENV:ORACLE_HOME\rdbms\admin #am einfachsten dann mit dem kompletten Pfad aufrufen #Optionen anzeigen lassen und prüfen ob der Aufruf auch klappt D:\oracle\product\12.1.0.2\dbhome_1\perl\bin\perl catctl.pl -h #Upgrade starten D:\oracle\product\12.1.0.2\dbhome_1\perl\bin\perl catctl.pl -n 4 -l d:\temp\upgrade catupgrd.sql ... Number of Cpus = 2 SQL Process Count = 4 ------------------------------------------------------ Phases [0-73] Serial Phase #: 0 Files: 1 Time: 241s Serial Phase #: 1 Files: 5 Time: 66s Restart Phase #: 2 Files: 1 Time: 0s ... Time: 113s Serial Phase #:70 Files: 1 Time: 816s Serial Phase #:71 Files: 1 Time: 1s Serial Phase #:72 Files: 1 Time: 0s Serial Phase #:73 Files: 1 Time: 22s Grand Total Time: 6321s LOG FILES: (catupgrd*.log) Upgrade Summary Report Located in: D:\oracle\product\12.1.0.2\dbhome_1\cfgtoollogs\VDS\upgrade\upg_summary.log Grand Total Upgrade Time: [0d:1h:45m:21s] Warum hat das bei mir so lange gedauert? Mit 45 bis 55 Minuten sollte man schon rechnen, hier war es aber sehr langsam. Das lag zum einem daran das es sich um eine VM Umgebung handelt, zum anderen kam es zu timeout, die kopierte DB ist normalerweise Teil eines Oracle Standby Verbandes, das hätte ich zuvor auflösen müssen. Auch habe ich zuvor die DB Console und OLAP eben nicht gelöscht, das kostet dann später eben unnötig Zeit. Über das Tail im zweiten Fenster mit adrci kann nun gut der Fortschritt beobachtet werden. Auch kann über ein PowerShell Tail das Logfile beobachtet werden: Get-Content -Path "catupgrd0.log" -Wait ..... Allerdings werden soviel Log Daten erzeugt, das die Console mit dem Spool nicht mehr nachkommt und dann am Ende über 15 Minuten hinter dem Ende des Logfiles der Spool erzeugt wurde, ist also nicht in Echtzeit. == DB Starten und prüfen == Nach dem Durchlaufen des catctl.pl die Datenbank starten und prüfen: cd $ENV:ORACLE_HOME\rdbms\admin sqlplus / as sysdba startup @utlu121s.sql -- if use 19c!! @utlusts.sql TEXT -- Oracle Database 12.1 Post-Upgrade Status Tool 11-28-2015 15:50:34 Component Current Version Elapsed Time Name Status Number HH:MM:SS Oracle Server UPGRADED 12.1.0.2.0 00:18:56 JServer JAVA Virtual Machine VALID 12.1.0.2.0 00:06:27 Oracle Workspace Manager VALID 12.1.0.2.0 00:01:23 OLAP Analytic Workspace VALID 12.1.0.2.0 00:00:28 Oracle OLAP API VALID 12.1.0.2.0 00:00:32 Oracle XDK VALID 12.1.0.2.0 00:01:04 Oracle Text VALID 12.1.0.2.0 00:01:20 Oracle XML Database VALID 12.1.0.2.0 00:02:56 Oracle Database Java Packages VALID 12.1.0.2.0 00:00:21 Oracle Multimedia VALID 12.1.0.2.0 00:03:40 Spatial UPGRADED 12.1.0.2.0 00:08:36 Oracle Application Express VALID 4.2.5.00.08 00:38:31 Final Actions 00:02:58 Post Upgrade 00:12:54 Total Upgrade Time: 01:41:03 Sieht alles gut aus! ==Post FixUp Script + Recompile == Das auf der alten Umgebung unter cfgtools das erzeugte Post Upgarde SQL auf den neuen Server nach d:\temp kopieren. Post FixUp Script vom 11g Server aufrufen: sqlplus / as sysdba --Falls noch nicht gestartet startup @d:\temp\postupgrade_fixups.sql EXECUTE DBMS_STATS.gather_fixed_objects_stats; -- Recompile @?\rdbms\admin\utlrp.sql --check -- 12c @?\rdbms\admin\utluiobj.sql @?\rdbms\admin\utlu121s.sql -- if use 19c!! @?\rdbms\admin\utlusts.sql TEXT -- Die Empfehlungen beachten und dann auch befolgen. === Problem mit APEX === Ist die Apex Option plötzlich ungültig, diese als SYS validieren und reparieren set serveroutput on exec validate_apex; In meine Fall haben Rechte gefehlt: GRANT INHERIT ANY PRIVILEGES TO "APEX_050000"; exec validate_apex; === Pürfen ob der aktuelle Patch auch in der DB registiert ist === SET LINESIZE 400 SET PAGESIZE 100 COLUMN action_time FORMAT A20 COLUMN action FORMAT A10 COLUMN status FORMAT A10 COLUMN description FORMAT A40 COLUMN version FORMAT A10 COLUMN bundle_series FORMAT A10 -- SELECT to_char(action_time, 'DD-MON-YYYY HH24:MI:SS') AS action_time , action , status , description , traget_version , patch_id , traget_bundle_series FROM sys.dba_registry_sqlpatch ORDER by action_time; => https://mikedietrichde.com/2016/11/30/dba_registry_history-vs-dba_registry_sqlpatch/ ===Compatible Parameter auf 12c setzen und neu starten=== Läuft alles wie erwartet, kann nun zum Schluss der Compatible Parameter auf 12c gesetzt werden. Achtung! Ist das esetzt gibt es kein Zurück mehr! sqlplus / as sysdba show parameter compatible NAME TYPE VALUE ------------------------------------ ----------- ---------------- compatible string 11.2.0.4.0 --! so geht das nicht -- nach dem Start beschwert sich das System -- ORA-00723: Initialization parameter COMPATIBLE must be explicitly set -- alter system reset compatible -- alter system set compatible="12.1.0.2.0" scope=spfile; startup force show parameter compatible NAME TYPE VALUE ------------------------------------ ----------- --------------------- compatible string 12.1.0.2.0 === Zeitzone aktualisieren === siehe auch https://docs.oracle.com/database/121/NLSPG/ch4datetime.htm#NLSPG261 Status: SELECT * FROM V$TIMEZONE_FILE; SELECT * FROM V$TIMEZONE_FILE; SELECT * FROM DATABASE_PROPERTIES WHERE property_name LIKE 'DST%’ * Herunterfahren und im Upgrade Modus starten * execute DBMS_DST.BEGIN_UPGRADE() execute DBMS_DST.BEGIN_UPGRADE(18) --# 19c 32 * DB stoppen und normal starten * Truncate error und trigger tables sys.dst$error_table and sys.dst$trigger_table truncate table sys.dst$error_table; truncate table sys.dst$trigger_table; * Führe den folgenden DBMS_DST.UPGRADE_DATABASE aus (Jede Zeile einzeln kopieren!): set serveroutput on VAR numfail number BEGIN DBMS_DST.UPGRADE_DATABASE(:numfail, parallel => TRUE, log_errors => TRUE, log_errors_table => 'SYS.DST$ERROR_TABLE', log_triggers_table => 'SYS.DST$TRIGGER_TABLE', error_on_overlap_time => TRUE, error_on_nonexisting_time => TRUE); DBMS_OUTPUT.PUT_LINE('Failures:'|| :numfail); END; / * die DBA_TSTZ_TABLES Tabelle prüfen select * from DBA_TSTZ_TABLES; select * from SYS.DST$ERROR_TABLE; select * from sys.dst$trigger_table; * Upgrade window beenden VAR numfail number exec DBMS_DST.END_UPGRADE(:numfail); print === Auf Directory Objekte achten=== In unseren Fall wird die Datenbank ja auch auf einen anderen Server umgezogen, daher in der alten Datenbank die Datenbank Directories prüfen und auf den neuen Zielsystem die gleiche File Struktur anlegen und auf die Rechte für die Oracle "Run" User achten (siehe Software Installation)! === 12c Database Express freischalten=== Besonders für die Performance Überwachung sehr hilfreich (Nur wenn die Tuning/Diagnostic Pack Lizenz auch erworben wurde, nützen!) Siehe [[dba:oracle_12c_database_express|Die 12c Datenbank mit Database Express administrieren]] === Backup einrichten === Backup nach Bedarf einrichten und erstes Backup der neuen Umgebung erstellen. siehe auch [[dba:backup|Was muss alles gesichert werden]] === Autostart einrichten=== Den Datenbank Service auf "Automatic" setzen und die Autostart Einstellungen kontrollieren, siehe auch [[dba:start_db_windows|Start der Oracle Instance unter Windows]]. ---- ==== Den letzten Patch Stand einspielen falls zuvor vergessen - 11.2015 ==== Den Patch hätten wir schon vor dem DB Upgrade mit der Software Installation einspielen können, jetzt benötigen wir wieder eine Downtime und müssen zusätzlich die Datenbank patchen. Unter Windows ist es sehr wichtig das auch wirklich alles aus zu patchenden Oracle Home beendet ist. Daher zuvor mit dem [[https://technet.microsoft.com/en-us/sysinternals/processexplorer.aspx|Process Explorer von SysInternals]] immer prüfen ob nicht doch noch etwas das Oracle Home verwendet nach dem der Listener und die Datenbank gestoppt wurden! Ablauf: * Die Datenbank mit "shutdown immediate" herunterfahren * Den Oracle Listener und den Datenbank Service und alle weiteren Services mit Oracle Bezug stoppen * Mit dem ProcessExplorer prüfen das nichts mehr auf dem Server aus dem Oracle Home läuft! * Den Patch p21821214_121020_MSWIN-x86-64.zip auspacken * Administrative DOS Console ! starten, das Oracle Home setzen und mit "opatch apply" den Patch einspielen cd D:\temp\p21821214_121020_MSWIN-x86-64-Patch10Nov2015\21821214 set ORACLE_HOME=d:\oracle\product\12.1.0.2\dbhome_1 %ORACLE_HOME%\opatch apply .. (Oracle Home = 'D:\oracle\product\12.1.0.2\dbhome_1') Is the local system ready for patching? [y|n] y ... * Oracle Listener und Datenbank Service wieder starten * Oracle Datenbank starten bzw. prüfen ob die DB automatisch mit dem Start des Service auch gestartet wurde * Patch mit "datapatch" direkt in die Datenbank einspielen, in unserem Fall noch keine CDB #SID und Umgebung setzen cd $ENV:ORACLE_HOME\OPatch .\datapatch -verbose ... Connecting to database...OK Bootstrapping registry and package to current versions...done Determining current state...done ... The following patches will be applied: 21821214 (WINDOWS DB BUNDLE PATCH 12.1.0.2.10(64bit):21821214) Installing patches... Patch installation complete. Total patches installed: 1 Validating logfiles... Patch 21821214 apply: SUCCESS ... Damit ist die Datenbank auf dem neuesten Stand, Alert.log prüfen. Prüfen ob noch Windows Updates ausstehen und dann das Sytem neu starten. Läuft alles wie geplant nach dem Neustart und sind die Logs fehlerfrei kann die die Applikation hinter der Datenbank wieder gestartet werden. ---- === Datenbank Statistiken / SQL Profile komplett neu erstellen === Läuft alles wie geplant, kann das Feintuning der Applikation beginnen. Zuerst neue Statistiken erzeugen dann alle SQL Profile löschen und dann heißt es die Applikation gut im Auge zu behalten und neu zu tunen! ==DB Statistiken neu erstellen== Statistiken optimieren: * Neue Workload Statisk im laufenden Betrieb anlegen * Calibrate IO Statistiken für die Parallel Ausführung prüfen und neu anlegen * Statistiken auf interne DB Tabellen neu anlegen * Statistiken auf User Schema Objekte neu erstellen siehe dazu => [[dba:statistiken|Statistiken anlegen und überwachen]] ==SQL Profile== Da die 12c sich ganz anders verhält, empfiehlt es sich alle DB SQL Profile zu sichern und dann zu löschen. Siehe dazu => [[dba:oracle_sql_profile|Mit Oracle SQL Profilen arbeiten und SQL Profile zwischen Datenbanken austauschen]] Jetzt die Applikation sorgfältig überwachen und schnell reagieren wenn Problem mit Ausführungsplänen auftauchen. Belastet das die Produktion zu sehr, kann das natürlich zuvor alles in der TEST Umgebung zuvor erzeugt und dann per Export/Import in Prod eingespielt werden. ---- ====Inkompatibilitäten mit 11g ==== Nach dem Upgrade der Datenbank muss die Applikation auf Ihre Tauglichkeit bzgl. 12c im Detail geprüft und analysiert werden. Sehr hilfreich ist hier ein [[dba:oracle_sqlfehler_protokoll|Protokolls zur Überwachung von fehlerhaften SQL Statements in der Datenbank]]. === "set Role" mit Password - 11g Password wird nicht akzeptiert=== Eine Problem kann ein "set Role" mit Password sein, in der verwendeten Software wird eine Rolle über Passwort aktiviert. Damit das wieder funktioniert muss das Password auf der Rolle einfach erneut in der 12c Umgebung gesetzt werden und dann funktioniert es wieder! ---- ==== Eine neue CDB Datenbank anlegen und die neue Datenbank als PDB dort einfügen ==== Im nächsten Schritt kann dann aus der Singe Database Umgebung eine Plugable Database Umgebung entstehen. Vorbereitung: * Soll Apex in Zukunft verwendet werden, ist zuvor Apex in der Container Datenbank zu löschen um hier keine Probleme mit Abhängigkeiten zu verschiedenen Versionen in den PDB Datenbank zu erhalten. Ablauf: * Metadaten aus der produktiven Single Instance extrahieren * Anlegen einer neuen CDB Datenbank auf dem System * Die eigentliche produktive Datenbank wird als Container in die neue Container Daten definiert (Die Datendateien bleiben natürlich da wo sie gerade liegen) siehe auch https://oracle-base.com/articles/12c/multitenant-migrate-non-cdb-to-pdb-12cr1 ---- ==== Datenbank wieder löschen und Oracle Home entfernen ==== Soll das System wieder umgebaut/abgebaut werden ohne Neuinstallation von Windows sind die folgenden Schritte notwendig: * Datenbank + DB Service entfernen [[dba:drop_database|Eine Oracle Datenbank komplett löschen - "startup mount RESTRICT -> drop database"]] * Oracle DB Software deinstallieren $ENV:ORACLE_HOME\deinstall\deinstall.bat * Evlt. Services mit SC ein einer DOS Schell entfernensc delete OracleRemExecServiceV2 * Pürfen ob alle Verzeichnisse des Oracle Homes entfernt wurden, manuell bei Bedarf löschen * Reboot ---- ==== Quellen ==== Blogs: * https://blogs.oracle.com/UPGRADE/entry/welcome_to_the_oracle_database * https://oracle-base.com/articles/12c/upgrading-to-12c Oracle Dokumentation * https://docs.oracle.com/database/121/NXDQI/toc.htm * http://www.oracle.com/technetwork/database/upgrade/upgrading-oracle-database-wp-12c-1896123.pdf Ein paar Tipps für die Windows Konfiguration * http://www.oracle.com/webfolder/technetwork/de/community/dojo/index.html siehe 2008 RAC Installation