sql >> Database teknologi >  >> RDS >> Oracle

ORA-00257:arkiveringsfejl. Tilslut kun internt, indtil det frigøres.

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 artikler
ORA-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

  1. Tilslutning af SQL Server til Oracle

  2. Finjustering af Oracle DG40DBC

  3. Sådan bruges "Like" i SQL

  4. Sådan konverteres epoke til mySQL tidsstempel i JAVA