Възможно е да има сценарий, когато фазата на превключване е неуспешна. Възможно е да се върнете към предишното състояние на превключване (връщане на корекцията), ако базата данни за ретроспекция е активирана в базата данни или сме направили пълно архивиране преди изключване
Бих го обяснил по отношение на Database Flashback за връщане на корекцията
Предполагам, че тук имаме активиран Flashback в базата данни. Можем да потвърдим това с командата
SQL>select FLASHBACK_ON from v$database;
FLASHBACK_ON
------------
Yes
Можете да научите повече за Flashback базата данни в връзките по-долу
Flashback Oracle Database
Как да Flashback, когато имаме защита на данните
Препоръчително е фазата на преминаване на онлайн корекции да бъде насрочена за време, когато има малко онлайн транзакции и пакетната обработка е минимална. Трябва да потвърдите, че критичните едновременни заявки не се изпълняват по време на превключване. Трябва също така да помислите за поставяне на планирани едновременни заявки на изчакване, преди да изпълните прекъсване, тъй като в противен случай фазата на прекъсване ще изчака изпълнението на програмата плюс ще загубите данни за транзакциите в случай на ретроспекция
Нека разгледаме Проблемния случай
Случай 1
Изпълнявате цикъл на онлайн корекция:
$ adop phase=prepare
$ adop phase=apply patches=99999999
$ adop phase=finalize
$ adop phase=cutover
Прекъсването е неуспешно и трябва да се върнете към състоянието на системата, преди да изпълните фазата на превключване.
Ако не сте стартирали фазата на прекъсване, щяхте да можете да върнете обратно процеса на прилагане на корекция, като стартирате фазата на прекратяване на adop. Това обаче не е възможно след стартиране на превключването.
Има две основни части за връщане на корекцията:
(1) Възстановяване на база данни :Flashback базата данни е най-бързият метод за връщане назад на промените в базата данни и връщане към момента във времето. Можем да използваме и техника за възстановяване на база данни, но това отнема много време
Обратно мигане на базата данни
a). Първо изключете базата данни, след това я стартирайте в състояние на монтиране:
SQL>shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL>startup mount ORACLE instance started.
b).Възстановете ретроспекцията до определеното време.
SQL>flashback database to time to_data(<time before teh cutover>; Flashback complete.
c). Стартирайте базата данни в режим само за четене:
SQL>alter database open read only; Database altered. Check all looks as expected.
d). Изключете базата данни, стартирайте я в състояние на монтиране, след което я отворете с опцията 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)Възстановяване на файловата система :В зависимост от това кога превключването е неуспешно, може да се наложи да възстановите файловите системи на ниво приложение
Възстановяване на файловите системи
Дали трябва да изпълните тази стъпка е условно, в зависимост от това дали прекъсването е неуспешно преди превключването на файловите системи. Можете да определите кой от тези случаи е приложим, като се обърнете към регистрационните файлове за преминаване в $NE_BASE/EBSapps/log/adop/
Случай 1 – Ако съобщенията в журнала показват, че превключването е неуспешно преди превключването на файловите системи, направете чисто изключване на всички работещи услуги. След това рестартирайте всички услуги, като използвате нормалния скрипт за стартиране,
Случай 2 – Ако съобщенията в журнала показват, че превключването е неуспешно след превключване на файловите системи, следвайте стъпката по-долу, за да превключите обратно файловите системи.
(a) Изключване на услугите, стартирани от нова файлова система за изпълнение
1.Изход на средата на новата файлова система за изпълнение.
2.От $ADMIN_SCRIPTS_HOME изключете всички услуги (с помощта на adstpall .sh на UNIX).
(b)В среда с множество възли, повторете предходните две стъпки на всички възли, оставяйки администраторския възел до края на всички подчинени възли.
(c) Превключване на файловите системи обратно
На всички възли, където файловите системи са били превключени, изпълнете следната команда, за да превключите обратно файловите системи:
$ 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) Стартирайте всички услуги от старата файлова система за изпълнение (използвайки adstrtal.sh на UNIX).
(e) В среда с множество възли повторете предходните две стъпки на всички възли, като започнете с администраторския възел и след това се пристъпва към подчинените възли
Заключение
След като възстановяването завърши, имате две основни опции за продължаване:
(a) Прекъснете текущия цикъл на корекция, ако проблемът, който изискваше да възстановите, е причинен от корекциите, които се опитвате да приложите.
Ето стъпки за прекратяване на онлайн цикъл на корекция
Ако цикълът на корекция е неуспешен и проблемът не може да бъде разрешен бързо, е възможно да прекъснете цикъла на корекция и да се върнете към нормална работа по време на работа. Изданието на корекцията ще бъде премахнато.
Можете да изоставите цикъл на корекции (без да прилагате корекции), като изпълните командата:
$ adop phase=abort
Прекратяването на цикъл на корекция ще отпадне изданието на корекцията, но след това трябва да стартирате фазите на почистване и fs_clone, преди да започнете нов цикъл на корекция. Почистването трябва да е пълно почистване.
For example:
$ adop phase=prepare
$ adop phase=apply patches=9999999
$ adop phase=abort
$ adop phase=cleanup cleanup_mode=full
$ adop phase=fs_clone
По желание можете да комбинирате командите за прекратяване и почистване, както следва:
$ adop phase=abort,cleanup cleanup_mode=full
(b) Идентифицирайте и коригирайте всички други проблеми в текущия цикъл на корекция и продължете с корекцията.