【转】ORA-00257:archiver error. 错误的处理方法

时间:2022-08-17 20:09:42

出现这个问题的原因一般是日志满了。这里以用户tt为例:

一、用sys用户登录

sqlplus sys/pass@tt as sysdba

二、看看archiv log所在位置

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

三、一般VALUE为空时,可以用archive log list;检查一下归档目录和log sequence

SQL> archive log list;
     Database log mode                 Archive Mode
     Automatic archival                   Enabled
     Archive destination                  USE_DB_RECOVERY_FILE_DEST
    Oldest online log sequence     360
    Next log sequence to archive  360
    Current log sequence              362

四、检查flash recovery area的使用情况,可以看见archivelog已经很大了,达到96.62

SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;
    FILE_TYPE              PERCENT_SPACE_USED   PERCENT_SPACE_RECLAIMABLE   NUMBER_OF_FILES
    ------------                   ------------------                        -------------------------                                ---------------
    CONTROLFILE        .13                                         0                                                           1
    ONLINELOG            2.93                                       0                                                            3
    ARCHIVELOG         96.62                                     0                                                            141
    BACKUPPIECE       0                                            0                                                             0
    IMAGECOPY           0                                            0                                                             0
    FLASHBACKLOG    0                                            0                                                             0

五、计算flash recovery area已经占用的空间

SQL> select sum(percent_space_used)*3/100 from v$flash_recovery_area_usage;
    SUM(PERCENT_SPACE_USED)*3/100
    -----------------------------
    2.9904

六、找到recovery目录, show parameter recover

SQL> show parameter recover;
    NAME                                         TYPE          VALUE
    ------------------------------------        -----------     ------------------------------
    db_recovery_file_dest                string           /u01/app/oracle/flash_recovery_area
    db_recovery_file_dest_size        big integer   5G
    recovery_parallelism                   integer         0

上述结果告诉我们,归档位置用的是默认值,放在flash_recovery_area下(db_recovery_file_dest目录=/u01/app/oracle/flash_recovery_area)
    [root@sha3 10.2.0]# echo $ORACLE_BASE
    /u01/app/oracle
    [root@sha3 10.2.0]# cd $ORACLE_BASE/flash_recovery_area/tt/archivelog
    转移或清除对应的归档日志, 删除一些不用的日期目录的文件,注意保留最后几个文件(比如360以后的)
    ---------------------------------------------------------------------------------------
    注意:
    在删除归档日志后,必须用RMAN维护控制文件,否则空间显示仍然不释放。
    ---------------------------------------------------------------------------------------

七、rman target sys/pass

[root@sha3 oracle]# rman target sys/pass
    Recovery Manager: Release 10.2.0.4.0 - Production on Tue Jan 20 01:41:26 2009
    Copyright (c) 1982, 2007, Oracle.  All rights reserved.
    connected to target database: tt (DBID=4147983671)

八、检查一些无用的archivelog

RMAN> crosscheck archivelog all;

九、删除过期的归档

RMAN> delete expired archivelog all;
    delete archivelog until time 'sysdate-1' ; 删除截止到前一天的所有archivelog

十、再次查询,发现使用率正常,已经降到23.03

SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;
    FILE_TYPE               PERCENT_SPACE_USED       PERCENT_SPACE_RECLAIMABLE      NUMBER_OF_FILES
    ------------                   ------------------                             -------------------------                                   ---------------
    CONTROLFILE        .13                                             0                                                               1
    ONLINELOG             2.93                                           0                                                               3
    ARCHIVELOG          23.03                                         0                                                                36
    BACKUPPIECE        0                                                0                                                                0
    IMAGECOPY            0                                                0                                                                0
    FLASHBACKLOG     0                                                0                                                                0

十一、其它有用的Command

    1.如果archive log模式下不能正常startup,则先恢复成noarchive log,startup成功后,再shutdown;
      shutdown immediate;
      startup mount;
      alter database noarchivelog;
      alter database open;
      shutdown immediate;

     2.再次startup以archive log模式
      shutdown immediate;
      startup mount;
      show parameter log_archive_dest;
      alter database archivelog;
      archive log list;               
      alter database open;

      3.如果还不行,则删除一些archlog log
      SQL> select group#,sequence# from v$log;
     GROUP# SEQUENCE#
     ----------    ----------
     1              62
     3              64
     2              63
     原来是日志组一的一个日志不能归档
     SQL> alter database clear unarchived logfile group 1;
     alter database open;

4.最后,也可以指定位置Arch Log, 请按照如下配置

select name from v$datafile;
     alter system set log_archive_dest='/opt/app/oracle/oradata/usagedb/arch' scope=spfile
     或者修改大小
     SQL> alter system set db_recovery_file_dest_size=3G scope=both;

参考文档

转载文档: http://www.2cto.com/database/201109/104615.html