解决oracle关于OEM 中“Enterprise Manager 无法连接到数据库实例”的问题

时间:2021-12-04 21:46:19
前段时间,我的OEM忽然打不开了,上面显示“Enterprise Manager 无法连接到数据库实例”,而下面的提示则是数据库实例已开启,还有代理连接也能连上,但就是打不开OEM。 后来,我去网上,找了很多方法,它们不是无效,就是不能正常实行,经过了一周蛋疼的奋战,在一次重新配置DBConsole失败后,我的oracle完全坏掉了,不止是OEM的问题了,很多服务都不见了,再次尝试修复未果后,只好重装了。 然后,就是又过了一段时间,当我再次打开OEM时,它又出现这个问题了,我就发飙了,遂发誓一定要把它解决。这次我总算成功地解决了这个问题了,现把我第二次解决的经历与方法分享与下: 首先是关于网上说的sysman用户的账户问题,当时查到这么一个解决方案,说是OEM打不开是因为该账户被锁定了,于是我尝试着使用这个方法:
1、使用SQL PLUS.
    在DOS模式下运行SQL PLUS.
    SQL> conn
    请输入用户名:  sys as sysdba
    输入密码:
    连接成功
    SQL>desc dba_users                  注意:如果此时提示发现该视图无效。用D:\oracle\product\10.2.0\db_1\RDBMS\ADMINsql.bsq 新建立user_astatus_map , DBA_USERS . 否则会显示如下信息:
 名称                                      是否为空? 类型
----------------------------------------- -------- ----------------------------
USERNAME                                  NOT NULL VARCHAR2(30)
USER_ID                                   NOT NULL NUMBER
PASSWORD                                           VARCHAR2(30)
ACCOUNT_STATUS                            NOT NULL VARCHAR2(32)
LOCK_DATE                                          DATE
EXPIRY_DATE                                        DATE
DEFAULT_TABLESPACE                        NOT NULL VARCHAR2(30)
TEMPORARY_TABLESPACE                      NOT NULL VARCHAR2(30)
CREATED                                   NOT NULL DATE
PROFILE                                   NOT NULL VARCHAR2(30)
INITIAL_RSRC_CONSUMER_GROUP                        VARCHAR2(30)
EXTERNAL_NAME                                      VARCHAR2(4000)
SQL> select username,account_status from dba_users where username='SYSMAN' ;
USERNAME                       ACCOUNT_STATUS
------------------------------ --------------------------------
SYSMAN                         LOCKED
SQL>alter user sysman account unlock;
    用户已更改。
    此时系统就可以连接到数据库了。
结果发现我的账户果然是被锁定了的,按照该方法进行解锁后,再次打开OEM,还是进不去,然后在sqlplus下查看sysman用户的状态,发现又被锁定了。开始以为是因为没有在管理员权限下运行的原因(以前采用其他办法时,的确碰见过部分原因是这个),于是在管理员模式下继续改办法,无效。而且,我发现,只要每次解锁后,再次打开OEM都会在次被锁上,我就无语了。 只好再次去茫茫网络中搜寻,又被我找到了貌似的答案,由于OEM打开时会尝试使用这些这些用户连接数据库,由于profiles的限制造成锁定,于是以管理员用户登陆到数据库: SQL> ALTER PROFILE DEFAULT LIMITfailed_login_attempts UNLIMITED ;
配置文件已更改
然后还是不行,又有说法是密码必须改回初始密码,否则多次登录错误会造成账户被锁定,于是修改sysman密码为初始密码: SQL> alter user system identified by ***;
用户已更改。
然后还是登不上OEM,唯一的变换就是sysman用户不会再因为登录OEM而被锁定了,每次都是OPEN,可这样我就更不知道该怎么办了。只好放弃这条路,去采取别的办法,然后再网上我又找到另外一种方式: 1、重新配置em

C:\Documents and Settings\Administrator>emca -config dbcontrol db


EMCA 开始于 2008-12-18 13:55:39
EM Configuration Assistant 10.2.0.1.0 正式版
版权所有 (c) 2003, 2005, Oracle。保留所有权利。

输入以下信息:
数据库 SID:best

已为数据库 XBOMS 配置了 Database Control
您已选择配置 Database Control, 以便管理数据库 XBOMS
此操作将移去现有配置和默认设置, 并重新执行配置
是否继续? [yes(Y)/no(N)]:Y
监听程序端口号:1521
SYS 用户的口令:
DBSNMP 用户的口令:
SYSMAN 用户的口令: (如果提示密码不对的话,用alter user SYSMAN identified by xxx 来改)
通知的电子邮件地址 (可选):
通知的发件 (SMTP) 服务器 (可选):
-----------------------------------------------------------------

已指定以下设置

