„ORA-03113: koniec pliku w kanale komunikacyjnym” podczas uruchamiania

22

Czytam posty tutaj, na temat wsparcia Oracle i gdziekolwiek indziej mogę znaleźć przez ostatnie trzy dni i zrezygnowałem z tego problemu ...

Baza danych Oracle została zawieszona. Zamknięcie bazy danych trwało kilka godzin, a potem zakończyło się. Nie uruchomi się ponownie. Serwer został zrestartowany. Oracle zostało zrestartowane. Przechodzenie krok po kroku: uruchamianie nomount działa, zmienia działanie montowania bazy danych, zmienia otwartą bazę danych zwraca ORA-03113. To wszystko na localhost - nie przez sieć. Maszyna nie ma żadnego działającego firewalla.

Masz pomysł, jak ominąć ten błąd ORA-03113? Rozmawiałem przez telefon z obsługą w Indiach przez ostatnie 4,5 godziny i jeszcze nie znalazłem nikogo pomocnego.

kainaw
źródło
1
Opublikuj fragment dziennika alertów ALTER DATABASE OPENi błędy po tym.
Mindaugas Riauba,
1
Wyszukaj (grep) wszystkie dzienniki alertów między ostatnim udanym uruchomieniem a bieżącym nieudanym uruchomieniem i wyszukaj ALTER SYSTEM SET przez cały ten czas. Być może ktoś zmienił jakiś parametr instancji w niestandardowy sposób.
kubańczyk

Odpowiedzi:

35

Po wielu godzinach błędnego przekierowania z oficjalnego wsparcia Oracle, zgłębiłem to sam i naprawiłem to. Dokumentuję to tutaj na wypadek, gdyby ktoś miał ten problem.

Aby to zrobić, musisz być użytkownikiem Oracle:

$ su - oracle

Krok 1: Musisz spojrzeć na dziennik alertów. Nie ma go w katalogu / var / log zgodnie z oczekiwaniami. Musisz uruchomić program do odczytu dzienników Oracle:

$ adrci
ADRCI: Release 11.2.0.1.0 - Production on Wed Sep 11 18:27:56 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
ADR base = "/u01/app/oracle"
adrci>

Zwróć uwagę na bazę ADR. To nie jest instalacja. Musisz zobaczyć domy, aby móc połączyć się z tym, którego używasz.

adrci> show homes
ADR Homes:
diag/rdbms/cci/CCI
diag/tnslsnr/cci/listener
diag/tnslsnr/cci/start
diag/tnslsnr/cci/reload

CCI jest domem. Ustaw to.

adrci> set home diag/rdbms/cci/CCI
adrci>

Teraz możesz przejrzeć dzienniki alertów. Byłoby bardzo miło, gdyby były one w / var / log, dzięki czemu można łatwo parsować dzienniki. Po prostu przestań chcieć i poradzić sobie z tym interfejsem. Przynajmniej możesz ogonić (i mam nadzieję, że masz bufor przewijania):

adrci> show alert -tail 100

Przewiń do tyłu, aż zobaczysz błędy. Chcesz PIERWSZY błąd. Wszelkie błędy po pierwszym błędzie są prawdopodobnie spowodowane przez pierwszy błąd. W moim przypadku pierwszym błędem było:

ORA-19815: WARNING: db_recovery_file_dest_size of 53687091200 bytes is 100.00% used, and has 0 remaining bytes available.

Jest to spowodowane transakcjami. Oracle nie jest przeznaczony do użycia. Jeśli wpychasz do niego dużo danych, zapisywane są dzienniki transakcji. Przechodzą do obszaru plików odzyskiwania. Gdy będzie już pełny (w tym przypadku 50 GB). Potem Oracle po prostu umiera. Zgodnie z projektem, jeśli coś zostanie pomieszane, Oracle zareaguje poprzez wyłączenie.

Istnieją dwa rozwiązania, właściwe i szybkie i brudne. Szybkim i brudnym jest zwiększenie db_recovery_file_dest_size. Najpierw wyjdź z Adrci.

adrci> exit

Teraz przejdź do sqlplus bez otwierania bazy danych, po prostu ją instaluj (możesz to zrobić bez montowania bazy danych, ale i tak ją instaluję).

$ sqlplus /nolog
SQL*Plus: Release 11.2.0.1.0 Production on Wed Sep 11 18:40:25 2013
Copyright (c) 1982, 2009, Oracle. All rights reserved.
SQL> connect / as sysdba
Connected.
SQL> startup mount

Teraz możesz zwiększyć swój aktualny rozmiar pliku db_recovery_file_dest_size, w moim przypadku do 75G:

SQL> alter system set db_recovery_file_dest_size = 75G scope=both

Teraz możesz ponownie zamknąć i uruchomić ponownie, a wcześniejszy błąd powinien zniknąć.

Właściwą poprawką jest pozbycie się plików odzyskiwania. Robisz to za pomocą RMAN, a nie SQLPLUS lub ADRCI.

$ rman
Recovery Manager: Release 11.2.0.1.0 - Production on Wed Sep 11 18:45:11 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
RMAN> backup archivelog all delete input;

Jeśli tak RMAN-06171: not connected to target database, spróbuj użyć rman target /zamiast po prosturman

Zaczekaj długo, a Twój dziennik archiwalny (który zajmował tyle miejsca) zniknie. Możesz więc zamknąć / uruchomić bazę danych i wrócić do pracy.

kainaw
źródło
Nie mogę znaleźć polecenia adrci na moim serwerze Linux z Oracle. Jak go zainstalować? Dzięki.
3
Dzięki! To działa. Ale poprawne polecenie dla rman to: export ORACLE_SID=my_oracle//rman target /
Aby dodać moje 2 centy - możesz sprawdzić ten artykuł tutaj, który zawiera polecenie, którego możesz użyć RMAN, aby wyczyścić obszar archiwum, a także kilka innych rzeczy. Ostrożnie, ponieważ wyczyści punkty przywracania, jeśli baza
danych