RAC 实例不能启动 手工启动实例报错 ORA-03113 end-of-file on communication channel

 

       前几天弄好的一个Oracle 10gR2 RAC. 刚才启动的时候实例无法启动,开始以为是反应慢,就等了一会。 过去了N长时间还没有启动。 觉得不太对劲。

 

[root@rac1 bin]# ./crs_stat -t

Name           Type           Target    State     Host       

------------------------------------------------------------

ora.orcl.db    application    ONLINE    OFFLINE               

ora....oltp.cs application    ONLINE    OFFLINE              

ora....cl1.srv application    ONLINE    OFFLINE              

ora....cl2.srv application    ONLINE    OFFLINE              

ora....l1.inst application    ONLINE    OFFLINE               

ora....l2.inst application    ONLINE    OFFLINE              

ora....SM1.asm application    ONLINE    ONLINE    rac1       

ora....C1.lsnr application    ONLINE    ONLINE    rac1       

ora.rac1.gsd   application    ONLINE    ONLINE    rac1        

ora.rac1.ons   application    ONLINE    ONLINE    rac1       

ora.rac1.vip   application    ONLINE    ONLINE    rac1       

ora....SM2.asm application    ONLINE    ONLINE    rac2       

ora....C2.lsnr application    ONLINE    ONLINE    rac2       

ora.rac2.gsd   application    ONLINE    ONLINE    rac2       

ora.rac2.ons   application    ONLINE    ONLINE    rac2       

ora.rac2.vip   application    ONLINE    ONLINE    rac2       

 

手动用srvctl 命令启动也报错:

[root@rac1 bin]# ./srvctl start instance -d orcl -i orcl1

PRKP-1001 : Error starting instance orcl1 on node rac1

CRS-0215: Could not start resource 'ora.orcl.orcl1.inst'.

 

       因为下午在这个实例上重建了OCRVoting disk 所以开始以为是这个过程导致的。 在那用ocrdump命令将OCR dump出来,然后查看。 相关resource的属性没有问题。

 

想起来以前看到的一个错误,srvctl 不能启动, 但是sqlplus能启动。 参考:

 

ORA-16032 Can not Start Instance via srvctl but via sqlplus is fine [ID 1062071.1]

http://blog.csdn.net/tianlesoftware/archive/2010/11/19/6020432.aspx

 

 

就尝试用sqlplus 启动了:

[oracle@rac1 dbs]$ export ORACLE_SID=orcl1

[oracle@rac1 dbs]$ sqlplus /nolog

 

SQL*Plus: Release 10.2.0.1.0 - Production on Thu Dec 2 19:18:22 2010

 

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

 

SQL> conn / as sysdba

Connected to an idle instance.

SQL> startup

ORACLE instance started.

 

Total System Global Area  222298112 bytes

Fixed Size                  1218628 bytes

Variable Size             125831100 bytes

Database Buffers           92274688 bytes

Redo Buffers                2973696 bytes

Database mounted.

ORA-03113: end-of-file on communication channel

 

mount 之后直接挂掉,郁闷。 所以去看了一下alert log

 

Errors in file /u01/app/oracle/admin/orcl/udump/orcl1_ora_14889.trc:

ORA-16038: log 1 sequence# 2 cannot be archived

ORA-00254: error in archive control string ''

ORA-00312: online log 1 thread 1: '+DATA/orcl/onlinelog/group_1.261.736599263'

ORA-00312: online log 1 thread 1: '+FRA/orcl/onlinelog/group_1.257.736599275'

ORA-15173: entry 'archivelog' does not exist in directory '/'

USER: terminating instance due to error 16038

 

看到以上信息,小兴奋了一下。 因为找到原因了。 将数据库启动到mount 状态。 确认下归档目录:

 

SQL> startup mount;

ORACLE instance started.

Total System Global Area  222298112 bytes

Fixed Size                  1218628 bytes

Variable Size              96470972 bytes

