ORA-00257 jest jednym z najczęstszych błędów w życiu Oracle DBA. Często musi sobie z tym radzić. Baza danych Oracle prawie została z tego powodu zamrożona i wszystkie transakcje zostają zatrzymane. Zobaczmy, jak poradzić sobie z błędem ORA-00257
Komunikat o błędzie
ORA-00257:błąd archiwizatora. Połącz tylko wewnętrznie, aż do zwolnienia.
Zgodnie z oerr ORA-00257 oznacza błąd
ORA-00257:błąd archiwizatora. Połącz tylko wewnętrznie, aż do zwolnienia. Przyczyna:Proces archiwizujący otrzymał błąd podczas próby zarchiwizowania dziennika ponownego wykonywania. Jeśli problem nie zostanie szybko rozwiązany, baza danych przestanie wykonywać transakcje. Najbardziej prawdopodobną przyczyną tego komunikatu jest brak miejsca na urządzeniu docelowym do przechowywania pliku dziennika ponownego wykonania.
Akcja:Sprawdź plik śledzenia archiwizatora, aby uzyskać szczegółowy opis problemu. Sprawdź również, czy urządzenie określone w parametrze inicjującym archive_log_dest jest prawidłowo skonfigurowane do archiwizacji.
Gdzie widzisz ten komunikat o błędzie
1) Zobaczysz poniżej rodzaj komunikatu o błędzie związanego z dziennikiem alertów
Poniżej znajdują się niektóre informacje z dziennika alertów:
Errors in file \u01\oracle\product\11.2.0\diag\rdbms\TEST\test\trace\test_arc1_1010.trc: ORA-19815: WARNING: db_recovery_file_dest_size of 21474836480 bytes is 100.00% used, and has 0 remaining bytes available.Wed jan 21 02:44:02 2016 ************************************************************************ You have following choices to free up space from flash recovery area: 1. Consider changing RMAN RETENTION POLICY. If you are using Data Guard, then consider changing RMAN ARCHIVELOG DELETION POLICY. 2. Back up files to tertiary device such as tape using RMAN BACKUP RECOVERY AREA command. 3. Add disk space and increase db_recovery_file_dest_size parameter to reflect the new space. 4. Delete unnecessary files using RMAN DELETE command. If an operating system command was used to delete files, then use RMAN CROSSCHECK and DELETE EXPIRED commands. ************************************************************************ ARC1: Failed to archive thread 1 sequence 1459 (1809) ARCH: Archival stopped, error occurred. Will continue retrying Wed jan 21 02:44:02 2016 Errors in file \u01\oracle\product\11.2.0\diag\rdbms\TEST\test\trace\test_arc1_1010.trc ORA-16038: log 3 sequence# 1459 cannot be archived ORA-19809: limit exceeded for recovery files ORA-00312: online log 3 thread 1: '\u01\oracle\oradata\TEST\redo03.LOG'
2) Jeśli spróbujesz zalogować się jako użytkownik inny niż sysdba, pojawi się poniższy komunikat o błędzie
sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 - Production on Copyright (c) 1982, 2008, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> conn apps/apps ERROR: ORA-00257: archiver error. Connect internal only, until freed. Warning: You are no longer connected to ORACLE. SQL
3) Jeśli spróbujesz zalogować się jako użytkownik sysdba i sprawdzisz zdarzenie oczekiwania na sesję , zobaczysz zdarzenie przełączania archiwum dziennika sesji oczekującej
Dlaczego występuje błąd ORA-00257
Ten błąd występuje, gdy docelowa lokalizacja dziennika archiwum jest pełna lub niedostępna. Proces w tle Oracle ARCH jest odpowiedzialny za pobranie dzienników ponawiania z systemu plików dziennika ponawiania online i zapisanie ich w zwykłym pliku nie może zapisywać w systemie plików
Jak rozwiązać błędy ORA-00257
1) Przede wszystkim powinniśmy znaleźć miejsce docelowe dziennika archiwum dla bazy danych
sqlplus / as sysdba SQL> archive log list;
możesz również znaleźć archiwalne miejsca docelowe za pomocą USE_DB_RECOVERY_FILE_DEST
SQL> show parameter db_recovery_file_dest;
Uzyskaj również rozmiar db_recovery_file_dest
show parameter db_recovery_file_dest_size;
2) Następnym krokiem w rozwiązaniu ORA-00257 jest sprawdzenie, jaka wartość jest używana dla db_recovery_file_dest_size, użyj:
SQL> SELECT * FROM V$RECOVERY_FILE_DEST;
Może się okazać, że SPACE_USED jest tym samym co SPACE_LIMIT, jeśli tak jest, aby rozwiązać problem ORA-00257, należy przesunąć dzienniki archiwum w inne miejsce.
SQL> SELECT * FROM V$RECOVERY_FILE_DEST; NAME SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES +FLASH 21474836480 21474836480 212428800 200
3) W takiej sytuacji możemy mieć wiele rozwiązań
a) Zwiększ rozmiar db_recovery_file_dest, jeśli masz wolne miejsce w Oracle ASM lub systemie plików, czegokolwiek używasz
alter system set db_recovery_file_dest_size=40g;
b) Możemy usunąć dziennik archiwum, którego kopię zapasową już wykonano
rman target / delete archivelog UNTIL TIME = 'SYSDATE-1' backed up 1 times to sbt_tape;rman target / RMAN>delete archivelog until time 'SYSDATE-3'; or, RMAN>delete archivelog all; or delete archivelog UNTIL TIME = 'SYSDATE-1.5' backed up 1 times to sbt_tape;
c) Jeśli kopia zapasowa nie została wykonana, zaleca się wykonanie kopii zapasowej, a następnie usunięcie plików dziennika archiwum
rman target /run { allocate channel d1 type disk; backup archivelog all delete input format '/u11/ora/arch_%d_%u_%s'; release channel d1; }
d) Czasami stara kopia zapasowa, logi flashbacków mogą zajmować miejsce w db_recovery_file_dest, sprawdzasz zawartość db_recovery_file_dest
SQL>Select file_type, percent_space_used as used,percent_space_reclaimable as reclaimable, number_of_files as "number" from v$flash_recovery_area_usage;FILE_TYPE USED RECLAIMABLE number ------------ ---------- ----------- ---------- CONTROLFILE 0 0 0 ONLINELOG 0 0 0 ARCHIVELOG 4.77 0 2 BACKUPPIECE 56.80 0 10 IMAGECOPY 0 0 0 FLASHBACKLOG 11.68 11.49 63
Czasami może być obecny stary gwarantowany punkt przywracania, upuszczenie zwolni miejsce.
Wyjaśnienie i ograniczenia bazy danych Flashback
jak wykonać retrospekcję, gdy mamy ochronę danych
10 najpopularniejszych zapytań dotyczących bazy danych Flashback
e) Jeśli nie potrzebujemy dziennika archiwum , po prostu usuniemy go również w tym celu
rman target / DELETE NOPROMPT ARCHIVELOG ALL;
Inne przydatne polecenie w tym przypadku
LIST COPY OF ARCHIVELOG ALL COMPLETED AFTER 'SYSDATE-1'; DELETE NOPROMPT BACKUP COMPLETED BEFORE 'SYSDATE-4'; LIST COPY OF ARCHIVELOG UNTIL TIME = 'SYSDATE-18'; BACKUP ARCHIVELOG COMPLETION TIME BETWEEN 'SYSDATE-28' AND 'SYSDATE-7';
Ważna uwaga
Proszę nie usuwać ręcznie pliku dziennika archiwum z systemu plików, nie zaktualizuje to pliku kontrolnego i nie usunie problemu. Następnie musisz sprawdzić wszystko w rman i usunąć przestarzałe i wygasłe
f) Możemy określić alternatywną ścieżkę do archiwizacji
Archiwizacja jest wykonywana automatycznie do alternatywnego miejsca docelowego2
log_archive_dest_1='LOCATION=use_db_recovery_file_dest NOREOPEN ALTERNATE=LOG_ARCHIVE_DEST_2' log_archive_dest_2='LOCATION=/other_dest_for_archiving' log_archive_dest_state_1='enable' log_archive_dest_state_2='alternate' db_recovery_file_dest='/u01/app/oradata/flash_recovery_area' db_recovery_file_dest_size=200G
4) Gdy miejsce w db_recovery_file_dest będzie dostępne, sprawdź system, zmieniając plik dziennika przełączania systemu
alter system switch logfile; system alerted
Spróbuj także połączyć się z użytkownikiem innym niż sysdba, aby upewnić się, że problem został rozwiązany
sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 - Production on Copyright (c) 1982, 2008, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> conn apps/apps connected SQL>
Zaleca się regularne tworzenie kopii zapasowych dziennika archiwum i ich usuwanie. Powinniśmy umieścić skrypt monitorujący, aby kontrolować przestrzeń obszaru odzyskiwania pamięci flash.
Powiązane artykułyORA-00936 brak wyrażenia
ORA-01017:nieprawidłowa nazwa użytkownika/hasło; Odmowa logowania
ORA-29913 z tabelami zewnętrznymi
Nieprawidłowy identyfikator ora-00904
Naruszono ograniczenie unikatowe ORA-00001
ORA-01111 w MRP
Jak znaleźć historię dzienników archiwum
RMAN-06059:nie znaleziono oczekiwanego zarchiwizowanego dziennika, utrata zarchiwizowanego dziennika uniemożliwia odzyskiwanie