归档问题导致的数据库无法启动 (80天)

本地有一个小的环境,今天照例登上sqlplus,突然发现报了如下的错误。一看原来归档满了。我记得前几天做一个批量操作临时把temp文件resize了很大,限于本地空间有限。准备改回去。把多余的归档删除了。

sqlplus n1/n1 
.... 
ERROR: 
ORA-00257: archiver error. Connect internal only, until freed.

这个时候sysdba的权限发挥作用了,它可以照常登录。然后开始做resize操作。

SQL> alter database tempfile '/u03/ora11g/oradata/TEST01/temp01.dbf' resize 100M;

但是等了好一会儿,一直没有输出。是不是Hang住了。

看来得删除归档文件了。然后到归档目录下尝试删除,结果这个时候rm似乎不管用了,命令执行了,但是归档文件还在那。我想是不是有系统级的问题了。

决定重启 ,重启以后,Mount状态过后就很不留情的报了一个03113的错误。

SQL> startup 
ORACLE instance started.
Total System Global Area  313159680 bytes 
Fixed Size                  2227944 bytes 
Variable Size             255852824 bytes 
Database Buffers           50331648 bytes 
Redo Buffers                4747264 bytes 
Database mounted. 
ORA-03113: end-of-file on communication channel 
Process ID: 8220 
Session ID: 237 Serial number: 5

查看alert日志文件。看到重做日志归档失败。

ARC3 started with pid=23, OS id=8232 
ARC1: Archival started 
ARC2: Archival started 
ARC2: Becoming the 'no FAL' ARCH 
ARC2: Becoming the 'no SRL' ARCH 
ARC1: Becoming the heartbeat ARCH 
ARCH: Encountered disk I/O error 19502 
ARCH: Closing local archive destination LOG_ARCHIVE_DEST_1: '/u03/ora11g/product/11.2.0/dbhome_1/dbs/arch1_216_837590339.dbf' (error 19502) (TEST01) 
ARC2: Encountered disk I/O error 19502 
ARC2: Closing local archive destination LOG_ARCHIVE_DEST_1: '/u03/ora11g/product/11.2.0/dbhome_1/dbs/arch1_217_837590339.dbf' (error 19502) (TEST01) 
ARC2: I/O error 19502 archiving log 1 to '/u03/ora11g/product/11.2.0/dbhome_1/dbs/arch1_217_837590339.dbf' 
ARCH: I/O error 19502 archiving log 3 to '/u03/ora11g/product/11.2.0/dbhome_1/dbs/arch1_216_837590339.dbf' 
ARCH: Archival stopped, error occurred. Will continue retrying 
ORACLE Instance TEST01 - Archival Error 
ORA-16038: log 1 sequence# 217 cannot be archived 
ORA-19502: write error on file "", block number  (block size=) 
ORA-00312: online log 1 thread 1: '/u03/ora11g/oradata/TEST01/redo01.log' 
Errors in file /u03/ora11g/diag/rdbms/test01/TEST01/trace/TEST01_ora_8220.trc: 
ORA-16038: log 3 sequence# 216 cannot be archived 
ORA-19502: write error on file "", block number  (block size=) 
ORA-00312: online log 3 thread 1: '/u03/ora11g/oradata/TEST01/redo03.log' 
USER (ospid: 8220): terminating the instance due to error 16038 
Wed May 21 17:48:18 2014 
System state dump requested by (instance=1, osid=8220), summary=[abnormal instance termination]. 
System State dumped to trace file /u03/ora11g/diag/rdbms/test01/TEST01/trace/TEST01_diag_8185.trc 
Dumping diagnostic data in directory=[cdmp_20140521174818], requested by (instance=1, osid=8220), summary=[abnormal instance termination]. 
Instance terminated by USER, pid = 8220

因为是测试环境,所以采用了如下的方法,启动到Mount阶段之后

