一次ORA-00704的处理

一次ORA-00704的处理

[@more@]

今天早上,发现有个数据库无法启动了,错误信息如下:
oracle@mas238 102db]$ sqlplus "/as sysdba"
SQL*Plus: Release 10.2.0.1.0 - Production on 星期日 10月 18 00:18:27 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
已连接到空闲例程。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 536870912 bytes
Fixed Size 1220432 bytes
Variable Size 150995120 bytes
Database Buffers 381681664 bytes
Redo Buffers 2973696 bytes
数据库装载完毕。
ORA-01092: ORACLE 实例终止。强制断开连接

看日志中的错误信息:
SMON: enabling cache recovery
Sun Oct 18 01:15:31 2009
Errors in file /u01/oracle/102db/admin/hectrain/udump/hectrain_ora_12850.trc:
ORA-00704: 引导程序进程失败
ORA-39700: 必须用 UPGRADE 选项打开数据库
Sun Oct 18 01:15:31 2009
Error 704 happened during db open, shutting down database
USER: terminating instance due to error 704
Instance terminated by USER, pid = 12850
ORA-1092 signalled during: ALTER DATABASE OPEN...

看.trc文件中的错误信息:
[oracle@mas238 bdump]$ cat /u01/oracle/102db/admin/hectrain/udump/hectrain_ora_12789.trc
/u01/oracle/102db/admin/hectrain/udump/hectrain_ora_12789.trc
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
ORACLE_HOME = /u01/oracle/102db
System name: Linux
Node name: mas238
Release: 2.6.9-42.ELsmp
Version: #1 SMP Wed Jul 12 23:27:17 EDT 2006
Machine: i686
Instance name: hectrain
Redo thread mounted by this instance: 1
Oracle process number: 13
Unix process pid: 12789, image: oracle@mas238 (TNS V1-V3)

*** SERVICE NAME:(SYS$USERS) 2009-10-18 01:05:23.436
*** SESSION ID:(1645.3) 2009-10-18 01:05:23.436
ORA-00704: 引导程序进程失败
ORA-39700: 必须用 UPGRADE 选项打开数据库

用 startup upgrade 确实可以启动数据库。
网上查找了下资料,一般这种错误是由于升级了数据库软件,而没有升级数据库的系统字典表导致的。

但是我不是这种情况,分析下,之前系统出现过异常,数据库异常关闭过,难道是字典表的数据异常导致的错误?
修改 initxxx.ora文件,增加参数 sql_trace = true
然后再次执行 startup 启动数据库,查看错误信息中.trc文件
.tra文件的最后部分是:
PARSING IN CURSOR #5 len=63 dep=1 uid=0 oct=3 lid=0 tim=1226366925317451 hv=3748897726 ad='3fb20db8'
SELECT NULL FROM REGISTRY$ WHERE CID='CATPROC' AND VERSION = :1
END OF STMT
PARSE #5:c=13998,e=13389,p=11,cr=24,cu=0,mis=1,r=0,dep=1,og=4,tim=1226366925317444
EXEC #5:c=0,e=325,p=0,cr=0,cu=0,mis=1,r=0,dep=1,og=4,tim=1226366925317846
FETCH #5:c=1000,e=707,p=2,cr=3,cu=0,mis=0,r=0,dep=1,og=4,tim=1226366925318582
STAT #5 id=1 cnt=0 pid=0 pos=1 obj=891 op='TABLE ACCESS FULL REGISTRY$ (cr=3 pr=2 pw=0 time=708 us)'
ORA-00704: 引导程序进程失败
ORA-39700: 必须用 UPGRADE 选项打开数据库
EXEC #1:c=287956,e=1487908,p=34,cr=544,cu=0,mis=0,r=0,dep=0,og=1,tim=1226366926337645
ERROR #1:err=1092 tim=433413726
说明是执行 SELECT NULL FROM REGISTRY$ WHERE CID='CATPROC' AND VERSION = :1 之后出问题了,导致引导程序进程失败,我将数据库用 startup upgrade 启动起来,然后执行 SELECT NULL FROM REGISTRY$ WHERE CID='CATPROC',发现没有抱错,但是没有记录,所以我到一个好的数据库中查询了 SELECT * FROM REGISTRY$ WHERE CID='CATPROC' 发现是有记录的,怀疑问题就出在这里 没有找到 CATPROC 的记录导致 数据库引导程序进程失败。
查了下 rdbms/admin 下的.sql 脚本,看到有个 catproc.sql 脚本是关于 CATPROC 的创建脚本
在 upgrade 启动之后,重新执行了 catproc.sql 脚本,然后关闭数据库,再启动成功。
赶紧备份下,问题解决。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/133835/viewspace-1027982/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/133835/viewspace-1027982/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值