zoukankan      html  css  js  c++  java
  • 一则奇怪的案例处理:ORA-00257: archiver error. Connect internal only, until freed

    前天,业务反应数据库不能连接

    在操作系统通过字符串尝试登陆数据库报:ORA-00257: archiver error. Connect internal only, until freed

    解决思路:

    1.操作系统清理归档

    2.rman清理expired归档

    遇到日志不能切换,且归档目录未满的情况,且数据库不能正常关闭的解决思路:

    1.查看log group 状态,如果处于inactive状态但是报需要归档的错误

    2.强制clear未归档的日志

    3.删除clear的日志组,并重建

    4.如果还不能switch logfile,重启数据库

    详细步骤如下:

    查看alert日志:

    ***********************************************************************
    
    Fatal NI connect error 12170.
    
      VERSION INFORMATION:
            TNS for HPUX: Version 11.2.0.3.0 - Production
            Oracle Bequeath NT Protocol Adapter for HPUX: Version 11.2.0.3.0 - Production
            TCP/IP NT Protocol Adapter for HPUX: Version 11.2.0.3.0 - Production
      Time: 17-MAR-2015 17:28:08
      Tracing not turned on.
      Tns error struct:
        ns main err code: 12535
    
    TNS-12535: TNS:operation timed out
        ns secondary err code: 12606
        nt main err code: 0
        nt secondary err code: 0
        nt OS err code: 0
      Client address: (ADDRESS=(PROTOCOL=tcp)(HOST=132.33.128.28)(PORT=4035))
    WARNING: inbound connection timed out (ORA-3136)

     哦,原来是归档满了

    1.数据库查询归档位置:

    SQL> archive log list
    Database log mode              Archive Mode
    Automatic archival             Enabled
    Archive destination            USE_DB_RECOVERY_FILE_DEST
    Oldest online log sequence     5
    Next log sequence to archive   5
    Current log sequence           7
    SQL> show parameter db_recovery_file_dest
    
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    db_recovery_file_dest                string      /Oracle/apps/oracle/recovery
    db_recovery_file_dest_size           big integer 4977M
    
    SQL> select * from v$recovery_file_dest
    
    NAME                                               SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES
    -------------------------------------------------- ----------- ---------- ----------------- ---------------
    /Oracle/apps/oracle/recovery                        5218762752 4405968896                 0               3

    2.进入操作系统,手动删除所有归档

    3.rman检查并清理归档

    RMAN> crosscheck archivelog all;
    
    using target database control file instead of recovery catalog
    allocated channel: ORA_DISK_1
    channel ORA_DISK_1: SID=235 device type=DISK
    validation failed for archived log
    archived log file name=/Oracle/apps/oracle/recovery/GJJS/archivelog/2015_02_03/o1_mf_1_2_bf1o3ohr_.arc RECID=1 STAMP=870732036
    validation failed for archived log
    archived log file name=/Oracle/apps/oracle/recovery/GJJS/archivelog/2015_02_12/o1_mf_1_3_bfqxh0sz_.arc RECID=2 STAMP=871461477
    validation failed for archived log
    archived log file name=/Oracle/apps/oracle/recovery/GJJS/archivelog/2015_02_19/o1_mf_1_4_bgcv464n_.arc RECID=3 STAMP=872114452
    Crosschecked 3 objects
    
    RMAN> list expired archivelog all;
    
    List of Archived Log Copies for database with db_unique_name GJJS
    =====================================================================
    
    Key     Thrd Seq     S Low Time 
    ------- ---- ------- - ---------
    1       1    2       X 28-JAN-15
            Name: /Oracle/apps/oracle/recovery/GJJS/archivelog/2015_02_03/o1_mf_1_2_bf1o3ohr_.arc
    
    2       1    3       X 03-FEB-15
            Name: /Oracle/apps/oracle/recovery/GJJS/archivelog/2015_02_12/o1_mf_1_3_bfqxh0sz_.arc
    
    3       1    4       X 12-FEB-15
            Name: /Oracle/apps/oracle/recovery/GJJS/archivelog/2015_02_19/o1_mf_1_4_bgcv464n_.arc
    
    
    RMAN> delete expired archivelog all;
    
    released channel: ORA_DISK_1
    allocated channel: ORA_DISK_1
    channel ORA_DISK_1: SID=235 device type=DISK
    List of Archived Log Copies for database with db_unique_name GJJS
    =====================================================================
    
    Key     Thrd Seq     S Low Time 
    ------- ---- ------- - ---------
    1       1    2       X 28-JAN-15
            Name: /Oracle/apps/oracle/recovery/GJJS/archivelog/2015_02_03/o1_mf_1_2_bf1o3ohr_.arc
    
    2       1    3       X 03-FEB-15
            Name: /Oracle/apps/oracle/recovery/GJJS/archivelog/2015_02_12/o1_mf_1_3_bfqxh0sz_.arc
    
    3       1    4       X 12-FEB-15
            Name: /Oracle/apps/oracle/recovery/GJJS/archivelog/2015_02_19/o1_mf_1_4_bgcv464n_.arc
    
    
    Do you really want to delete the above objects (enter YES or NO)? yes
    deleted archived log
    archived log file name=/Oracle/apps/oracle/recovery/GJJS/archivelog/2015_02_03/o1_mf_1_2_bf1o3ohr_.arc RECID=1 STAMP=870732036
    deleted archived log
    archived log file name=/Oracle/apps/oracle/recovery/GJJS/archivelog/2015_02_12/o1_mf_1_3_bfqxh0sz_.arc RECID=2 STAMP=871461477
    deleted archived log
    archived log file name=/Oracle/apps/oracle/recovery/GJJS/archivelog/2015_02_19/o1_mf_1_4_bgcv464n_.arc RECID=3 STAMP=872114452
    Deleted 3 EXPIRED objects

     4.改变归档目录,是归档不放入闪回目录中

    alter system set log_archive_dest_1='location=/Oracle/apps/oracle/arch';

     OK

    到这里,归档空间已经清理完成,但是在操作系统上再次测试的时候依然报ORA-00257: archiver error. Connect internal only, until freed,很奇怪~~

    尝试数据库中切换日志

    SQL> select group#,sequence#,status from v$log;
    
        GROUP#  SEQUENCE# STATUS
    ---------- ---------- ----------------
             1          7 INACTIVE
             2          8 CURRENT
             3          6 INACTIVE
    SQL>alter system switch logfile;   
    
    
    ----夯住不动,alert日志中也未出现任何错误

    希望通过重启数据库解决:

    但是执行shutdown immediate后,数据库无反应,看alert日志

    License high water mark = 45
    Stopping Job queue slave processes, flags = 7
    Tue Mar 17 16:42:09 2015
    Errors in file /Oracle/apps/oracle/diag/rdbms/gjjs/gjjs/trace/gjjs_j002_28185.trc:
    ORA-12012: error on auto execute of job "EXFSYS"."RLM$EVTCLEANUP"
    ORA-01089: immediate shutdown in progress - no operations are permitted
    ORA-01089: immediate shutdown in progress - no operations are permitted
    Process ID:
    Session ID: 0 Serial number: 0
    Tue Mar 17 16:42:09 2015
    Errors in file /Oracle/apps/oracle/diag/rdbms/gjjs/gjjs/trace/gjjs_j001_17723.trc:
    ORA-12012: error on auto execute of job "EXFSYS"."RLM$SCHDNEGACTION"
    ORA-01089: immediate shutdown in progress - no operations are permitted
    ORA-01089: immediate shutdown in progress - no operations are permitted
    Process ID:
    Session ID: 0 Serial number: 0
    Job queue slave processes stopped

     CTRL+C结束,奇怪~~~

    可能是日志文件出现错误,下面进行清理,并重建日志文件

    SQL> alter database drop logfile group 3;
    alter database drop logfile group 3
    *
    ERROR at line 1:
    ORA-00350: log 3 of instance gjjs (thread 1) needs to be archived
    ORA-00312: online log 3 thread 1: '/dev/vg03/rlv_vg03_2g_redo003'
    
    
    SQL> alter database clear logfile group 3;
    alter database clear logfile group 3
    *
    ERROR at line 1:
    ORA-00350: log 3 of instance gjjs (thread 1) needs to be archived
    ORA-00312: online log 3 thread 1: '/dev/vg03/rlv_vg03_2g_redo003'
    
    
    SQL> alter database clear unarchived logfile group 3;
    
    Database altered.
    
    SQL> select group#,sequence#,status from v$log;
    
        GROUP#  SEQUENCE# STATUS
    ---------- ---------- ----------------
             1          7 INACTIVE
             2          8 CURRENT
             3          0 UNUSED
    
    SQL> select member from v$logfile;
    
    MEMBER
    --------------------------------------------------------------------------------
    /dev/vg03/rlv_vg03_2g_redo001
    /dev/vg03/rlv_vg03_2g_redo002
    /dev/vg03/rlv_vg03_2g_redo003
    
    SQL> select group#,sequence#,status from v$log;
    
        GROUP#  SEQUENCE# STATUS
    ---------- ---------- ----------------
             1          7 INACTIVE
             2          8 CURRENT
             3          0 UNUSED
    
    SQL> alter database drop logfile group 3;
    
    Database altered.
    
    SQL> select group#,sequence#,status from v$log;
    
        GROUP#  SEQUENCE# STATUS
    ---------- ---------- ----------------
             1          7 INACTIVE
             2          8 CURRENT
    SQL> alter database add logfile group 3 '/dev/vg03/rlv_vg03_2g_redo03.log' size 2046M reuse;
    
    Database altered.

     查看,再次切换

    SQL> select member from v$logfile;
    
    MEMBER
    --------------------------------------------------------------------------------
    /dev/vg03/rlv_vg03_2g_redo001
    /dev/vg03/rlv_vg03_2g_redo002
    /dev/vg03/rlv_vg03_2g_redo03.log
    
    SQL> select group#,sequence#,status from v$log;
    
        GROUP#  SEQUENCE# STATUS
    ---------- ---------- ----------------
             1          7 INACTIVE
             2          8 CURRENT
             3          0 UNUSED
    
    SQL> alter system switch logfile;
    
    System altered.
    
    SQL> select group#,sequence#,status from v$log;
    
        GROUP#  SEQUENCE# STATUS
    ---------- ---------- ----------------
             1          7 INACTIVE
             2          8 ACTIVE
             3          9 CURRENT
    SQL> select group#,sequence#,status from v$log;
    
        GROUP#  SEQUENCE# STATUS
    ---------- ---------- ----------------
             1          7 INACTIVE
             2          8 ACTIVE
             3          9 CURRENT
    
    -----group 2一直处于active状态,做一个checkpoint,使日志无效
    
    SQL> alter system checkpoint;
    
    System altered.
    
    SQL> select group#,sequence#,status from v$log;
    
        GROUP#  SEQUENCE# STATUS
    ---------- ---------- ----------------
             1          7 INACTIVE
             2          8 INACTIVE
             3          9 CURRENT
    
    ----切换的时候依然不能切换,重建所有的日志组
    
    SQL> alter database clear logfile group 1;
    alter database clear logfile group 1
    *
    ERROR at line 1:
    ORA-00350: log 1 of instance gjjs (thread 1) needs to be archived
    ORA-00312: online log 1 thread 1: '/dev/vg03/rlv_vg03_2g_redo001'
    
    
    SQL> alter database clear unarchived logfile group 1;
    
    Database altered.
    
    SQL> alter database drop logfile group 1;
    
    Database altered.
    
    SQL> alter database add logfile group 1 '/dev/vg03/rlv_vg03_2g_redo01.log' size 2046M reuse;
    
    Database altered.
    
    SQL> select group#,sequence#,status from v$log;
    
        GROUP#  SEQUENCE# STATUS
    ---------- ---------- ----------------
             1          0 UNUSED
             2          8 INACTIVE
             3          9 CURRENT
    
    SQL> alter database clear unarchived logfile group 2;
    
    Database altered.
    
    SQL>  alter database drop logfile group 2;
    
    Database altered.
    
    SQL> alter database add logfile group 2 '/dev/vg03/rlv_vg03_2g_redo02.log' size 2046M reuse;
    
    Database altered.
    
    SQL> select group#,sequence#,status from v$log;
    
        GROUP#  SEQUENCE# STATUS
    ---------- ---------- ----------------
             1          0 UNUSED
             2          0 UNUSED
             3          9 CURRENT
    
    SQL> alter system switch logfile;
    
    System altered.
    
    SQL> /
    
    System altered.
    SQL> select group#,sequence#,status from v$log;
    
        GROUP#  SEQUENCE# STATUS
    ---------- ---------- ----------------
             1         10 INACTIVE
             2         11 CURRENT
             3          9 INACTIVE
    SQL> alter database clear unarchived logfile group 3;
    
    Database altered.
    
    SQL> c/3/1
      1* alter database clear unarchived logfile group 1
    SQL> /
    
    Database altered.
    
    SQL> select group#,sequence#,status from v$log;
    
        GROUP#  SEQUENCE# STATUS
    ---------- ---------- ----------------
             1          0 UNUSED
             2         11 CURRENT
             3          0 UNUSED
    
    ----重建日志组后依然不行,重启数据库看看
    
    SQL> shutdown immediate
    Database closed.
    Database dismounted.
    ORACLE instance shut down.
    SQL> 
    -----数据库可以正常关闭
    SQL> 
    SQL> startup
    ORACLE instance started.
    
    Total System Global Area 2.1913E+11 bytes
    Fixed Size                  2195616 bytes
    Variable Size            1.0415E+11 bytes
    Database Buffers         1.1489E+11 bytes
    Redo Buffers               88866816 bytes
    Database mounted.
    Database opened.
    SQL> 
    SQL> 
    ----查看状态并切换日志,数据库正常~
    SQL> select group#,sequence#,status from v$log;
    
        GROUP#  SEQUENCE# STATUS
    ---------- ---------- ----------------
             1          0 UNUSED
             2         11 CURRENT
             3          0 UNUSED
    
    SQL> alter system switch logfile;
    
    System altered.
    
    SQL> /
    
    System altered.
    
    SQL> /
    
    System altered.
    
    SQL> /
    
    System altered.
    
    SQL> /
    
    System altered.

     难道是修改log_arch_dest_1参数需要重启数据库???说不通!!!

  • 相关阅读:
    C#并行编程-并发集合
    使用Lucene.Net实现全文检索
    Lucene.Net 站内搜索
    lucene.net helper类 【结合盘古分词进行搜索的小例子(分页功能)】
    Spring学习之Ioc
    Hibernate向MySQL插入中文数据--乱码解决
    MySql表中key的区别
    Myeclipse中相同变量高亮显示
    Mac下配置PHP+Apache+phpMyAdmin+MySql远程链接
    JQuery实现——黑客帝国代码雨效果
  • 原文地址:https://www.cnblogs.com/haoxiaoyu/p/4346851.html
Copyright © 2011-2022 走看看