Może zaistnieć scenariusz, w którym faza przełączenia nie powiodła się. Możliwe jest cofnięcie się do poprzedniego stanu przełączenia (wycofanie łaty), jeśli baza danych flashback jest albo włączona w bazie danych, albo zrobiliśmy pełną kopię zapasową przed przełączeniem
Wyjaśniłbym to w odniesieniu do Database Flashback, aby wycofać łatkę
Zakładam, że mamy tutaj włączoną funkcję Flashback w bazie danych. Możemy to potwierdzić za pomocą polecenia
SQL>select FLASHBACK_ON from v$database;
FLASHBACK_ON
------------
Yes
Możesz dowiedzieć się więcej o bazie danych Flashback w poniższych linkach
Flashback Oracle Database
Jak wykonać flashback, gdy mamy ochronę danych
Zaleca się, aby fazę przełączania łatania online zaplanować na czas, w którym jest niewiele transakcji online, a przetwarzanie wsadowe jest minimalne. Należy upewnić się, że krytyczne współbieżne żądania nie są wykonywane podczas przełączania. Powinieneś także rozważyć wstrzymanie zaplanowanych jednoczesnych żądań przed wykonaniem przełączenia, ponieważ w przeciwnym razie faza przełączenia będzie czekać na zakończenie programu, a ponadto stracisz dane transakcji w przypadku retrospekcji
Przyjrzyjmy się problemowi
Przypadek 1
Prowadzisz cykl aktualizacji online:
$ adop phase=prepare
$ adop phase=apply patches=99999999
$ adop phase=finalize
$ adop phase=cutover
Przełączanie nie powiodło się i musisz wrócić do stanu systemu przed uruchomieniem fazy przełączania.
Gdybyś nie uruchomił fazy przełączania, byłbyś w stanie cofnąć proces aplikacji łaty, uruchamiając fazę przerwania. Nie jest to jednak możliwe po uruchomieniu przełączenia.
Istnieją dwie główne części do wycofania poprawki:
(1) Przywracanie bazy danych :Baza danych Flashback to najszybsza metoda na cofnięcie zmian w bazie danych i cofnięcie się do punktu w czasie. Możemy również użyć techniki przywracania bazy danych, ale jest to bardzo czasochłonne
Flashowanie bazy danych
a).Najpierw zamknij bazę danych, a następnie uruchom ją w stanie montowania:
SQL>shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL>startup mount ORACLE instance started.
b). Przywróć retrospekcję do określonego czasu.
SQL>flashback database to time to_data(<time before teh cutover>; Flashback complete.
c). Uruchom bazę danych w trybie tylko do odczytu:
SQL>alter database open read only; Database altered. Check all looks as expected.
d).Zamknij bazę danych, uruchom ją w stanie montowania, a następnie otwórz ją opcją 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) Przywracanie systemu plików :W zależności od tego, kiedy przełączenie nie powiodło się, może być konieczne przywrócenie systemów plików warstwy aplikacji
Przywracanie systemów plików
To, czy musisz wykonać ten krok, jest warunkowe, w zależności od tego, czy przełączenie nie powiodło się przed przełączeniem systemów plików. Możesz określić, który z tych przypadków ma zastosowanie, odwołując się do dzienników przełączania w $NE_BASE/EBSapps/log/adop/
Przypadek 1 — Jeśli komunikaty dziennika wskazują, że przełączenie nie powiodło się przed przełączeniem systemów plików, wykonaj czyste zamknięcie wszystkich uruchomionych usług. Następnie uruchom ponownie wszystkie usługi, używając normalnego skryptu startowego,
Przypadek 2 – Jeśli komunikaty dziennika wskazują, że przełączenie nie powiodło się po zmianie systemów plików, wykonaj poniższy krok, aby przełączyć systemy plików z powrotem.
(a) Zamknij usługi uruchomione z nowego uruchomionego systemu plików
1.Pobierz środowisko w nowym uruchomionym systemie plików.
2.Z $ADMIN_SCRIPTS_HOME zamknij wszystkie usługi (za pomocą adstpall .sh w systemie UNIX).
(b)W środowisku wielowęzłowym powtórz poprzednie dwa kroki na wszystkich węzłach, pozostawiając węzeł administracyjny na wszystkich węzłach podrzędnych.
(c) Przełącz systemy plików z powrotem
Na wszystkich węzłach, w których systemy plików zostały przełączone, uruchom następujące polecenie, aby przełączyć systemy plików z powrotem:
$ 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)Uruchom wszystkie usługi ze starego uruchomionego systemu plików (używając adsstrtal.sh w systemie UNIX).
(e)W środowisku wielowęzłowym powtórz poprzednie dwa kroki na wszystkich węzłach, zaczynając od węzła administracyjnego a następnie przejście do węzłów podrzędnych
Wniosek
Po zakończeniu przywracania masz dwie podstawowe opcje, aby kontynuować:
(a) Przerwij bieżący cykl aktualizacji, jeśli problem, który wymagał przywrócenia, był spowodowany przez poprawki, które próbowałeś zastosować.
Oto kroki, jak przerwać cykl aktualizacji online
Jeśli cykl poprawek kończy się niepowodzeniem i problemu nie można szybko rozwiązać, możliwe jest przerwanie cyklu instalowania poprawek i powrót do normalnego działania w czasie wykonywania. Wydanie poprawki zostanie usunięte.
Możesz porzucić cykl łatania (bez stosowania łatek) uruchamiając polecenie:
$ adop phase=abort
Przerwanie cyklu łatania spowoduje porzucenie edycji łaty, ale przed rozpoczęciem nowego cyklu łatania musisz uruchomić fazy czyszczenia i fs_clone. Czyszczenie musi być pełne.
For example:
$ adop phase=prepare
$ adop phase=apply patches=9999999
$ adop phase=abort
$ adop phase=cleanup cleanup_mode=full
$ adop phase=fs_clone
Opcjonalnie możesz połączyć polecenia przerwania i czyszczenia w następujący sposób:
$ adop phase=abort,cleanup cleanup_mode=full
(b) Zidentyfikuj i napraw wszelkie inne problemy w bieżącym cyklu aktualizacji i kontynuuj instalowanie.