zoukankan      html  css  js  c++  java
  • ORA-00257: archiver error. Connect internal only, until freed

    归档日志空间满导致普通用户连接数据库出错,sys用户仍然可登录数据库。当rman使用catalog方式连接数据库时也报错。

    两种处理方式:1、rman在非catalog方式连接到目标数据库,删除过期日志  2、增大归档日志空间的大小。

    一、rman在非catalog方式连接到目标数据库,删除过期日志

    1、用户连接报错
    SQL> conn scott/tiger@orcl;
    ERROR:
    ORA-00257: archiver error. Connect internal only, until freed. --归档错误(日志空间满)

    RMAN以catalog的形式连接也报同样的错。

    2、检查FLASH_RECOVERY_AREA_USAGE使用情况
    SQL> conn / as sysdba;
    Connected.

    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
    ……

    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 99.6 .51 50
    BACKUPPIECE .33 0 1
    IMAGECOPY 0 0 0
    FLASHBACKLOG 0 0 0

    6 rows selected.

    ----------

    select * from v$archived_log;  --查看所有归档日志文件信息

    ---------
    3、清除部分日志---采用rman方式清除日志
    [oracle@rusky ORCL]$ rman target sys/12345  --使用rman连接到目标数据库,并清除过期日志(没有使用catalog)

    Recovery Manager: Release 10.2.0.1.0 - Production on Mon Jan 5 14:51:36 2015

    Copyright (c) 1982, 2005, Oracle. All rights reserved.

    connected to target database: ORCL (DBID=1379778111)

    RMAN> crosscheck archivelog all; ---先用该命令检查

    RMAN> delete expired archivelog all;--删除过期日志 --delete noprompt expired archivelog all;

    released channel: ORA_DISK_1
    allocated channel: ORA_DISK_1
    channel ORA_DISK_1: sid=124 devtype=DISK
    specification does not match any archive log in the recovery catalog --无过期日志

    RMAN> delete archivelog until time "to_date('2015-01-01 23:00:00','yyyy-mm-dd hh24:mi:ss')"; --删除指定日志前的日志

    released channel: ORA_DISK_1
    allocated channel: ORA_DISK_1
    channel ORA_DISK_1: sid=124 devtype=DISK

    List of Archived Log Copies
    Key Thrd Seq S Low Time Name
    ------- ---- ------- - --------- ----
    1 1 1209 A 24-DEC-14 /home/oracle/oracle/flash_recovery_area/ORCL/archivelog/2014_12_24/o1_mf_1_1209_b9o2yclz_.arc
    ……

    4、查看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 34.72 0 17
    BACKUPPIECE .33 0 1
    IMAGECOPY 0 0 0
    FLASHBACKLOG 0 0 0

    6 rows selected.

    5、再次连接SQLPLUS正常

    =========================

    QL> show parameter DB_RECOVERY_FILE_DEST_SIZE

    NAME TYPE VALUE
    ------------------------------------ ----------- ------------------------------
    db_recovery_file_dest_size big integer 2G

    如果不要这些archivelog的话,可以删除一些

    rman>DELETE NOPROMPT ARCHIVELOG UNTIL TIME 'SYSDATE-3'; 直接运行这条 这样会只保留三天的归档

    二、增大归档日志空间的大小

    其实问题的本质是归档日志的使用已经达到了spfile等启动参数文件中指定的最大值。oracle 10g中归档日志默认的存放地是闪回目录,即%ORACLE_BASE%/flash_recovery_area的相应实例名下面,这个位置的大小在参数文件中有个限制,解决空间不足的问题可以通过两种方式来实现,一个修改这个大小限制,还有一个就是修改归档日志存放位置。

    据数据库目前可用存储空间情况、FLASH_RECOVERY_AREA空间为2GB的实际情况,把FLASH_RECOVERY_AREA的空间修改为20GB()。
    SQL> alter system set DB_RECOVERY_FILE_DEST_SIZE=20g;
    系统已更改。

    三、其它信息查看

    1、在操作系统下查看每天生成的归档日志大小及总的归档日志文件大小
    [root@rusky archivelog]# pwd
    /home/oracle/oracle/flash_recovery_area/ORCL/archivelog
    [root@rusky archivelog]# du -h --max-depth=1        ---------进入归档日志文件目录,使用该命令查看
    208M ./2015_04_14
    166M ./2015_04_27
    166M ./2015_04_25
    208M ./2015_04_20
    166M ./2015_04_03
    167M ./2015_03_08
    208M ./2015_03_04
    166M ./2015_03_05
    209M ./2015_04_16
    208M ./2015_03_31
    208M ./2015_03_26
    208M ./2015_04_21
    208M ./2015_03_12
    172M ./2015_04_23
    212M ./2015_03_09
    211M ./2015_03_28

    ……

    11G .

    2、查看每天生成的归档日志大小情况:

    SELECT TRUNC(FIRST_TIME) "日期",TRUNC(SUM(BLOCKS*BLOCK_SIZE)/1024/1024/1024,2)  "大小(GB/DAY)" FROM V$ARCHIVED_LOG GROUP BY(FIRST_TIME) ORDER BY 1 DESC;

    3、查看所有归档日志文件的详细信息

    select * from v$archived_log;

  • 相关阅读:
    linux内核的配置
    数据库常用SQL语句(二):多表连接查询
    数据库常用SQL语句(三):子查询
    数据库常用SQL语句(一):常用的数据库、表操作及单表查询语句
    数据库管理系统软件的软件架构
    Java对象的序列化
    关于重写对象equals方法的问题
    对Spring的理解
    Myeclipse项目工程目录中各种Libraries的含义
    对JDBC的使用理解
  • 原文地址:https://www.cnblogs.com/rusking/p/4203737.html
Copyright © 2011-2022 走看看