ORA-00257 er en af de mest almindelige fejl i Oracle DBA-livet. Han/hun skal ofte håndtere det. Oracle-databasen blev næsten frosset på grund af det, og alle transaktioner stoppes. Lad os se, hvordan vi håndterer ORA-00257-fejl
Fejlmeddelelse
ORA-00257:arkiveringsfejl. Tilslut kun internt, indtil frigivet.
Ifølge oerr ORA-00257 betyder fejl
ORA-00257:arkiveringsfejl. Tilslut kun internt, indtil det frigøres. Årsag:Arkiveringsprocessen modtog en fejl under forsøg på at arkivere en gentag-log. Hvis problemet ikke er løst snart, vil databasen stoppe med at udføre transaktioner. Den mest sandsynlige årsag til denne meddelelse er, at destinationsenheden mangler plads til at gemme logfilen igen.
Handling:Tjek arkiveringssporingsfilen for en detaljeret beskrivelse af problemet. Kontroller også, at den enhed, der er angivet i initialiseringsparameteren archive_log_dest, er konfigureret korrekt til arkivering.
Hvor kan du se denne fejlmeddelelse
1) Du vil se nedenfor type fejlmeddelelse, der vedrører i advarselsloggen
Følgende er nogle af oplysningerne fra advarselsloggen:
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) Hvis du prøver at logge ind med en ikke-sysdba-bruger, får du nedenstående fejlmeddelelse
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) Hvis du forsøger at logge ind med sysdba-bruger og kontrollere ventehændelsen for sessionen, vil du finde logarkivskiftehændelsen for ventende session
Hvorfor ORA-00257-fejlen opstår
Denne fejl opstår, da målplaceringen for arkivloggen enten er fuld eller ikke tilgængelig. Oracle ARCH-baggrundsprocessen er ansvarlig for at tage redo-logfilerne fra online-redo-logfilsystemet og skrive dem til den flade fil er ikke i stand til at skrive til filsystemet
Sådan løser du ORA-00257-fejl
1) Først og fremmest bør vi finde arkivlogdestinationen for databasen
sqlplus / as sysdba SQL> archive log list;
du kan også finde arkivdestinationer efter enten USE_DB_RECOVERY_FILE_DEST
SQL> show parameter db_recovery_file_dest;
Få også størrelsen på db_recovery_file_dest
show parameter db_recovery_file_dest_size;
2) Det næste trin i at løse ORA-00257 er at finde ud af, hvilken værdi der bruges til db_recovery_file_dest_size, brug:
SQL> SELECT * FROM V$RECOVERY_FILE_DEST;
Du vil muligvis opdage, at SPACE_USED er det samme som SPACE_LIMIT, hvis dette er tilfældet, bør ORA-00257 afhjælpes ved at flytte arkivloggene til en anden destination.
SQL> SELECT * FROM V$RECOVERY_FILE_DEST; NAME SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES +FLASH 21474836480 21474836480 212428800 200
3) Vi kan have mange løsninger i disse situationer
a) Forøg størrelsen af db_recovery_file_dest, hvis du har ledig plads i Oracle ASM eller filsystem, uanset hvad du bruger
alter system set db_recovery_file_dest_size=40g;
b) Vi kan slette arkivloggen, som allerede er blevet sikkerhedskopieret
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) Hvis du ikke har taget backup, så anbefales det at tage backup og derefter slette arkivets logfiler
rman target /run { allocate channel d1 type disk; backup archivelog all delete input format '/u11/ora/arch_%d_%u_%s'; release channel d1; }
d) Nogle gange kan gamle backup-stykker, flashback-logfiler optage plads i db_recovery_file_dest, du tjekker indholdet af 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
Nogle gange kan et gammelt garanteret gendannelsespunkt være til stede. Dropping vil frigive pladsen.
Flashback-database forklaret og begrænsning
hvordan Flashback, når vi har dataguard
Top 10 nyttige forespørgsler til Flashback-database
e) Hvis vi ikke har brug for arkivlog, vil blot sletning også tjene formålet
rman target / DELETE NOPROMPT ARCHIVELOG ALL;
Anden nyttig kommando i dette tilfælde
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';
Vigtig bemærkning
Slet venligst ikke arkivlogfilen manuelt fra filsystemet, den vil ikke opdatere kontrolfilen, og den vil ikke løse problemet. Så skal du krydstjekke alt i rman og slette forældet og udløbet
f) Vi kan angive alternativ sti til arkivering
Arkivering udføres automatisk til den alternative destination2
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) Når der er ledig plads i db_recovery_file_dest, tjek venligst systemet ved at ændre logfilen for systemskift
alter system switch logfile; system alerted
Prøv også at oprette forbindelse til en ikke-sysdba-bruger for at sikre, at problemet er løst
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>
Det er tilrådeligt at tage regelmæssig backup af arkivlog og slette dem. Vi bør sætte et overvågningsscript for at holde øje med flashgendannelsesområdet.
Relaterede artiklerORA-00936 mangler udtryk
ORA-01017:ugyldigt brugernavn/adgangskode; logon nægtet
ORA-29913 med eksterne tabeller
ora-00904 ugyldig identifikator
ORA-00001 unik begrænsning overtrådt
ORA-01111 i MRP
Sådan finder du arkivloghistorik
RMAN-06059:forventet arkiveret log blev ikke fundet, tabt arkiveret log kompromitterer genoprettelsen