首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Windows 下 Oracle 完整卸載手冊:從服務到註冊表的徹底清理

     編輯:Oracle 資料庫基礎

適用環境

  • 作業系統:Windows XP / Server 2003 / 7 / 10 / Server 2016+
  • Oracle 版本:10g / 11g / 12c / 18c / 19c

第一階段:停止服務與 OUI 卸載

  1. 停止所有 Oracle 服務:
    services.msc → 停止 OracleService*、Oracle*Listener*、Oracle*DBConsole*、Oracle*JobScheduler* 等所有 Oracle 開頭服務
  2. Oracle Universal Installer 卸載:
    「開始」→「程式集」→「Oracle - OraDb11g_home1」→「Oracle Installation Products」→「Universal Installer」→「卸載產品」→選取所有 Oracle 產品 →「移除」
  3. 刪除 ASM/Cluster 服務(若有):
    CMD 管理員執行:localconfig delete
    oracle -delete -asmsid +ASM

第二階段:註冊表深度清理

⚠️ 操作前請匯出註冊表備份

註冊表路徑刪除目標
HKLM\SOFTWARE\ORACLE整個 ORACLE 金鑰
HKLM\SYSTEM\CurrentControlSet\Services所有以 Oracle、OraWeb、OraClrAgnt 開頭的金鑰
HKLM\SYSTEM\CurrentControlSet\Services\Eventlog\Application所有以 Oracle 開頭的金鑰
HKLM\SOFTWARE\ODBC\ODBCINST.INI除 Microsoft ODBC for Oracle 外含 Oracle 的金鑰
HKCR (HKEY_CLASSES_ROOT)以 Ora、Oracle、Orcl、EnumOra 開頭的金鑰
HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MenuOrder\Start Menu\Programs以 Oracle 開頭的金鑰

第三階段:檔案系統與環境清理

  1. 環境變數:系統屬性 → 進階 → 環境變數 → 編輯 Path、CLASSPATH,移除所有 Oracle 路徑
  2. 目錄刪除(重啟後執行):
    • %ORACLE_BASE%(預設 C:\app\oracle 或 D:\Oracle)
    • C:\Program Files\Oracle
    • %TEMP%、%TMP% 下 Oracle 相關暫存檔
  3. 開始選單捷徑:C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Oracle*
  4. C:\Windows 下 ORACLE.INI、oradim*.INI、oraodbc.ini 等

第四階段:ODBC 與事件檢視器

  • ODBC 資料來源管理員 (32/64-bit) → 系統 DSN/使用者 DSN → 刪除所有 Oracle 相關 DSN
  • 事件檢視器 → Windows Logs → Application → 篩選來源「Oracle*」 → 清除記錄

驗證卸載乾淨度

  1. 重啟電腦
  2. regedit 搜尋 "Oracle" 應無結果
  3. services.msc 無 Oracle 服務
  4. 再次執行 OUI 安裝,應無「偵測到現有 Oracle Home」警告

自動化腳本(PowerShell 片段)

# 停止服務
Get-Service -Name "Oracle*" | Stop-Service -Force -ErrorAction SilentlyContinue
Get-Service -Name "Oracle*" | Set-Service -StartupType Disabled

# 刪除註冊表 (需管理員權限)
$paths = @(
  'HKLM:\SOFTWARE\ORACLE',
  'HKLM:\SYSTEM\CurrentControlSet\Services\Oracle*',
  'HKLM:\SYSTEM\CurrentControlSet\Services\Eventlog\Application\Oracle*',
  'HKCR:\Ora*', 'HKCR:\Oracle*', 'HKCR:\Orcl*', 'HKCR:\EnumOra*'
)
$paths | ForEach { Remove-Item -Path $_ -Recurse -Force -ErrorAction SilentlyContinue }

# 環境變數
[Environment]::SetEnvironmentVariable('PATH', 
  ([Environment]::GetEnvironmentVariable('PATH','Machine') -split ';' | Where {$_ -notmatch 'Oracle'} ) -join ';', 'Machine')
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved