Oracle 9i在Windows 2000上卸載後常留下註冊表鍵值、服務項、環境變數、目錄殘留,導致重裝報錯OUI-1009x、INS-32001等。本文提供四階段、可核對、可腳本化的徹底清理清單,含註冊表精確路徑、服務名模式、目錄白名單、驗證命令。
# 以Administrator運行 CMD
net stop OracleService
net stop OracleTNSListener
net stop OracleDBConsole
net stop OracleJobScheduler
# 禁用啟動類型
sc config OracleService start= disabled
sc config OracleTNSListener start= disabled
sc config OracleDBConsole start= disabled
sc config OracleJobScheduler start= disabled
或用services.msc圖形界面逐個停止並設為「禁用」。
必刪鍵值路徑 (備份註冊表後操作):
| 根鍵 | 路徑模式 | 說明 |
|---|---|---|
| HKLM\SOFTWARE | Oracle\ | Oracle Home配置、NLS_LANG、安裝路徑 |
| HKLM\SYSTEM\CurrentControlSet\Services | Oracle*, OraWeb*, OracleDBConsole*, OracleJobScheduler* | 所有Oracle相關服務 |
| HKLM\SYSTEM\ControlSet001\Services | 同上 | 備用控制集 |
| HKLM\SYSTEM\ControlSet002\Services | 同上 | 備用控制集 |
| HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall | {*Oracle*} | 添加/刪除程序條目 |
| HKCR | Ora*, Oracle*, .ora, .dbf | 文件關聯、COM組件 |
| HKLM\SOFTWARE\ODBC | Oracle in * | ODBC驅動程序 |
PowerShell批量刪除範例:
$paths = @(
'HKLM:\SOFTWARE\Oracle',
'HKLM:\SYSTEM\CurrentControlSet\Services\Oracle*',
'HKLM:\SYSTEM\ControlSet001\Services\Oracle*',
'HKLM:\SYSTEM\ControlSet002\Services\Oracle*',
'HKCR:\Ora*', 'HKCR:\Oracle*'
)
foreach ($p in $paths) {
if (Test-Path $p) { Remove-Item $p -Recurse -Force -ErrorAction SilentlyContinue }
}
# 1. Oracle Home目錄 (預設)
rd /s /q "C:\Program Files\Oracle"
rd /s /q "C:\Oracle" (若自定義安裝在此)
# 2. 清理共享組件 (謹慎,可能影響其他Oracle版本)
# rd /s /q "C:\Program Files\Common Files\Oracle"
# 3. 清理臨時文件
del /q /s %TEMP%\*.ora
del /q /s %TEMP%\*.trc
del /q /s %TEMP%\*.aud
# 4. 環境變數清理 (系統屬性→高級→環境變數)
# 刪除系統變數:ORACLE_HOME, ORACLE_SID, TNS_ADMIN, NLS_LANG
# 從Path中移除 %ORACLE_HOME%\bin 等條目
services.msc無Oracle服務。regedit搜尋「Oracle」無殘留鍵值。C:\Program Files\Oracle、C:\Oracle目錄不存在。setup.exe安裝,應無「檢測到現有Oracle Home」警告。將上述步驟封裝為uninstall_oracle9i.cmd或PowerShell模組,納入IT資產管理流程,實現「一鍵淨化」,消除人工遺漏風險。
徹底清理非單次動作,而是標準化SOP。建議在每次Oracle升級/遷移前執行,確保目標環境「綠色淨淨」。