SQL> startup mount 
ORACLE instance started.
Total System Global Area  313159680 bytes 
Fixed Size                  2227944 bytes 
Variable Size             255852824 bytes 
Database Buffers           50331648 bytes 
Redo Buffers                4747264 bytes 
Database mounted.
SQL> alter database clear unarchived logfile '/u03/ora11g/oradata/TEST01/redo01.log'; 
Database altered.
SQL> alter database clear unarchived logfile '/u03/ora11g/oradata/TEST01/redo03.log'; 
Database altered.
SQL> alter database open; 
Database altered.

查看日志文件情况

SQL> select group#,sequence#,members,status,archived from v$log;
   GROUP#  SEQUENCE#    MEMBERS STATUS           ARC 
---------- ---------- ---------- ---------------- --- 
         1        219          1 CURRENT          NO 
         2        218          1 INACTIVE         NO 
         3          0          1 UNUSED           YES
 1* select *from v$logfile 
SQL> /
   GROUP# STATUS  TYPE    MEMBER                                             IS_RECOVER 
---------- ------- ------- -------------------------------------------------- ---------- 
         1         ONLINE  /u03/ora11g/oradata/TEST01/redo01.log              NO 
         2         ONLINE  /u03/ora11g/oradata/TEST01/redo02.log              NO 
         3         ONLINE  /u03/ora11g/oradata/TEST01/redo03.log              NO

这个时候重新执行temp文件的resize,就没有问题了。

SQL> alter database tempfile '/u03/ora11g/oradata/TEST01/temp01.dbf' resize 100M;
Database altered.

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2014-05-22

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

一个普通数据库用户所能查到的"意料之外"的信息(r2笔记98天)

有时候限于工作环境的情况,大多数开发人员只得到了一个权限收到限制的数据库用户。 可能你都不知道你所拥有的数据库用户都能查到哪些你想象不到的数据库信息,其实你知道...

3378
来自专栏Netkiller

数据库安全·开发加密插件

以下节选择《Netkiller Architect 手札》 作者:netkiller 地址 http://www.netkiller.cn/archit...

3157
来自专栏乐沙弥的世界

Oracle expdp 时遭遇ORA-39125 ORA-04063

    数据库在使用DataPump导出时碰到了ORA-39125与ORA-04063。完整的ORA-39125提示是Worker unexpected fat...

891
来自专栏杨建荣的学习笔记

ORACLE数据文件名导致的奇怪问题 (51天)

今天创建了一些表空间,准备做data guard来看看效果。 为了方便起见,我用gridcontrol来做,主库也开了Omf,省去了好多步骤。 一路点下来,就等...

3154
来自专栏乐沙弥的世界

Linux/Unix shell 自动导入Oracle数据库

      使用shell脚本实现对Oracle数据库的监控与管理将大大简化DBA的工作负担,如常见的对实例的监控,监听的监控,告警日志的监控,以及数据库的备份...

1582
来自专栏idba

死锁案例之四

一 前言 死锁,其实是一个很有意思也很有挑战的技术问题,大概每个DBA和部分开发同学都会在工作过程中遇见 。关于死锁我会持续写一个系列的案例分析,希望能够对想...

723
来自专栏杨建荣的学习笔记

SQL*Loader-805的解决(r2笔记36天)

使用sql*loader是大型项目中数据迁移的利器。如果是外部系统,其他数据库到oracle的数据迁移,使用文本式文件是最兼容的方式。 sqlldr的加载效率是...

3108
来自专栏杨建荣的学习笔记

巧用外部表避免大量的insert (r4笔记第71天)

昨天开发咨询我一个问题,希望我对下面的语句进行调优。 语句类似下面的形式 SELECT subscriber_no FROM SUBSCRIBER S W...

3468
来自专栏杨建荣的学习笔记

关于dual表的破坏性测试(r3笔记第60天)

关于dual表的破坏性测试,既然是破坏性测试,就需要确定这个测试仅限于测试或者个人学习所用,可能有些sql看似极为简单,但是一旦运行就会导致整个业务系统崩溃。 ...

37913
来自专栏Jerry的SAP技术分享

ABAP OPEN SQL里OPEN CURSOR和SELECT的比较

After the OPEN CURSOR statement, the database cursor is positioned in front of t...

3719

扫码关注云+社区