ora-16038 ora-19809 ora-00312 解决过程

本文记录了在Oracle数据库中遇到的在线日志无法归档的问题及解决过程。详细介绍了如何通过调整db_recovery_file_dest_size参数值来增加Flash Recovery Area的大小,以及如何在RMAN中清理过期备份以释放空间。

C:/>sqlplus / as sysdba
  SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 2
25 10:49:58 2010
  
Copyright (c) 1982, 2005, Oracle. All rights reserved.
  连接到
:
  
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
  
With the Partitioning, OLAP and Data Mining options

SQL> select * from scott.emp;
  select * from scott.emp   
*
  第 1 行出现错误
:
  ORA-01219: 数据库未打开: 仅允许在固定表/视图中查询

SQL> startup database open;
  SP2-0714: 无效的 STARTUP 选项组合

SQL> startup open;
  ORA-01081: 无法启动已在运行的 ORACLE - 请首先关闭它

SQL> startup nomount;
  ORA-01081: 无法启动已在运行的 ORACLE - 请首先关闭它

SQL> shutdown immediate;
  ORA-01109: 数据库未打开

  已经卸载数据库。

  ORACLE 例程已经关闭。

SQL> startup nomount;
  ORACLE 例程已经启动。

  
Total System Global Area 805306368 bytes
  
Fixed Size 1251532 bytes
  
Variable Size 427820852 bytes
  
Database Buffers 369098752 bytes
  
Redo Buffers 7135232 bytes
SQL> alter database mount;
  数据库已更改。

SQL> alter database open;
  alter database open  第 1 行出现错误:
  ORA-16038:日志 3 序列号 90 无法归档

  ORA-19809: 超出了恢复文件数的限制

  ORA-00312: 联机日志 3 线程
1:
  
'D:/ORACLE/PRODUCT/10.2.0/DB_1/ORADATA/ORCL/ONLINE LOG/O1_MF_3_5NFPBVRH_.LOG'
  ORA-00312: 联机日志 3 线程
1:
  
'D:/ORACLE/PRODUCT/10.2.0/DB_1/FLASH_RECOVERY_AREA /ORCL/ONLINELOG/O1_MF_3_5NFPBWZ3_.LOG'
  ORA-00312: 联机日志 3 线程
1:
  
'D:/ORACLE/PRODUCT/10.2.0/DB_1/ORADATA/ORCL/ONLINE LOG/O1_MF_3_REDO.LOG'

  
SQL> alter database clear unarchived logfile 'D:/ORACLE/PRODUCT/10.2.0/DB_1/ORADATA/ORCL/ONLINELOG/O1_MF_3_5NFPBVRH_.LOG';

  
alter database clear unarchived logfile 'D:/ORACLE/PRODUCT/10.2.0/DB_1/ORADATA/ORCL/ONLINELOG/O1_MF_3_5NFPBVRH_.LOG'
  
*
  第 1 行出现错误
:
  ORA-01514: 日志说明中出现错误: 没有此类日志

  ORA-01517: 日志成员
:
  
'D:/ORACLE/PRODUCT/10.2.0/DB_1/ORADATA/ORCL/ONLINE LOG/O1_MF_3_5NFPBVRH_.LOG'

  
SQL> alter database drop logfile member 'D:/ORACLE/PRODUCT/10.2.0/DB_1/ORADATA/ORCL/ONLINELOG/O1_MF_3_5NFPBVRH_.LOG';
  数据库已更改。


  
SQL> alter database drop logfile member 'D:/ORACLE/PRODUCT/10.2.0/DB_1/FLASH_RECOVERY_AREA/ORCL/ONLINELOG/O1_MF_3_5NFPBWZ3_.LOG';
  alter database drop logfile member 'D:/ORACLE/PRODUCT/10.2.0/DB_1/FLASH_RECOVERY_AREA/ORCL/ONLINELOG/O1_MF_3_5NFPBWZ3_.LOG'  

       *
  第 1 行出现错误
:
  
ORA-00361: cannot remove last log member string for group string
  D:/ORACLE/PRODUCT/10.2.0/DB_1/FLASH_RECOVERY_AREA/ ORCL/ONLINELOG/O1_MF_3_5NFPBWZ3_.LOG (? 3)


   ORA-00361: cannot remove last log member string for group string
  
Cause: An attempt has been made to remove the last member of a log file group.
   Action: If desired, delete the entire log, by using DROP LOGFILE.


SQL> alter database drop logfile 'D:/ORACLE/PRODUCT/10.2.0/DB_1/FLASH_RECOVERY_ AREA/ORCL/ONLINELOG/O1_MF_3_5NFPBWZ3_.LOG';

  alter database drop logfile 'D:/ORACLE/PRODUCT/10.2.0/DB_1/FLASH_RECOVERY_AREA /ORCL/ONLINELOG/O1_MF_3_5NFPBWZ3_.LOG' 

    *
  第 1 行出现错误
:
  ORA-00350: 日志 3 (线程 1) 中需要归档

  ORA-00312: 联机日志 3 线程
1:
  
'D:/ORACLE/PRODUCT/10.2.0/DB_1/FLASH_RECOVERY_AREA /ORCL/ONLINELOG/O1_MF_3_5NFPBWZ3_.LOG'

SQL> alter database drop logfile group 3;
   alter database drop logfile group 3

 第1 行出现错误:
  
ORA-00350: ?? 3 (?? orcl ???, ?? 1) ????
  
ORA-00312: ???? 3 ?? 1:
  
'D:/ORACLE/PRODUCT/10.2.0/DB_1/FLASH_RECOVERY_AREA/ORCL/ONLINELOG/O1_MF_3_5NFPBWZ3_.LOG'
  删不掉,提示第三组联机日志需要归档。

  d.归档联机日志

SQL> archive log start;
  已处理的语句

SQL> archive log next;
  ORA-16014: 日志3 的序列号 90 未归档, 没有可用的目的地 --说明已经归档的文件大小超过归档的最大设置。

  ORA-00312: 联机日志 2 线程
1: 'D:/ORACLE/PRODUCT/10.2.0/DB_1/FLASH_RECOVERY_AREA /ORCL/ ONLINELOG/O1_MF_3_5NFPBWZ3_.LOG'
SQL> show parameter db_recovery
  
NAME TYPE VALUE
  
------------------------------------ ----------- ------------------------------
  
db_recovery_file_dest string D:/oracle/product/10.2.0/flash_recovery_area
  db_recovery_file_dest_size big integer 2G

SQL> alter system set db_recovery_file_dest_size=3G scope=both;

系统已更改。

(1).检查flash recovery area的使用情况:
SQL> select * from v$flash_recovery_area_usage;
  FILE_TYPE PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES

------------ ------------------ ------------------------- ---------------
  
CONTROLFILE .33 0 1
  
ONLINELOG 7.32 0 3
  
ARCHIVELOG 25.06 0 35
  
BACKUPPIECE 67.69 0 4
  
IMAGECOPY 0 0 0
  
FLASHBACKLOG 0 0 0
  已选择6行。 .

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

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

可以看到,这里已经有3.012G使用了,这说明我们刚开始设置的db_recovery_file_dest_size=2G不足,导致online redo log无法归档,在这里,我们通过设置db_recovery_file_dest_size参数,增大了flash recovery area来解决这个问题。(3).也可以在rman中通过删除flash recovery area中不必要的备份来释放flash recovery area空间来解决这个问题:

(1). delete obsolete;
  
(2). crosscheck backupset; delete expired backupset;

  这里事先手工把归档的文件删除一部分,然后用rman 用上面的 命令把flash recovery area 实际空间变小。问题就解决了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值