ORA-00257: archiver error. Connect internal only, until freed.

ORA-00257 这算是一种常规的数据库故障。

00257, 00000, "archiver error. Connect internal only, until freed."

// *Cause:  The archiver process received an error while trying to archive

//       a redo log.  If the problem is not resolved soon, the database

//       will stop executing transactions. The most likely cause of this

//       message is the destination device is out of space to store the

//       redo log file.

// *Action:  Check archiver trace file for a detailed description

//        of the problem. Also verify that the

//       device specified in the initialization parameter

//       ARCHIVE_LOG_DEST is set up properly for archiving.

这里面提到原因是存储redo log file 的空间不足导致的。解决这个问题的首先要确认归档的空间是否足够。

SQL> set line 300
SQL> show parameter log_archive_dest;
NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
log_archive_dest                     string
log_archive_dest_1                 string
log_archive_dest_10               string

一般参数中日志归档路径的值为空值,表示oracle使用默认路径存储归档日志,通过查看归档记录可以看到归档的路径为USE_DB_RECOVERY_FILE_DEST,那么这个USE_DB_RECOVERY_FILE_DEST具体在哪呢?

SQL> archive log list;

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            USE_DB_RECOVERY_FILE_DEST

Oldest online log sequence     370

Next log sequence to archive   372

Current log sequence           372

通过以下参数,可以看到该路径的位置和总大小:

SQL> show parameter db_recovery_file_dest
NAME                                 TYPE                              VALUE
------------------------------------ --------------------------------- ------------------------------
db_recovery_file_dest                string                            /DBBK/oracle/flash_recovery_ar
                                                                       ea
db_recovery_file_dest_size           big integer                       3882M

通过视图获取flash recovery area的使用情况

SQL> select * from v$flash_recovery_area_usage;
FILE_TYPE                                                    PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
------------------------------------------------------------ ------------------ ------------------------- ---------------
CONTROL FILE                                                                  0                         0               0
REDO LOG                                                                      0                         0               0
ARCHIVED LOG                                                               70.9                         0             155
BACKUP PIECE                                                                .49                       .49               2
IMAGE COPY                                                                    0                         0               0
FLASHBACK LOG                                                                 0                         0               0
FOREIGN ARCHIVED LOG                                                          0                         0               0

通过计算我们知道当前归档日志所占用的总大小

SELECT (PRECENT_SPACE_USED) * 3882 / 100

  FROM V$FLASH_RECOVERY_AREA_USAGE

 WHERE FILE_TYPE = 'ARCHIVED LOG';

删除归档这里有两种方式,手动删除时最简单粗暴的。

cd /DBBK/oracle/flash_recovery_area/ORCL/ORCL
rm -rf 目录时间较早的归档,这步执行完成后,还需要RMAN工具重新检查一下,防止后续备份时读取归档时产生错误信息
rman target /
RMAN> crosscheck archivelog all;

还有就是通过RMAN工具删除归档,一下提供三命令删除方式,自行区分

RMAN> delete archivelog all completed before 'sysdate-7';
RMAN> delete expired archivelog all;

如果是DG的话可以通过配置来设置归档的保留策略,即当备库应用日志后,删除主库的归档。

RMAN> CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON STANDBY;

你可能感兴趣的:(ORA-00257)