zoukankan      html  css  js  c++  java
  • ORA-00257: archiver error. Connect internal only, until freed.| Oracle数据库归档日志满导致应用系统反应缓慢的问题处理

    一:查看原因

    查看了下V$FLASH_RECOVERY_AREA_USAGE,看看归档目录使用的情况。果然是归档满了。

      1 Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
      2 With the Partitioning, OLAP, Data Mining and Real Application Testing options
      3 [oracle@localhost ~]$ sqlplus / as sysdba;
      4 
      5 SQL*Plus: Release 11.2.0.3.0 Production on Thu Dec 21 09:06:54 2017
      6 
      7 Copyright (c) 1982, 2011, Oracle.  All rights reserved.
      8 
      9 
     10 Connected to:
     11 Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - Production
     12 With the Partitioning, OLAP, Data Mining and Real Application Testing options
     13 
     14 09:06:56 SYS@orcl  SQL> select * from v$flash_recovery_area_usage;
     15 
     16 FILE_TYPE            PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
     17 -------------------- ------------------ ------------------------- ---------------
     18 CONTROL FILE                          0                         0               0
     19 REDO LOG                              0                         0               0
     20 ARCHIVED LOG                      99.62                         0             107
     21 BACKUP PIECE                          0                         0               0
     22 IMAGE COPY                            0                         0               0
     23 FLASHBACK LOG                         0                         0               0
     24 FOREIGN ARCHIVED LOG                  0                         0               0
     25 
     26 7 rows selected.
     27 
     28 Elapsed: 00:00:01.76
    View Code

    image

    注:可以看出,ARCHIVELOG日志已经达到99.9%了。造成归档满的原因是因为有一个用户在做大量更新操作,由于更新操作产生大量重做日志,
    归档日志切换频繁。解决方法是要把大量归档日志清除掉!

    二   处理方式:


    有两种方式可以解决该问题。
    一使用RMAN清除归档日志。
    二修改闪回恢复区的大小DB_RECOVERY_FILE_DEST_SIZE。

    第一种使用RMAN清除归档日志。

      1 =========  删除归档日志 =========
      2 
      3 第一步: 直接删除 物理数据 rm
      4 
      5 第二步:通过 rman 删除:
      6 
      7 oracle@linux112:/opt/oracle/> rman
      8 
      9 Recovery Manager: Release 11.1.0.7.0 - Production on Mon Sep 3 11:47:06 2012
     10 
     11 Copyright (c) 1982, 2007, Oracle.  All rights reserved.
     12 
     13 RMAN> connect target sys/sys_passwd
     14 
     15 
     16 
     17 执行如下命令:
     18 
     19 (1) crosscheck backup;
     20 
     21 (2) delete obsolete;
     22 
     23 (3) delete expired backup;
     24 
     25 (4) crosscheck archivelog all;
     26 
     27 (5) delete expired archivelog all;
     28 
     29 (6) host;


    注:删除过期的归档

    这样就把归档文件删除了。再进入sqlplus 查看ARCHIVELOG日志使用率!

    第二种方法就是增大闪回恢复区的大小。

    如下:

      1 SQL>alter system set DB_RECOVERY_FILE_DEST_SIZE=10g

    在归档数据中要制定备份策略。以免造成该问题。
    configure retention policy to recovery window of 15 days;
    或者在备份时删除日志信息。

    DELETE ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-7'; //删除七天前的归档  

    DELETE ARCHIVELOG FROM TIME 'SYSDATE-7'; //删除七天到现在的归档  
    -----------------------------------------------------------------------------------------------------------------------


    三:ORACLE 归档日志打开关闭方法;

    注意:下文参考:fengyifei11228  《  ORACLE 归档日志打开关闭方法

    三  、一: 设置为归档方式

      1   sql> archive log list;  -- #查看是不是归档方式
      2   sql> alter system set log_archive_start=true scope=spfile; --#启用主动归档
      3    sql> alter system set log_archive_dest='location=/oracle/ora9/oradata/arch' scope=spfile;
      4      -- #设置归档路径
      5    sql> alter system set log_archive_dest_1='location=/oracle/ora9/oradata/arch1' scope=spfile;
      6    sql> alter system set log_archive_dest_2='location=/oracle/ora9/oradata/arch2' scope=spfile;
      7       -- #如果归档到两个位置,则可以通过上边方法实现
      8   sql> alter system set log_archive_format='arch_%d_%t_%r_%s.log'  -- #设置归档日记款式
      9   sql> shutdown immediate;
     10   sql> startup mount;    -- #打开控制文件,不打开数据文件
     11   sql> alter database archivelog; -- #将数据库切换为归档模式
     12   sql> alter database open;   -- #将数据文件打开
     13   sql> archive log list;  --  #查看此时是否处于归档模式
     14  --  查询以确定数据库位于archivelog模式中且归档过程正在运行
     15 sql> select log_mode from v$database;
     16 sql> select archiver from v$instance;
     17   -- 日志切换
     18 sql> alter system switch logfile;
     19   -- 这次日志切换将归档写到两个目标地,
     20  --  1,即第二步的/oracle/ora9/oradata/arch1和/oracle/ora9/oradata/arch1,要是要对目录确认
     21 
     22 -- 在oracle情况中运行如下查询:
     23 sql> select name from v$archived_log;
     24 -- 而后在操作系统中确认查询所列出的文件
     25 

    三  、二 :设置非归档方式


      1   sql> archive log list;  -- #查看是否是归档方式
      2   sql> alter system set log_archive_start=false scope=spfile;-- #禁用自动归档
      3   sql> shutdown immediate;
      4   sql> startup mount;   -- #打开控制文件,不打开数据文件
      5   sql> alter database noarchivelog;-- #将数据库切换为非归档模式
      6   sql> alter database open;  ---#将数据文件打开
      7   sql> archive log list;  --- #查看此时便处于非归档模式

    三  、三 :归档相关命令


      1 
      2 archive log stop;
      3 archive log start;
      4 archive log list;
      5 
      6 show parameters;
      7 show parameters log_archive_start;
      8 show parameters log_archive_max_process; #归档进程数
      9 alter system set log_archive_max_process=5; #将归档进程数改为5
     10 select * from v$bgprocess;    #检察后台进程
     11 
     12 
  • 相关阅读:
    JAVA第一次上机作业
    如何设置FreePBX的数据库用户可以通过远程来连接Mysql数据库?
    Mysql 用户root密码重置
    使用FreePBX和第三方线路对接
    防御攻击
    Xshell配置公钥,免密码登陆
    centos7防火墙启动关闭
    Windows执行bat脚本乱码
    Windows开机执行bat脚本
    bat脚本之启动MySQL服务
  • 原文地址:https://www.cnblogs.com/ios9/p/8078859.html
Copyright © 2011-2022 走看看