ORA-00257 är ett av de vanligaste felen i Oracles DBA-liv. Han/hon måste ofta ta itu med det. Oracle Database blev nästan fryst på grund av det och alla transaktioner stoppas. Låt oss se hur man hanterar felet ORA-00257
Felmeddelande
ORA-00257:arkiveringsfel. Anslut endast internt tills det frigörs.
Enligt The oerr ORA-00257 error mean
ORA-00257:arkiveringsfel. Anslut endast internt tills det frigörs. Orsak:Arkiveringsprocessen fick ett fel vid försök att arkivera en redo-logg. Om problemet inte löses snart kommer databasen att sluta utföra transaktioner. Den mest troliga orsaken till detta meddelande är att destinationsenheten har ont om utrymme för att lagra loggfilen för ombokning.
Åtgärd:Kontrollera arkiveringsspårningsfilen för en detaljerad beskrivning av problemet. Kontrollera också att enheten som anges i initialiseringsparametern archive_log_dest är korrekt inställd för arkivering.
Var ser du det här felmeddelandet
1) Du kommer att se nedan typ av felmeddelande som hör till varningsloggen
Följande är några om informationen från varningsloggen:
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) Om du försöker logga in med en icke sysdba-användare får du felmeddelandet nedan
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) Om du försöker logga in med sysdba-användare och kontrollera väntande händelse för sessionen hittar du växlingshändelse för arkivväxling för session väntar
Varför ORA-00257-felet uppstår
Det här felet inträffar eftersom målplatsen för arkivloggen antingen är full eller inte tillgänglig. Oracle ARCH-bakgrundsprocessen är ansvarig för att ta redo-loggarna från online-redo-loggfilsystemet och skriva dem till den platta filen kan inte skriva till filsystemet
Så löser du ORA-00257-fel
1) Först och främst bör vi hitta arkivloggdestinationen för databasen
sqlplus / as sysdba SQL> archive log list;
du kan också hitta arkivdestinationer antingen av USE_DB_RECOVERY_FILE_DEST
SQL> show parameter db_recovery_file_dest;
Få även storleken på db_recovery_file_dest
show parameter db_recovery_file_dest_size;
2) Nästa steg i att lösa ORA-00257 är att ta reda på vilket värde som används för db_recovery_file_dest_size, använd:
SQL> SELECT * FROM V$RECOVERY_FILE_DEST;
Du kanske upptäcker att SPACE_USED är samma som SPACE_LIMIT, om så är fallet, för att lösa ORA-00257 bör åtgärdas genom att flytta arkivloggarna till någon annan 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 ha många lösningar i dessa situationer
a) Öka storleken på db_recovery_file_dest om du har tillgängligt utrymme i Oracle ASM eller filsystem vad du än använder
alter system set db_recovery_file_dest_size=40g;
b) Vi kan ta bort arkivloggen som redan har säkerhetskopierats
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) Om du inte har tagit säkerhetskopian bör du ta säkerhetskopian och sedan ta bort arkivloggfilerna
rman target /run { allocate channel d1 type disk; backup archivelog all delete input format '/u11/ora/arch_%d_%u_%s'; release channel d1; }
d) Ibland kan gamla backup-bitar, flashback-loggar uppta utrymme i db_recovery_file_dest, du kontrollerar innehållet i 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
Ibland kan en gammal garanterad återställningspunkt finnas, släppning frigör utrymmet.
Flashback Database förklaras och begränsning
hur man Flashback när vi har dataguard
Topp 10 användbara frågor för Flashback Database
e) Om vi inte behöver arkivlogg, så kommer bara borttagning också tjäna syftet
rman target / DELETE NOPROMPT ARCHIVELOG ALL;
Annat användbart kommando i det här fallet
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';
Viktig anmärkning
Ta inte bort arkivloggfilen manuellt från filsystemet, den kommer inte att uppdatera kontrollfilen och det kommer inte att lösa problemet. Sedan måste du krysskolla allt i rman och ta bort föråldrade och utgångna
f) Vi kan ange alternativ sökväg för arkivering
Arkivering utförs automatiskt till den alternativa destinationen2
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 utrymme är tillgängligt i db_recovery_file_dest, kontrollera systemet genom att ändra systemväxlingsloggfilen
alter system switch logfile; system alerted
Försök också att ansluta till en icke-sysdba-användare för att se till att problemet är 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 är tillrådligt att ta regelbunden säkerhetskopia av arkivloggen och ta bort dem. Vi bör lägga till ett övervakningsskript för att hålla koll på utrymmet för flashåterställningsområdet.
Relaterade artiklarORA-00936 saknas uttryck
ORA-01017:ogiltigt användarnamn/lösenord; inloggning nekad
ORA-29913 med externa tabeller
ora-00904 ogiltig identifierare
ORA-00001 unik begränsning överträtt
ORA-01111 i MRP
Hur man hittar arkivlogghistorik
RMAN-06059:förväntad arkiverad logg hittades inte, förlorad arkiverad logg äventyrar återställningsmöjligheten