Může nastat situace, kdy selhala fáze přerušení. Je možné se vrátit do předchozího stavu cutover (rollback the patch), pokud je v databázi povolena databáze flashbacků nebo jsme před přerušením provedli plnou zálohu
Vysvětlil bych to s ohledem na Database Flashback pro vrácení záplaty
Předpokládám, že zde máme v databázi povolený Flashback. To můžeme potvrdit příkazem
SQL>select FLASHBACK_ON from v$database;
FLASHBACK_ON
------------
Yes
Více o databázi Flashback se můžete dozvědět v níže uvedených odkazech
Flashback Oracle Database
Jak na Flashback, když máme dataguard
Fáze omezení online záplatování se doporučuje naplánovat na dobu, kdy je málo online transakcí a dávkové zpracování je minimální. Měli byste potvrdit, že kritické souběžné požadavky se během přerušení neprovádějí. Měli byste také zvážit pozastavení plánovaných souběžných požadavků před provedením přerušení, protože jinak fáze přerušení počká na dokončení programu a v případě flashbacku přijdete o data transakce
Podívejme se na problémový případ
Případ 1
Spouštíte cyklus online oprav:
$ adop phase=prepare
$ adop phase=apply patches=99999999
$ adop phase=finalize
$ adop phase=cutover
Přerušení se nezdaří a musíte se vrátit do stavu systému před spuštěním fáze přerušování.
Pokud byste nespustili fázi přerušení, byli byste schopni vrátit proces aplikace opravy spuštěním fáze přerušení adopce. To však není možné, jakmile bylo provedeno přerušení.
Opravu lze vrátit zpět ze dvou hlavních částí:
(1) Obnovení databáze :Databáze Flashback je nejrychlejší způsob, jak vrátit změny databáze a vrátit se do bodu v čase. Můžeme také použít techniku obnovení databáze, ale to je velmi časově náročné
Aktualizace databáze
a). Nejprve vypněte databázi a poté ji spusťte ve stavu připojení:
SQL>shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL>startup mount ORACLE instance started.
b).Obnovte flashback na určený čas.
SQL>flashback database to time to_data(<time before teh cutover>; Flashback complete.
c).Spusťte databázi v režimu pouze pro čtení:
SQL>alter database open read only; Database altered. Check all looks as expected.
d). Vypněte databázi, spusťte ji ve stavu připojení a poté ji otevřete pomocí možnosti resetlogs:
SQL>shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL>startup mount ORACLE instance started. Database mounted. SQL>alter database open resetlogs; Database altered.
2) Obnovení systému souborů :V závislosti na tom, kdy se přerušení nezdařilo, možná budete muset obnovit systémy souborů aplikační vrstvy
Obnovení systému souborů
Zda je nutné provést tento krok, je podmíněno v závislosti na tom, zda se před přepnutím souborových systémů nezdařilo přepnutí. Který z těchto případů platí, můžete zjistit podle protokolů přerušení v $NE_BASE/EBSapps/log/adop/
Případ 1 – Pokud zprávy protokolu naznačují, že přepnutí selhalo před přepnutím systémů souborů, proveďte čisté vypnutí všech spuštěných služeb. Poté restartujte všechny služby pomocí normálního spouštěcího skriptu
Případ 2 – Pokud zprávy protokolu naznačují, že přepnutí selhalo po přepnutí systémů souborů, přepněte systémy souborů zpět podle níže uvedeného kroku.
(a) Vypněte služby spuštěné z nového spuštěného souborového systému
1. Zdroj prostředí na novém spuštění souborového systému.
2.Z $ADMIN_SCRIPTS_HOME vypněte všechny služby (pomocí adstpall .sh v systému UNIX).
(b)V prostředí s více uzly opakujte předchozí dva kroky na všech uzlech, přičemž ponechte uzel správce až po všechny podřízené uzly.
(c) Přepnout systémy souborů zpět
Na všech uzlech, kde byly přepnuty systémy souborů, spusťte následující příkaz pro přepnutí souborových systémů zpět:
$ perl $AD_TOP/patch/115/bin/txkADOPCutOverPhaseCtrlScript.pl \ -action=ctxupdate \ -contextfile=<full path to new run context file> \ -patchcontextfile=<full path to new patch file system context file> \ -outdir=<full path to out directory>
(d)Spusťte všechny služby ze starého systému souborů (pomocí adstrtal.sh v systému UNIX).
(e)V prostředí s více uzly opakujte předchozí dva kroky na všech uzlech, počínaje uzlem správce a poté pokračujte k podřízeným uzlům
Závěr
Po dokončení obnovy máte dvě základní možnosti, jak pokračovat:
(a) Přerušit aktuální cyklus oprav, pokud problém, který vyžadoval obnovení, byl způsoben opravami, které jste se pokoušeli aplikovat.
Zde jsou kroky ke zrušení cyklu online oprav
Pokud cyklus oprav selže a problém nelze rychle vyřešit, je možné cyklus opravy přerušit a vrátit se k normálnímu běhu. Vydání opravy bude zrušeno.
Cyklus oprav můžete opustit (bez použití jakýchkoli oprav) spuštěním příkazu:
$ adop phase=abort
Přerušením cyklu oprav dojde k vyřazení edice oprav, ale před zahájením nového cyklu oprav musíte spustit fáze čištění a fs_clone. Vyčištění musí být úplné.
For example:
$ adop phase=prepare
$ adop phase=apply patches=9999999
$ adop phase=abort
$ adop phase=cleanup cleanup_mode=full
$ adop phase=fs_clone
Volitelně můžete zkombinovat příkazy přerušení a vyčištění následovně:
$ adop phase=abort,cleanup cleanup_mode=full
(b) Identifikujte a opravte jakékoli další problémy v aktuálním cyklu oprav a pokračujte v opravování.