在 Windows 環境建立 Enterprise Manager (EM) 時,常遇到 ORA-12560 或「無法對所有 EM 相關帳戶解鎖」錯誤。本文記錄真實案例排查過程,揭示根因為 Windows CMD AutoRun 登錄值干擾批次檔執行,提供註冊表修復指令與驗證步驟。
配置: Failed to unlock mgmt_view account
嚴重: 無法對所有 EM 相關帳戶解鎖
oracle.sysman.emcp.exception.EMConfigException: 無法對所有 EM 相關帳戶解鎖
查看 $ORACLE_HOME/cfgtoollogs/emca/... 發現兩個關鍵錯誤:
emcaDbUtil.bat 時出現 '?' 不是內部或外部命令關鍵線索:單獨執行 PL/SQL 解鎖語句卻正常,說明資料庫端無問題,錯誤發生在 Windows 命令列環境。
Windows 登錄 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor\AutoRun 若設有非法路徑,CMD 啟動時會自動執行該指令,導致後續批次檔(emcaDbUtil.bat)在污染環境下執行而失敗。Linux 無此機制,故不會遇到。
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor" /v "AutoRun" /d "" /f
參數說明:
/v "AutoRun":指定值名稱/d "":設定空資料(清除原有指令)/f:強制覆寫不提示emca -config dbcontrol db 或 DBCA 重建 EM)'?' 不是內部命令,帳戶解鎖成功AutoRun、AutoRun (Wow6432Node) 兩個登錄路徑%ORACLE_HOME%\sysman\admin\scripts\emca\emcaDbUtil.bat 是否存在且可執行核心教訓:Windows 環境下 Oracle 工具鏈高度依賴 CMD 執行環境純淨度,任何第三方軟體寫入的 AutoRun 都可能成為「隱形殺手」。