ORA-00257 е една от най-честите грешки в живота на Oracle DBA. Той/тя често трябва да се справя с това. Базата данни на Oracle почти беше замразена поради това и всички транзакции се спират. Нека видим как да се справим с грешката ORA-00257
Съобщение за грешка
ORA-00257:грешка в архиватора. Свързвайте се само вътрешно, докато не се освободите.
Съгласно The oerr ORA-00257 грешка означава
ORA-00257:грешка в архиватора. Свързване само вътрешно, докато не бъде освободено. Причина:Процесът на архивиране получи грешка при опит за архивиране на дневник за повторно изпълнение. Ако проблемът не бъде разрешен скоро, базата данни ще спре да изпълнява транзакции. Най-вероятната причина за това съобщение е крайното устройство да няма място за съхранение на регистрационния файл за повторно изпълнение.
Действие:Проверете файла за проследяване на архиватора за подробно описание на проблема. Също така проверете дали устройството, посочено в параметъра за инициализация archive_log_dest, е настроено правилно за архивиране.
Къде виждате това съобщение за грешка
1) Ще видите по-долу тип съобщение за грешка, отнасящо се до дневника за предупреждения
Следват някои ако информацията от дневника за предупреждения:
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) Ако се опитате да влезете с потребител, който не е sysdba, ще видите съобщението за грешка по-долу
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) Ако се опитате да влезете с потребител на sysdba и проверите събитието за изчакване за сесията, ще намерите събитие за превключване на архива на изчакване на сесия
Защо възниква грешка ORA-00257
Тази грешка възниква, тъй като целевото местоположение за архивния дневник е пълно или не е налично. Фоновият процес на Oracle ARCH е отговорен за вземането на регистрационните файлове за повторно изпълнение от онлайн файловата система на регистрационните файлове за повторно изпълнение и записването им в плоския файл не може да записва във файловата система
Как да разрешите ORA-00257 грешки
1) Първо трябва да намерим дестинацията на архивния дневник за базата данни
sqlplus / as sysdba SQL> archive log list;
можете също да намерите архивни дестинации от USE_DB_RECOVERY_FILE_DEST
SQL> show parameter db_recovery_file_dest;
Също така вземете размера на db_recovery_file_dest
show parameter db_recovery_file_dest_size;
2) Следващата стъпка в разрешаването на ORA-00257 е да разберете каква стойност се използва за db_recovery_file_dest_size, използвайте:
SQL> SELECT * FROM V$RECOVERY_FILE_DEST;
Може да откриете, че SPACE_USED е същото като SPACE_LIMIT, ако случаят е такъв, за разрешаване на ORA-00257 трябва да се поправи чрез преместване на архивните регистрационни файлове на друга дестинация.
SQL> SELECT * FROM V$RECOVERY_FILE_DEST; NAME SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES +FLASH 21474836480 21474836480 212428800 200
3) Можем да имаме много решения в тази ситуация
a) Увеличете размера на db_recovery_file_dest, ако имате налично място в Oracle ASM или файлова система, каквото и да използвате
alter system set db_recovery_file_dest_size=40g;
b) Можем да изтрием архивния дневник, който вече е архивиран
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;
в) Ако не сте направили архива, тогава е препоръчително да направите резервно копие и след това да изтриете архивните регистрационни файлове
rman target /run { allocate channel d1 type disk; backup archivelog all delete input format '/u11/ora/arch_%d_%u_%s'; release channel d1; }
г) Понякога старата резервна част, регистрационните файлове за флашбек може да заемат място в db_recovery_file_dest, вие проверявате съдържанието на 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
Понякога може да има стара гарантирана точка за възстановяване. Отпадането ще освободи пространството.
Обяснение на базата данни за Flashback и ограничения
как да Flashback, когато имаме защита на данните
Топ 10 полезни заявки за Flashback база данни
д) Ако не се нуждаем от архивен дневник, тогава простото изтриване също ще служи на целта
rman target / DELETE NOPROMPT ARCHIVELOG ALL;
Друга полезна команда в този случай
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';
Важна забележка
Моля, не изтривайте архивния регистрационен файл ръчно от файловата система, той няма да актуализира контролния файл и няма да изчисти проблема. След това трябва да извършите кръстосана проверка на всичко в rman и да изтриете остарелите и изтекли
е) Можем да посочим алтернативен път за архивиране
Архивирането се извършва автоматично до алтернативния цел2
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) След като пространството е налично в db_recovery_file_dest, моля, проверете системата, като направите промяна на регистрационния файл за превключване на системата
alter system switch logfile; system alerted
Също така опитайте да се свържете с потребител, който не е sysdba, за да сте сигурни, че проблемът е разрешен
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>
Препоръчително е да правите редовно архивиране на архивния дневник и да ги изтривате. Трябва да поставим скрипт за наблюдение, за да проверяваме пространството на флаш зоната за възстановяване.
Сродни статииORA-00936 липсващ израз
ORA-01017:невалидно потребителско име/парола; Отказано влизане
ORA-29913 с външни таблици
ora-00904 невалиден идентификатор
Уникалното ограничение ORA-00001 е нарушено
ORA-01111 в MRP
Как да намерите хронологията на архивния журнал
RMAN-06059:очакван архивиран дневник не е намерен, загубата на архивиран дневник компрометира възможността за възстановяване