zoukankan      html  css  js  c++  java
  • ORA-00257错误的解决办法

    author: headsen  chen

    date: 2018-04-17  11:12:39

    notice:个人原创,转载请注明作者和出处,否则依法追击法律责任。

    1,oracle数据库正常使用中,突然报ora-00257的错误,原因是归档日志满了,达到了oracle设置的满值的状态了,所以会无法连接了。

    2,system登录数据库查看使用率和归档文件目录

    SQL> show parameter log_archive_dest;

    NAME TYPE VALUE
    ------------------------------------ ----------- ------------------------------
    log_archive_dest    string
    log_archive_dest_1    string
    log_archive_dest_10    string
    log_archive_dest_2    string
    log_archive_dest_3    string
    log_archive_dest_4    string
    log_archive_dest_5    string
    log_archive_dest_6    string
    log_archive_dest_7    string
    log_archive_dest_8    string
    log_archive_dest_9    string
    
    NAME                            TYPE     VALUE
    ------------------------------------ ----------- ------------------------------
    log_archive_dest_state_1    string    enable
    log_archive_dest_state_10    string    enable
    log_archive_dest_state_2    string    enable
    log_archive_dest_state_3    string    enable
    log_archive_dest_state_4    string    enable
    log_archive_dest_state_5    string    enable
    log_archive_dest_state_6    string    enable
    log_archive_dest_state_7    string    enable
    log_archive_dest_state_8    string    enable
    log_archive_dest_state_9    string    enable
    SQL>

    3, archive log list;检查一下归档目录和log sequence ,此时在序号512之前的都可以删除。
    SQL> archive log list;

    Database log mode	       Archive Mode
    Automatic archival	       Enabled
    Archive destination	       USE_DB_RECOVERY_FILE_DEST
    Oldest online log sequence     512
    Next log sequence to archive   514
    Current log sequence	       514
    

      

    4,检查flash recovery area的使用情况,查看archivelog使用率:99% (这里因为已经清理过了,没来得及截图,第一次清理时有99%)

    SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;

    FILE_TYPE    PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
    ------------ ------------------ ------------------------- ---------------
    CONTROLFILE            0             0        0
    ONLINELOG              0             0        0
    ARCHIVELOG          43.73            0        215
    BACKUPPIECE            0             0        0
    IMAGECOPY              0             0        0
    FLASHBACKLOG          .3           .22        4
    
    6 rows selected.

    上图中,说明归档日志满了,达到43.73%,需要清除过期的归档日志。

    5,计算flash recovery area已经占用的空间 (已经清理过。没清理之前是2.99)

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

    SUM(PERCENT_SPACE_USED)*3/100
    -----------------------------
    		       1.3209
    

      

    6,找到recovery的目录

    SQL> show parameter recover;

    NAME				     TYPE	 VALUE
    ------------------------------------ ----------- ------------------------------
    db_recovery_file_dest		     string	 /oracle/flash_recovery_area
    db_recovery_file_dest_size	     big integer 20G
    recovery_parallelism		     integer	 0
    SQL> 
    

    7,删除过期的归档文件

    归档位置用的是默认值,放在flash_recovery_area下(db_recovery_file_dest目录=/oracle/flash_recovery_area)

    [oracle@pen EC]$ echo $ORACLE_BASE
    /oracle
    [oracle@pen EC]$ cd /oracle/flash_recovery_area/EC/archivelog/

    [oracle@pen archivelog]$ ls

    [oracle@pen archivelog]$ ls
    2018_01_01  2018_01_11  2018_01_21  2018_01_31  2018_02_10  2018_02_20  2018_03_02  2018_03_12  2018_03_22  2018_04_01  2018_04_11
    2018_01_02  2018_01_12  2018_01_22  2018_02_01  2018_02_11  2018_02_21  2018_03_03  2018_03_13  2018_03_23  2018_04_02  2018_04_12
    2018_01_03  2018_01_13  2018_01_23  2018_02_02  2018_02_12  2018_02_22  2018_03_04  2018_03_14  2018_03_24  2018_04_03  2018_04_13
    2018_01_04  2018_01_14  2018_01_24  2018_02_03  2018_02_13  2018_02_23  2018_03_05  2018_03_15  2018_03_25  2018_04_04  2018_04_14
    2018_01_05  2018_01_15  2018_01_25  2018_02_04  2018_02_14  2018_02_24  2018_03_06  2018_03_16  2018_03_26  2018_04_05  2018_04_15
    2018_01_06  2018_01_16  2018_01_26  2018_02_05  2018_02_15  2018_02_25  2018_03_07  2018_03_17  2018_03_27  2018_04_06  2018_04_16
    2018_01_07  2018_01_17  2018_01_27  2018_02_06  2018_02_16  2018_02_26  2018_03_08  2018_03_18  2018_03_28  2018_04_07  2018_04_17
    2018_01_08  2018_01_18  2018_01_28  2018_02_07  2018_02_17  2018_02_27  2018_03_09  2018_03_19  2018_03_29  2018_04_08
    2018_01_09  2018_01_19  2018_01_29  2018_02_08  2018_02_18  2018_02_28  2018_03_10  2018_03_20  2018_03_30  2018_04_09
    2018_01_10  2018_01_20  2018_01_30  2018_02_09  2018_02_19  2018_03_01  2018_03_11  2018_03_21  2018_03_31  2018_04_10
    

    切换到root用户,转移或清除对应的归档日志, 删除一些不用的日期目录的文件,注意保留最后几个文件(比如360以后的)

    [oracle@pen archivelog]$ rm -rf 2018_01*
    [oracle@pen archivelog]$ rm -rf 2018_02*

    [oracle@pen archivelog]$ ls
    2018_03_01  2018_03_06  2018_03_11  2018_03_16  2018_03_21  2018_03_26  2018_03_31  2018_04_05  2018_04_10  2018_04_15
    2018_03_02  2018_03_07  2018_03_12  2018_03_17  2018_03_22  2018_03_27  2018_04_01  2018_04_06  2018_04_11  2018_04_16
    2018_03_03  2018_03_08  2018_03_13  2018_03_18  2018_03_23  2018_03_28  2018_04_02  2018_04_07  2018_04_12  2018_04_17
    2018_03_04  2018_03_09  2018_03_14  2018_03_19  2018_03_24  2018_03_29  2018_04_03  2018_04_08  2018_04_13
    2018_03_05  2018_03_10  2018_03_15  2018_03_20  2018_03_25  2018_03_30  2018_04_04  2018_04_09  2018_04_14
    

    8,在删除归档日志后,必须用RMAN维护控制文件,否则空间显示仍然不释放。(rman使用system用户登录,或者自创的chen用户登录,必须要有dba的权限) 

    [oracle@pen archivelog]$ rman target chen/chen

    [oracle@pen archivelog]$ rman target chen/chen
    
    Recovery Manager: Release
    10.2.0.1.0 - Production on Tue Apr 17 11:30:03 2018 Copyright (c) 1982, 2005, Oracle. All rights reserved. connected to target database: EC (DBID=1558596032) RMAN>

    9. 检查一些无用的archivelog
    RMAN> crosscheck archivelog all;

    archive log filename=/oracle/flash_recovery_area/EC/archivelog/2018_04_13/o1_mf_1_506_ff13y3dg_.arc recid=464 stamp=973364932
    validation succeeded for archived log
    archive log filename=/oracle/flash_recovery_area/EC/archivelog/2018_04_14/o1_mf_1_507_ff2lbs2k_.arc recid=465 stamp=973412441
    validation succeeded for archived log
    archive log filename=/oracle/flash_recovery_area/EC/archivelog/2018_04_14/o1_mf_1_508_ff3n9454_.arc recid=466 stamp=973447204
    validation succeeded for archived log
    archive log filename=/oracle/flash_recovery_area/EC/archivelog/2018_04_15/o1_mf_1_509_ff4fvh4q_.arc recid=467 stamp=973473391
    validation succeeded for archived log
    archive log filename=/oracle/flash_recovery_area/EC/archivelog/2018_04_15/o1_mf_1_510_ff6dv19y_.arc recid=468 stamp=973537890
    validation succeeded for archived log
    archive log filename=/oracle/flash_recovery_area/EC/archivelog/2018_04_17/o1_mf_1_511_ffbs1s2f_.arc recid=469 stamp=973681465
    validation succeeded for archived log
    archive log filename=/oracle/flash_recovery_area/EC/archivelog/2018_04_17/o1_mf_1_512_ffbs1s9l_.arc recid=470 stamp=973681466
    validation succeeded for archived log
    archive log filename=/oracle/flash_recovery_area/EC/archivelog/2018_04_17/o1_mf_1_513_ffbs1tb9_.arc recid=471 stamp=973681466
    ...
    Crosschecked 215 objects

    10, 删除过期的归档
    RMAN> delete expired archivelog all;  ------> 输入“YES” 确认。

    ......
    archive log filename=/oracle/flash_recovery_area/EC/archivelog/2018_02_28/o1_mf_1_411_f9dx438b_.arc recid=375 stamp=969297667 Deleted 119 EXPIRED objects

    下面这一条命令视情况而定,可以不执行。

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

    RMAN>exit  (退出)

    11,再次查询,发现使用率正常,已经降到19.57

    SQL> sqlplus / as sysdba

    SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;

    SQL> select * from V$FLASH_RECOVERY_AREA_USAGE;
    
    FILE_TYPE    PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
    ------------ ------------------ ------------------------- ---------------
    CONTROLFILE            0             0        0
    ONLINELOG              0             0        0
    ARCHIVELOG          19.57            0        96
    BACKUPPIECE            0             0        0
    IMAGECOPY              0             0        0
    FLASHBACKLOG          .3            .22       4
    
    6 rows selected.

    这样,oracle的归档日志满的问题就解决了,可以登录和访问了。

    补充:如果archive log模式下不能正常startup,则先恢复成noarchive log,startup成功后,再shutdown;

    操作命令如下:

    shutdown immediate;
    startup mount;
    alter database noarchivelog;
    alter database open;
    shutdown immediate;
    再次startup以archive log模式
    startup mount;
    show parameter log_archive_dest;
    alter database archivelog;
    archive log list;               
    alter database open;
    如果还不行,则删除一些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;
    最后,也可以指定位置Arch Log, 请按照如下配置
    select name from v$datafile;
    alter system set log_archive_dest='/opt/app/oracle/oradata/usagedb/arch' scope=spfile
    或者修改大小(我的改成了20G,不能太小了)
    SQL> alter system set db_recovery_file_dest_size=3G scope=both;

  • 相关阅读:
    Sharepoint2013搜索学习笔记之创建搜索服务(二)
    Sharepoint2013搜索学习笔记之设置外网内容源(四)
    C# zxing插件 根据输入的字符串生成二维码
    值类型和引用类型
    Web.config增删查改
    Redis
    2017年最好的6个WEB前端开发手册下载
    php implode()函数详解
    elk日志系统搭建
    aop实现接口请求参数打印
  • 原文地址:https://www.cnblogs.com/kaishirenshi/p/8862913.html
Copyright © 2011-2022 走看看