客户环境是
11.2.0.1
for Windows
环境,以前配置过
OEM
,有一段时间没有使用,最近打算启用
OEM
,发现无法正常启动,尝试了多次后,只能将
OEM
清除掉。在卸载
OEM
并重新安装时,出现了这个错误。
详细的错误为:
Connecting to database using
connect string (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=NODE)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=DAISY)))
in home E:\app\Administrator\product\11.2.0\dbhome_1 with user "SYS"
role "SYSDBA".
connected to database.
sql to execute declare repos_pwd varchar2(30); view_user varchar2(30);
view_user_pwd varchar2(30); view_user_acc_status varchar2(30); begin repos_pwd
:= ?; sysman.mgmt_view_priv.get_view_user(view_user); select account_status
into view_user_acc_status from sys.dba_users where upper(username) = upper ( view_user
); IF view_user_acc_status like '%LOCKED%' THEN execute immediate 'alter user '
|| view_user || ' account unlock'; END IF; IF view_user_acc_status like
'%EXPIRED%' THEN sysman.mgmt_view_priv.set_view_user_creds ( repos_pwd );
sysman.mgmt_view_priv.GET_VIEW_USER_CREDS ( view_user, view_user_pwd ); execute
immediate 'alter user ' || view_user || ' identified by ' || view_user_pwd ||
''; END IF; end;
noOfParams to bind: 1.
sql execute successfully.
2012-9-24 18:59:05
oracle.sysman.emcp.util.PlatformInterface executeCommand
'??S-1-5-21-343818398-2147128839-1417001333-500'
不是内部或外部命令,也不是可运行的程序
或批处理文件。
2012-9-24 18:59:05
oracle.sysman.emcp.util.PlatformInterface executeCommand
配置
:
执行
CMD /C
E:\app\Administrator\product\11.2.0\dbhome_1\sysman\admin\scripts\emca\emcaDbUtil.bat
"E:\app\Administrator\product\11.2.0\dbhome_1\sysman\admin\scripts;E:\app\Administrator\product\11.2.0\dbhome_1\bin;"
E:/app/Administrator/product/11.2.0/dbhome_1/perl/bin\perl.exe
E:\app\Administrator\product\11.2.0\dbhome_1\sysman\admin\scripts\emca\emcaDbUtil.pl
E:\app\Administrator\product\11.2.0\dbhome_1
"(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=NODE)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=DAISY)))"
SYS SYSDBA declare repos_pwd varchar2(30); view_user varchar2(30);
view_user_pwd varchar2(30); view_user_acc_status varchar2(30); begin repos_pwd
:= ?; sysman.mgmt_view_priv.get_view_user(view_user); select account_status
into view_user_acc_status from sys.dba_users where upper(username) = upper (
view_user ); IF view_user_acc_status like '%LOCKED%' THEN execute immediate
'alter user ' || view_user || ' account unlock'; END IF; IF
view_user_acc_status like '%EXPIRED%' THEN
sysman.mgmt_view_priv.set_view_user_creds ( repos_pwd );
sysman.mgmt_view_priv.GET_VIEW_USER_CREDS ( view_user, view_user_pwd ); execute
immediate 'alter user ' || view_user || ' identified by ' || view_user_pwd ||
''; END IF; end; DAISY 1 SYSMAN_PWD
时出错
2012-9-24 18:59:05 oracle.sysman.emcp.EMReposConfig unlockMGMTAccount
配置
: Failed to unlock mgmt_view account
2012-9-24 18:59:05 oracle.sysman.emcp.EMReposConfig invoke
严重
:
无法对所有
EM
相关帐户解锁
2012-9-24 18:59:05 oracle.sysman.emcp.EMConfig perform
严重
:
无法对所有
EM
相关帐户解锁
有关详细资料
,
请参阅
E:\app\Administrator\cfgtoollogs\dbca\DAISY\emConfig.log
中的日志文件。
2012-9-24 18:59:05 oracle.sysman.emcp.EMConfig perform
配置
: Stack Trace:
oracle.sysman.emcp.exception.EMConfigException:
无法对所有
EM
相关帐户解锁
at oracle.sysman.emcp.EMReposConfig.invoke(EMReposConfig.java:349)
at oracle.sysman.emcp.EMReposConfig.invoke(EMReposConfig.java:158)
at oracle.sysman.emcp.EMConfig.perform(EMConfig.java:253)
oracle.sysman.assistants.util.em.EMConfiguration.run(EMConfiguration.java:583)
oracle.sysman.assistants.dbca.backend.PostDBCreationStep.executeImpl(PostDBCreationStep.java:968)
at oracle.sysman.assistants.util.step.BasicStep.execute(BasicStep.java:210)
at oracle.sysman.assistants.util.step.Step.execute(Step.java:140)
oracle.sysman.assistants.util.step.StepContext$ModeRunner.run(StepContext.java:2667)
at java.lang.Thread.run(Thread.java:595)
2012-9-24 18:59:05 oracle.sysman.emcp.EMConfig restoreOuiLoc
配置
: Restoring oracle.installer.oui_loc to
E:\app\Administrator\product\11.2.0\dbhome_1\oui
本来最先定位的是
Oracle
的异常“无法对所有
EM
相关帐户解锁”,前台出现的也是这个错误信息。但是在
MOS
找了大量的案例,发现都和当前的问题不符。仔细检查数据库中用户的配置,也未发现任何的异常。
随后把疑点逐渐转移到上面“不是内部或外部命令,也不是可运行的程序或批处理文件。”信息上。并且发现这个问题并非只有在执行
OEM
的脚本时报错,而是起动
CMD
命令窗口时都会出现这个错误。
那么其实问题就很明显了,导致问题的原因并不是发生在数据库层,而是操作系统层面,显然
CMD
命令被进行了恶意的篡改。
详细询问了一下情况,客户以前确实中过病毒,后来通过杀毒已经将病毒清除。怀疑虽然病毒被清除,但是
CMD
程序并没有完全恢复原始状态,导致目前启动
CMD
时会寻找一个不存在的文件。
检查
CMD
命令的注册表信息,并未发现有异常的修改。怀疑是
CMD
代码层的
autorun
被修改:
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command
Processor" /v "AutoRun" /d "" /f
通过执行上面的命令,
CMD
启动不会在出现前面的错误,再次安装
OEM
组件,安装顺利完成。
这个案例也再次反映了
Windows
环境下数据库健壮性的问题。
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员