数据库 ORACLE_HOME ................ E:\oracle\product\10.2.0\db_1

数据库主机名 ................ wuhao

监听程序端口号 ................ 1521
数据库 SID ................ best
通知的电子邮件地址 ...............
通知的发件 (SMTP) 服务器 ...............

-----------------------------------------------------------------
是否继续? [yes(Y)/no(N)]:Y
2008-12-18 13:57:04 oracle.sysman.emcp.EMConfig perform
信息: 正在将此操作记录到 E:\oracle\product\10.2.0\db_1\cfgtoollogs\emca\XBOMS\em
ca_2008-12-18_01-55-39-下午.log。
2008-12-18 13:57:12 oracle.sysman.emcp.util.DBControlUtil stopOMS
信息: 正在停止 Database Control (此操作可能需要一段时间)...
2008-12-18 13:57:59 oracle.sysman.emcp.util.DBControlUtil startOMS
信息: 正在启动 Database Control (此操作可能需要一段时间)...
2008-12-18 13:58:39 oracle.sysman.emcp.EMDBPostConfig performConfiguration
信息: 已成功启动 Database Control
2008-12-18 13:58:39 oracle.sysman.emcp.EMDBPostConfig performConfiguration
警告: 无法创建 Database Control 快捷方式
2008-12-18 13:58:39 oracle.sysman.emcp.EMDBPostConfig performConfiguration
信息: >>>>>>>>>>> Database Control URL 为http://wuhao:5500/em<<<<<<<<<<<
已成功完成 Enterprise Manager 的配置
EMCA 结束于 2008-12-18 13:58:39

再次打开成功!
上帝总是希望熊猫能多承受一些苦难,所以理所当然,“再次打开成功” 没有应验在我的电脑上,而且我记得以前用过这种方式,触动错误还是一模一样的:
2011-8-3 3:05:05 oracle.sysman.emcp.EMConfig perform
信息: 正在将此操作记录到 D:\app\zhou\cfgtoollogs\emca\orcl\emca_2011_08_03_03_04_31.log。
2011-8-3 3:05:05 oracle.sysman.emcp.EMConfig perform
严重: 监听程序未启动或数据库服务未注册到该监听程序。启动该监听程序并注册数据库服务, 然后重新运行 EM Configuration Assistant。
有关详细资料, 请参阅 D:\app\zhou\cfgtoollogs\emca\orcl\emca_2011_08_03_03_04_31.log 中的日志文件。
无法完成配置。 有关详细资料, 请参阅 D:\app\zhou\cfgtoollogs\emca\orcl\emca_2011_08_03_03_04_31.log 中的日志文件。
  很显然,我的监听器是打开的,很不甘心,于是这次我专门针对这个严重错误去搜索,有很多种说法,有用net manager配置路径的,但我好不容易找到它在哪里,打开后却发现不知道怎么配置,于是换个方案:
不重建emca,先emca -repos drop删除emca,然后emca -config dbcontrol db重建emca吧。
  看到这个方案就伤心,还记得上一次我的oracle就是被这个方案搞坏的,终于这次没敢尝试,于是继续搜索:

经过仔细研究发现,在emConfig.log中使用如下hostname:

配置: connectDesc : (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=BlueAeri-PC)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=orcl)))

但是在listener.ora中是这样的:

(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

显然 BlueAeri-PC 是不能访问 localhost的,因此有两个解决方法:

1、单机用户适用:增加操作系统环境变量:ORACLE_HOSTNAME=localhost

2、服务器适用:在listener.ora中增加对BlueAeri-PC或ip地址的侦听

提示,在emConfig.log中仍然会报以下错误,不过不用理会:

配置: 未设置参数 ORACLE_HOSTNAME 的值。

我记得以前找过的许多方法都说是IP问题了,于是兴致勃勃的去找到这两个文件打开一看,又傻眼了,他们都是localhost,我就无语了,最后在抱着试一试的心态下,我给电脑配置了ORACLE_HOSTNAME的环境变量,然后,重新配置em,十多分钟后……竟然配置成功了,接着,我怀着七上八下的心打开浏览器,终于见到了我可爱的登陆界面,尝试登陆也成功了,有时候,幸福就是来的这么突然,在你快要放弃的时候它就突然出现在你眼前。

总结:oracle的服务是很脆弱的,对IP特别敏感,在个人电脑上(因为服务器一般不会随便变更IP地址)这点尤为重要,所以我们在关电脑前最好先把oracle的服务都关了。(其实对于这个问题的解决的麻烦过程,主要还在于对oracle的三层结果不是很清楚,其底层配置命令的用途究竟为何也不甚了解,所以以后如果选择oracle数据库的童鞋一定要首先对其整个结构有了基础的了解,才不会在这些蛋疼的问题上浪费时间,OVER!!!)