Database Buffers          121634816 bytes

Redo Buffers                2973696 bytes

Database mounted.

SQL> show parameter log_    

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

 

log_archive_dest_1           string      LOCATION=+FRA/archivelog/orcl/

...

 

RAC的归档放在了ASM上。 所以到ASM 上看了一下,确实没有后面的几个目录。 asmcmd连上ASM. DATAFRA目录下分别才创建了archivelog/orcl 这个目录:

 

[oracle@rac1 bdump]$ asmcmd

ASMCMD> ls

DATA/

FRA/

ASMCMD> cd DATA/

ASMCMD> ls

ORCL/

ASMCMD> mkdir archivelog

ASMCMD> cd archivelog

ASMCMD> ls

ASMCMD> mkdir orcl

ASMCMD>cd ../..

ASMCMD> cd FRA

ASMCMD> ls

ORCL/

ASMCMD> mkdir archivelog

ASMCMD> ls

ORCL/

archivelog/

ASMCMD> cd archivelog

ASMCMD> ls

ASMCMD> mkdir orcl

 

在将mount的实例open:

SQL> alter database open;

Database altered.

 

成功open.  srvctl 启动了另一个实例:

[oracle@rac1 bin]$ ./srvctl start instance -d orcl -i orcl1

 

查看进程:

[oracle@rac1 bin]$ ./crs_stat -t

Name           Type           Target    State     Host       

------------------------------------------------------------

ora.orcl.db    application    ONLINE    ONLINE    rac1       

ora....oltp.cs application    ONLINE    ONLINE    rac1       

ora....cl1.srv application    ONLINE    ONLINE    rac1       

ora....cl2.srv application    ONLINE    ONLINE    rac2       

ora....l1.inst application    ONLINE    ONLINE    rac1       

ora....l2.inst application    ONLINE    ONLINE    rac2       

ora....SM1.asm application    ONLINE    ONLINE    rac1       

ora....C1.lsnr application    ONLINE    ONLINE    rac1       

ora.rac1.gsd   application    ONLINE    ONLINE    rac1       

ora.rac1.ons   application    ONLINE    ONLINE    rac1       

ora.rac1.vip   application    ONLINE    ONLINE    rac1       

ora....SM2.asm application    ONLINE    ONLINE    rac2       

ora....C2.lsnr application    ONLINE    ONLINE    rac2       

ora.rac2.gsd   application    ONLINE    ONLINE    rac2       

ora.rac2.ons   application    ONLINE    ONLINE    rac2       

ora.rac2.vip   application    ONLINE    ONLINE    rac2    

 

成功启动。

 

小结:

       官网的那个是因为使用了环境变量导致的。 我的这个是因为归档目录不存在导致的。 归档设置虽然是个小问题,影响确是很大的。

 

 

 

 

 

 

------------------------------------------------------------------------------

QQ:492913789

Email:ahdba@qq.com

Blog: http://www.cndba.cn/dave 


网上资源: http://tianlesoftware.download.csdn.net

相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx

DBA1 群:62697716(); DBA2 群:62697977()

DBA3 群:62697850   DBA 超级群:63306533;    

聊天 群:40132017

--加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请

