解决OracleDBConsoleorcl不能启动

来源:互联网 发布:ubuntu显示所有用户 编辑:程序博客网 时间:2024/05/05 23:49

OracleDBConsole[SID]服务简介

  OracleDBConsole[SID]服务负责Windows平台下启动Oracle企业管理器,从Oracle 10g开始引入这个服务,也是从Oracle 10g开始,Oracle的企业管理器从客户端形式变为浏览器操作模式,这里的[SID]即Oracle SID,如果是默认安装就是orcl,故这个服务在你的机器上可能就是OracleDBConsoleORCL,事实上在我的机器上也是它。

  本文基于Oracle 11g,操作系统为Windows xp,故本文描述的解决办法仅供参考。

  故障描述

  在一次正常使用企业管理器后,重新启动计算机,再次启动OracleDBConsoleORCL服务时,报:

  Windows 不能在 本地计算机 启动 OracleDBConsoleORCL。有关更多信息,查阅系统事件日志。如果这是非 Microsoft 服务,请与服务厂商联系,并参考特定服务错误代码 2。

  在应用程序事件日志中记录了如下错误信息:

  Process exited abnormally during initialization.

  解决过程

  尝试从命令行下启动该服务,也以失败告终,正寻思着是否删除数据库再重新安装,突然想起Oracle企业管理器其实是一个单独的组件,可以将其单独删除,再重新安装的,其实这里并不是删除Oracle企业管理器,而是Oracle数据库控制台资料档案库,删除资料档案库会同时删除OracleDBConsoleORCL服务,并删除用户SYSMAN及其所属对象,重新创建资料档案库就会重新添加OracleDBConsoleORCL服务,并创建SYSMAN用户及其所属对象。搞清楚这一点关系后,开始动手实施修复。

  首先删除资料档案库,注意此时Oracle的监听器服务和数据库服务必须处于启动状态,因为删除命令会连接到数据库删除SYSMAN用户及其所属对象:

  C:/>emca -repos drop

  EMCA 开始于 2009-1-31 9:13:24

  EM Configuration Assistant, 11.1.0.5.0 正式版

  版权所有 (c) 2003, 2005, Oracle。保留所有权利。

  输入以下信息:

  数据库 SID: orcl

  监听程序端口号: 1521

  SYS 用户的口令:【输入SYS用户的口令,输入口令时屏幕不会回显】

  SYSMAN 用户的口令:【输入SYSMAN用户的口令】

  SYSMAN 用户的口令:

  是否继续? [是(Y)/否(N)]: y

  2010-8-25 22:26:32 oracle.sysman.emcp.EMConfig perform
       信息: 正在将此操作记录到 D:/app/cfgtoollogs/emca/orcl/emca_2010_08_25_22_25_14.log。
        2010-8-25 22:26:33 oracle.sysman.emcp.EMReposConfig invoke
        信息: 正在删除 EM 资料档案库 (此操作可能需要一段时间)...

 

  开始等待删除,这个过程可能比较长,来杯咖啡,休息休息吧。

  删除结束后,往往有人会想到使用命令重新创建资料档案库,但经过我多次尝试,使用这种办法创建好资料档案库后,OracleDBConsoleORCL服务仍然无法启动,企业管理器依旧无法使用,于是想到使用dbca来创建,于是在运行窗口输入:dbca,启动数据库配置助手,在第一步时选择“配置数据库选件”,后面的操作只需要一直点击下一步就可以了,注意在选择是否使用EM资料档案库时,一定要选中,默认没有选中,dbca检查到系统中已经没有EM资料档案库,于是就会重新创建,OracleDBConsoleORCL服务也会重新添加了,这也会花一段时间,如果dbca重新配置过程中不出现错误,那配置结束后,OracleDBConsoleORCL服务就能够正常启动,就可以正常使用Oracle企业管理器了。如果删除EM资料档案库不彻底,运行dbca期间可能会报错,一般是SYSMAN用户及其对象没有删除干净,遇到这种问题时,只需要再次运行一次emca –repos drop即可。

  如果在删除EM资料档案库时,删除了SYSMAN用户及其所属对象,但OracleDBConsole[SID]服务没有删除时,如果该服务还能够启动,并能够通过浏览器进入,那此时就可以使用emca –repos create重新创建EM资料档案库即可。

  总结

  经过这次冒险,总觉得Oracle的OracleDBConsole[SID]服务很脆弱,在没有任何误操作的情况下,重新启动计算机后,它也可能就启动不了了,但在这时,大家一定要保持冷静,多思考,办法总是有的,不到万不得已,不要重新安装,建议大家在重新启动系统前,先手动停止OracleDBConsole[SID]服务、监听器服务和数据库服务。

 


 

 

