===== Umstellen auf Oracle 18c - Upgrade einer Oracle Single Instance Datenbank 12c R2 auf Oracle 18 ===== **Erstellt 2018/11** Mit Oracle 12c R2 / 18c ändert sich auch leicht der Upgrade Prozess von älteren DB Versionen inkl. der 12c R1. Bzgl mehr Informationen zu Update auf R1 im Detail siehe auch [[dba:upgrade_11g_windows_2012_to_12c|Eine Oracle Datenbank 11g R2 auf eine neue Oracle 12c Datenbank Umgebung unter Windows 2012 R2 umziehen]] Hier ein paar Anmerkungen zum generellen Ablauf mit Hilfe der "preupgrade.jar" und "dbupgrade.cmd" Tools. ** Fehler "ORA-1017 Invalid Username or Password" nach 18c Upgrade** **Hinweis!** Falls noch 10g Clients z.B. über OCI Applikation in Einsatz sind, per Default wird das 10g Password nicht mehr unterstützt! => https://docs.oracle.com/database/122/UPGRD/case-insensitive-passwords-ora-1017-invalid-username-password.htm#UPGRD-GUID-FDA9C77A-12F4-4410-9448-9BCC13960C27, setzen von SQLNET.ALLOWED_LOGON_VERSION_SERVER=11 in der sqlnet.ora als temporäre Lösung bis alle Clients umgestellt auf 12c R2 umgestellt sind! => siehe auch [[dba:passwort_12c_r2|Oracle 12c R2 - Password Handing - ORA-1017 Invalid Username or Password - Identified by Values]] ---- ====Ablauf==== ===Installation Software 18c === Es sollten noch mindestens 7 GB Platz für die Software Installation zur Verfügung stehen. Ein 4k Display wird nicht unterstützt, hier hilft dann nur die Windows Lupe zu verwenden, oder versuchen die DPI Eigenschaften unter Compatible anzupassen. Mit der 18c wird das Oracle Home komplett kopiert mitgeliefert und die Software wird in das gewünschten Verzeichnis ausgepackt. Das Setup Programm konfiguriert dann dieses ORACLE_HOME Verzeichnis. Ablauf: * Download der Software Oracle Database 18c (18.3) for Microsoft Windows x64 (64-bit) über das Edelivery Portal => https://edelivery.oracle.com/ oder https://www.oracle.com/technetwork/database/enterprise-edition/downloads/oracle18c-windows-180000-5066774.html * Prüfen der Checksum Get-FileHash .\WINDOWS.X64_180000_db_home\ -Algorithm SHA256 Algorithm Hash --------- ---- SHA256 6177BB3F6502EF793DB562DD6CF4904DD834A77BA20A174E0E83554041D2B7AA * Auspacken der Datei WINDOWS.X64_180000_db_home.zip mit der Oracle 18c Software in eine neues Oracle Home wie "C:\oracle\products\18.3.0.0.0\dbhome_1" * Öffnen einer administrativen Session und starten der setup.bat Datei * "Software only" Auswahl * Bestehenden Oracle Run User verwenden! * Auf das richtiges Oracle Base Verzeichnis achten * EE oder SE Edition auswählen Nach der Software Installation wird geprüft ob ein aktueller Patch für die 18c unter Windows schon zur Verfügung steht. Für die 18.3 ist aber noch kein RU oder gar ein RUR verfügbar, bzw. bei Windows ist das ja dann immer noch ein Bundle Patch. Für Linux gibt es zur Zeit (10.2018) den Patch 28090523: DATABASE RELEASE UPDATE 18.3.0.0.180717 Hier ein paar Link zur Oracle Release Strategie =>Eleanor Meritt - Oracle Open World 2017 https://static.rainfocus.com/oracle/oow17/sess/1496886539973001Z80G/PF/CON6550-NewReleaseModelForOracleDatabase-v9_1506958121732001IJYT.pptx und https://mikedietrichde.com/2017/10/24/differences-psu-bp-ru-rur/ ---- ====Upgrade der Datenbank==== **Zuvor immer das Backup der bestehenden Datenbank sicherstellen!** ===PreCheck durchführen=== **Das kann alles noch im laufenden Betrieb der Umgebung vorbereitet werden.** Check der bestehenden Datenbank mit dem **preupgrade.jar** und erzeugen des Fixup Scripts: # Darauf achten das noch die SID und ORACLE_HOME des ALTEN Homes in der Umgebung gesetzt sind! # Falls kein Java installiert, das der DB "ausleihen" $ORACLE_HOME/jdk/bin/java.exe cd C:\oracle\products\18.3.0.0\dbhome_1 .\jdk\bin\java.exe -jar .\rdbms\admin\preupgrade.jar TERMINAL TEXT ... ================== PREUPGRADE SUMMARY ================== C:\oracle\cfgtoollogs\GPI\preupgrade\preupgrade.log C:\oracle\cfgtoollogs\GPI\preupgrade\preupgrade_fixups.sql C:\oracle\cfgtoollogs\GPI\preupgrade\postupgrade_fixups.sql Es werde die PreUpgrade und PostUpgrade SQL Scripte erzeugt. Das preupgrade_fixups.sql MUSS zuvor in der alten DB Umgebung auf der zu migrierenden Datenbank aufgerufen werden! ==PreCheck Script ausführen== PreUpgrade Script auf in der "alten" DB Umgebung als sys ausführen sqlplus / as sysdba @C:\oracle\cfgtoollogs\GPI\preupgrade\preupgrade_fixups.sql Anweisungen befolgen wie DB Statistik neu anlegen! EXECUTE DBMS_STATS.GATHER_DICTIONARY_STATS; Hidden obsolete Parameter reseten, Bespiel: ALTER SYSTEM RESET "_some_hidden_parameter" scope = spfile; Besonderes darauf achten das in Passwörter der DB Uuser die NUR in der Version 10g vorliegen, neu gesetzt werden! select password_versions,username from dba_users where password_versions like '%10G%'; Nach dem Upgrade können sich die User mit NUR 10g PWD nicht mehr an der DB 18c anmelden! ---- ==== DB Umzug=== **Password vom ORARUN User heraussuchen!** Wird dann später am Anlegen des DB und des Listener Service auf jeden Fall benötigt! == Konfiguration in die neue Umgebung nach $ORACLE_HOME\database kopieren== * listener.ora / tnsnames.ora / sqlnet.ora in das neue Home nach $ORACLE_HOME\network\admin kopieren * Pfade in der Listener.ora anpassen! * Falls Transparent Gateway im Einsatz, Konfiguration unter ORACLE_HOME/hs/admin kopieren! * init.ora/spfile / pwd file in das neue Home nach $ORACLE_HOME\database kopieren ==Datenbank im alten Home stoppen== - Datenbank mit "shutdown immediate" herunterfahren - Alle Oracle Dienste beenden ==DB Service im alten Home löschen== Als Administrative Session! $env:ORACLE_HOME="D:\oracle\product\12.2.0.1\dbhome_1" cd $env:ORACLE_HOME\bin oradim -delete -sid GPI ==Listener Service im alten Home löschen== Als Administrative Session ! Auf DOS Schell achten! # mit SC cmd.exe sc query OracleOraDB12Home2TNSListener sc stop OracleOraDB12Home2TNSListener sc delete OracleOraDB12Home2TNSListener == Listener Service im neuen Home anlegen in dem von dort der Listener gestartet wird== Listner.ora und tnsnames.ora/sqlnet.ora aus alten Home/network/admin nach NEUES ORACLE_HOME/network/admin **kopieren** und **anpassen** cmd als admin: # Neues Oracle Home setzen und in das neue Oracle_Home/bin Verzeichnis wechseln! $env:ORACLE_HOME="D:\oracle\product\18.3.0.0\dbhome_1" cd $env:ORACLE_HOME\bin ./lsnrctl start Prüfen ob der Service auch angelegt wurde und ob Autostart richtig gesetzt wurde, default ist manuell! Problem: Enter orarun's password : TNSLSNR for 64-bit Windows: Version 18.0.0.0.0 - Production System parameter file is C:\oracle\products\18.0.0\dbhome_1\network\admin\listener.ora Log messages written to C:\oracle\diag\tnslsnr\saturn\listener\alert\log.xml Error listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.10.10.1)(PORT=1521))) TNS-12546: TNS:permission denied TNS-12560: TNS:protocol adapter error TNS-00516: Permission denied 64-bit Windows Error: 13: Permission denied Listener failed to start. See the error message(s) above... hmm.... Listener auf den SYSTEM User geändert, nun funktioniert es .... so sollte das aber nicht sein! Siehe auch [[dba:listener_error_windows8_12c_tns_00516|Listener Fehler bei einer Installation unter Windows 8.1 wie TNS-12546 - TNS-00516 - 64-bit Windows Error: 13: Permission denied]] Noch keine Idee was hier falsch läuft. == Fehler TNS: Protocol adapter error == Falls das Oracle Home fest im ENV der Maschine gesetzt ist, diese schon auf das neue DB Home umstellen! Problem => Windows Env Variables Guide :Unable To Start Listener and reports Failed to start service error 0, TNS-12560: TNS: Protocol adapter error, TNS-12557:TNS:protocol adapter not loadable (Doc ID 2065022.1) ==DB Service im neuen Home anlegen== Überprüfen das auch init.ora/spfile/*.dat und pwd files vom alten Home/database in das neue Home/database kopiert wurden! Eine Administrative PowerShell öffnen und den DB Service anlegen: $env:ORACLE_HOME="D:\oracle\product\18.3.0.0\dbhome_1" cd $env:ORACLE_HOME\bin oradim -new -sid GPI 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! Service kontrollieren und nach Bedarf einstellen. Z.B. Registry prüfen "HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDB12Home1" ORA_VDS_AUTOSTART auf TRUE setzen, falls Autostart gewünscht. ==DB im Upgrade Modus im neuen Home starten== $ENV:ORACLE_SID="GPI" 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\gpi\gpi .. adrci> set home diag\rdbms\gpi\gpi adrci> show alert -tail -f ... Completed: ALTER DATABASE OPEN MIGRATE ... ===Eigentlichen DB Upgrade mit "dbupgrade.cmd" Script durchführen=== ORACLE_PATH und SQLPATH auf null setzen! Keine eigene login.sql darf aktiv sein! Gefahr von Seitenefekten mit eigenen Einstellungen!! Der eigentliche Upgrade wird nun in der 18c über das Script "dbupgrade.cmd" durchgeführt, das ruft das schon aus der 12c R1 bekannte Perl Upgrade Script auf. Auch in sehr performanten Umgebungen lag die Laufzeit meist zwischen 40 und 60 Minuten. $env:ORACLE_HOME="D:\oracle\product\18.3.0.0\dbhome_1" cd $env:ORACLE_HOME\bin mkdir d:\temp\19cUpgrade dbupgrade.cmd -n 4 -l d:\temp\18cUpgrade .... ------------------------------------------------------ Phases [0-108] Start Time:[2018_10_15 22:20:55] ------------------------------------------------------ *********** Executing Change Scripts *********** Serial Phase #:0 [GPI] Files:1 .... ------------------------------------------------------ Phases [0-108] End Time:[2018_10_15 22:51:25] ------------------------------------------------------ Grand Total Time: 1830s == POST Upgrade Script durchlaufen lassen== sqlplus / as sysdba startup @C:\oracle\cfgtoollogs\GPI\preupgrade\postupgrade_fixups.sql ... FFor Source Database: GPI Source Database Version: 12.2.0.0.0 For Upgrade to Version: 18.0.0.0.0 Preup Preupgrade Action Issue Is Number Preupgrade Check Name Remedied Further DBA Action ------ ------------------------ ---------- -------------------------------- 7. depend_usr_tables YES None. 8. old_time_zones_exist NO Manual fixup recommended. 9. post_dictionary YES None. 10. post_fixed_objects NO Informational only. Further action is optional. Auf ungültige Objekte prüfen und bei Bedarf alles neu übersetzen: sqlplus / as sysdba @?/rdbms/admin/utlrp ---- ===Umgebung Einstellungen / Backup Scripte auf die neue DB anpassen === Default DB Home in eigenen Scripten wie dem Backup anpassen. ==NLS_LANG bei Bedarf setzen== NLS Lang prüfen! ( HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDB12Home1\NLS_LANG) bei Bedarf von AMERICAN_AMERICA.WE8MSWIN1252 wieder auf GERMAN_GERMANY.WE8MSWIN1252 setzen. ==Umgebung prüfen== Umgebung wie PATH prüfen das alles auf das neue Oracle Home zeigt. == Falls im Einsatz .Net Klassen umziehen== Die .Net Klassen aus dem alten Home deregistrieren und neu aus dem neuen Oracle Home registrieren. Siehe [[prog:windows_dot_net_integration_plsql|Oracle 12c PL/SQL - Verwendung von .Net Libraries in PL/SQL - eine ".NET stored procedures" anlegen und aufrufen]] Den .NET Framework Extension, Dienst CLR Agent auf das neue Oracle Home umziehen: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\OracleOraDB12Home1ClrAgent # ImagePath anpassen an z.B. D:\Oracle\product\18.3.0.0.0\dbhome_1\bin\OraClrAgnt.exe agent_sid=CLRExtProc max_dispatchers=5 tcp_dispatchers=3 max_task_threads=10 max_sessions=50 ENVS=\"EXTPROC_DLLS=ONLY:D:\Oracle\product\18.3.0.0.0\dbhome_1\bin\oraclr12.dll\" ---- ---- ==== Problem - ADRCI Error DIA-49803: Purge not possible due to incompatible schema version.==== Nach ein paar Tagen sollen die Logfiles des Listener und der DB mit adrci aufgeräumt werden: Das Problem: DIA-49803: Purge not possible due to incompatible schema version. adrci> set home diag\tnslsnr\v65690\listener adrci> purge -age 0 DIA-49803: Purge not possible due to incompatible schema version. Lösung: Als erstes darauf achten, das auch das richtige ADRCI ( das aus dem aktuellen 18'er Home ) gestartet wird! Danach folgende Node beachten! => siehe ADRCI Error DIA-49803 - Purge Does Not Work In 12.2 If ADRCI Is Used To Access An Older ADR Home (Doc ID 2341825.1) Das hat mir aber dann auch nicht weitergeholfen, bei mir hat folgendes geklappt: adrci> migrate schema Schema migrated. adrci> purge -age 0 ---- ==== Compatible Parameter umstellen==== show parameter compatible NAME TYPE VALUE ------------------------------------ --------------------------------- ------------------------------ compatible string 12.1.0.2.0 alter system set compatible='18.3.0.0.0' scope=spfile sid='*'; -- neu starten startup force ---- ====Quellen ==== Oracle * https://docs.oracle.com/en/database/oracle/oracle-database/18/ntdbi/index.html * https://docs.oracle.com/en/database/oracle/oracle-database/18/spuss/upgrading-non-cdbs-same-system.pdf ---- ====== Upgrade mit einer Physical Standby Umgebung 12c R2 auf 18c === Genereller Ablauf aus => https://docs.oracle.com/database/121/SBYDB/upgrades.htm#SBYDB4933 * Primär - Installation Software 18c in neuen Oracle Home * Primär - Patch Software 18c im neuem Oracle Home * Standby - Installation Software 12c R2 in neuen Oracle Home * Standby - Patch Software 12c R2 im neuem Oracle Home * Primär - PreUpgrade Steps für die noch im R1 laufenden Home laufende Datenbank durchführen * Primär - Datenbank stoppen * Standby - Datenbank stoppen * Standby - DB auf neues Home umziehen, Listener aus neuen Home Starten PWD und init File ins neue Home kopieren, DB Service löschen und mit neuen Home neu anlegen, Pfade alle anpassen, wie PATH etc! * Standby - Mount der alten Datenbank über Datagard , nur mount Status! * Standby - Log shipping von der alten DB prüfen, Redo Apply auf the physical standby database aktivieren/prüfen * Primär - Datenbank ins neue Home umziehen, Listener aus neuen Home Starten PWD und init File ins neue Home kopieren, DB Service löschen und mit neuen Home neu anlegen, Pfade alle anpassen, wie PATH etc! * Primär - DB Upgarde durchführen * Primär - DB öffnen und prüfen Standby in Sync * Primär - dgmgrl testen , falls Fehler ORA-16714: the value of property string is inconsistent with the database setting show database orasb 'InconsistentProperties'; NCONSISTENT PROPERTIES INSTANCE_NAME PROPERTY_NAME MEMORY_VALUE SPFILE_VALUE BROKER_VALUE DGA24L DATAGUARDSYNCLATENCY 0 0 -- auf beiden systemen ALTER SYSTEM SET DATA_GUARD_SYNC_LATENCY=0 scope=both sid='*'; Parameter siehe [[https://docs.oracle.com/database/122/REFRN/DATA_GUARD_SYNC_LATENCY.htm#REFRN-GUID-A0965F0B-608C-4B68-85D1-9F14EFC191CC|DATA_GUARD_SYNC_LATENCY]] Optional den COMPATIBLE initialization parameter auf beiden Seiten anpassen ----