<think>嗯,用户问的是Oracle数据库的ORA-00030错误,我需要先回忆一下这个错误的具体信息。ORA-00030通常和会话被终止有关,可能涉及资源限制或强制操作。我得确认错误代码的正确解释,避免记混了其他类似代码。 首先,我应该检查Oracle官方文档中的错误代码部分,确保信息准确。ORA-00030的官方描述是“会话ID不存在”,这可能发生在尝试终止一个不存在的会话时。比如,执行ALTER SYSTEM KILL SESSION命令时提供的SID和SERIAL#不正确,或者会话已经被终止了。 接下来,用户遇到这个错误时,可能需要检查他们使用的SID和SERIAL#是否正确。我需要引导他们如何查询现有的会话信息,比如通过V$SESSION视图。此外,还要考虑是否有权限问题,或者是否在RAC环境中需要指定INST_ID。 另外,ORA-00030和ORA-00031的区别也很重要。ORA-00031是标记要终止的会话,而ORA-00030是会话不存在,这点需要明确说明。用户可能在终止会话时混淆了这两个错误,所以需要区分清楚。 然后,应该提供具体的解决步骤。比如,先确认会话是否存在,再检查权限,如果是RAC环境如何处理,以及使用IMMEDIATE选项的情况。还要提醒用户谨慎操作终止会话,避免影响生产环境。 可能用户在实际操作中遇到了问题,例如多次尝试终止同一个会话,导致第二次执行时出现ORA-00030,因为会话已经被终止了。这时候需要建议他们重新查询当前活动会话,确保使用正确的参数。 另外,是否需要考虑其他可能性?比如Oracle版本不同导致的行为差异,或者是否存在bug。如果有相关的补丁或文档说明,最好提及,但如果没有足够信息,可能需要建议查看官方文档或联系支持。 最后,总结错误原因和解决方法,结构清晰,分步骤说明,帮助用户逐步排查问题。确保回答准确、实用,避免技术性错误,同时用中文通俗易懂地表达出来。</think>Oracle数据库的ORA-00030错误属于会话控制类错误,其官方定义为: **ORA-00030: Session ID does not exist** 即**会话ID不存在**。以下是逐步解析与解决方法: --- ### 错误原因 此错误通常发生在以下场景: 1. **终止无效会话**:尝试通过`ALTER SYSTEM KILL SESSION`命令终止一个不存在的会话(如已断开会话或错误的`SID`和`SERIAL#`组合)。 2. **参数错误**:提供的会话标识符(`SID`和`SERIAL#`)与实际数据库中的活动会话不匹配。 3. **RAC环境问题**:在Oracle RAC(集群)环境中未指定`INST_ID`,导致无法定位目标会话。 --- ### 复现示例 假设执行以下命令时使用了无效参数: ```sql ALTER SYSTEM KILL SESSION &#39;123,45678&#39;; -- SID=123, SERIAL#=45678 ``` 若会话`123,45678`不存在或已被终止,则会触发ORA-00030。 --- ### 解决步骤 #### 1. 确认会话是否存在 查询当前所有活动会话: ```sql SELECT sid, serial#, username, status, machine, program FROM v$session WHERE type = &#39;USER&#39;; ``` 检查目标会话的`SID`和`SERIAL#`是否存在于结果中。 #### 2. 检查权限 确保执行终止操作的用户具有`ALTER SYSTEM`权限: ```sql GRANT ALTER SYSTEM TO your_user; -- 若无权限需管理员授权 ``` #### 3. RAC环境处理 若为Oracle RAC,需指定`INST_ID`: ```sql ALTER SYSTEM KILL SESSION &#39;sid,serial#,@inst_id&#39; IMMEDIATE; -- 例如:ALTER SYSTEM KILL SESSION &#39;123,45678,@1&#39; IMMEDIATE; ``` #### 4. 使用IMMEDIATE选项 强制终止会话时添加`IMMEDIATE`选项: ```sql ALTER SYSTEM KILL SESSION &#39;sid,serial#&#39; IMMEDIATE; -- 此命令会立即终止会话,无需等待事务回滚 ``` --- ### 注意事项 - **ORA-00030与ORA-00031的区别**: - ORA-00030:会话不存在(参数错误)。 - ORA-00031:标记要终止的会话(会话存在但无法立即终止)。 - 终止会话可能导致事务回滚,影响业务连续性,请谨慎操作。 --- ### 总结 ORA-00030的核心问题是**无效的会话标识符**。通过查询`v$session`验证会话信息,并确保操作命令参数正确即可解决。若问题持续,需进一步检查数据库日志(`alert.log`)排查环境或权限异常。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值