打开D:/app/product/11.1.0/db_1/L_orcl/sysman/log/OracleDBConsoleorclsrvc.log.

log最后记录的是:

-------------- [OracleDBConsoleorcl] ------------
EMDROOT=D:/app/product/11.1.0/db_1
ORACLE_HOME=D:/app/product/11.1.0/db_1
EMSTATE=D:/app/product/11.1.0/db_1/L_orcl
CONSOLE_CFG=dbconsole
TRACE_LEVEL=16
TIMEOUT=30
08/26/10 06:19:31 Job Process API is available
08/26/10 06:19:31 Start pending...
08/26/10 06:19:31 Verifying dbconsole is not started already. Command line "D:/app/product/11.1.0/db_1/bin/emctl.bat" istatus dbconsole
08/26/10 06:19:31 Service Job object queried for basic limit information
08/26/10 06:19:31 Service Job object set with JOB_OBJECT_LIMIT_BREAKAWAY_OK limit
08/26/10 06:19:38 dbconsole launch commandline is "D:/app/product/11.1.0/db_1/bin/emctl.bat" istart dbconsole
08/26/10 06:19:38 Tracking process launch...
08/26/10 06:20:08 dbconsole exited with retCode 55.
08/26/10 06:20:08 Check D:/app/product/11.1.0/db_1/sysman/log/OracleDBConsoleorcl.nohup for details

日志让看OracleDBConsoleorcl.nohup 文件,目录里没有这个文件呀.

方法 1 :

打开D:/app/product/11.1.0/db_1/BIN/emctl.bat,这里是定义环境变量的地方,其中已经设置了这些:
if not defined REMOTE_EMDROOT (set ORACLE_HOME=D:/app/product/11.1.0/db_1)
if not defined REMOTE_EMDROOT (set EMDROOT=%ORACLE_HOME%)
if defined REMOTE_EMDROOT (set ORACLE_HOME=%REMOTE_EMDROOT%)
if defined REMOTE_EMDROOT (set EMDROOT=%ORACLE_HOME%)
if defined REMOTE_EMDROOT (set LOCAL_EMDROOT=D:/app/product/11.1.0/db_1)
......

后边还有一条设置:
if not defined DBCONSOLE_SERVICE_NAME (set DBCONSOLE_SERVICE_NAME=OracleDBConsole%ORACLE_SID%),

但没有看到前面设置,只能手动设置ORACLE_SID试试,于是加了一条设置:
if defined REMOTE_EMDROOT (set ORACLE_SID=orcl)

orcl是我的数据库实例名

到服务中启动OracleDBConsoleorcl,ok,没有报错;
重新启动计算机,也没有报错,OracleDBConsoleorcl服务也启动了。

方法 2 :
到product/11.1.0/db_1文件夹下
把localhost_orcl复制为
/db_1/localhost_orcl
/db_1/机器名_orcl

然后同样这样做在如下目录

/db_1/oc4j/j2ee/OC4J_DBConsole_localhost_orcl
/db_1/oc4j/j2ee/OC4J_DBConsole_机器名_orcl


注释: 我的方法一没有成功,还要用shutdown 和 startup重起数据库!