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

Oracle 11g 參數修改錯誤導致資料庫無法啟動的完整排查與修復指南

     編輯:Oracle 資料庫基礎

問題背景

剛安裝完成的 Oracle 11g 昨日運作正常,但今日開機後卻持續報錯「協議適配器錯誤」(ORA-12541:TNS:無監聽程序)。經初步檢查,發現監聽服務 OracleOraHome92TNSListener 在服務管理器中雖顯示已啟動,但實際無法正常運行。

階段一:監聽服務註冊表修復

現象

執行 lsnrctl start 報錯 open service error,且服務列表中才剛出現監聽服務。

解決步驟

  1. 開啟註冊表編輯器 (regedit.exe),定位至 HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services 及 CurrentControlSet\Services 下的 OracleOraHome92TNSListener 項目。
  2. 在右側窗口右鍵新建「字串值」,命名為 ImagePath。
  3. 雙擊修改數值資料為實際安裝路徑,例如:D:\Oracle\ora92\bin\TNSLSNR.EXE。
  4. 回到服務管理器確認「可執行檔案的路徑」已顯示正確,隨後啟動監聽服務。

階段二:參數檔 (SPFILE) 損壞導致實例啟動失敗

錯誤現象

SQL> startup
ORA-00824: cannot set SGA_TARGET or MEMORY_TARGET due to existing internal settings, see alert log for more information

根因分析

為優化大表查詢修改了初始化參數,導致參數衝突,實例無法啟動。Oracle 11g 在 $ORACLE_BASE/admin//pfile 目錄下自動備份了歷次啟動的 PFILE。

修復操作

  1. 以 SYSDBA 身分連線:sqlplus / as sysdba
  2. 從備份 PFILE 重建 SPFILE:
    SQL> create spfile from pfile='D:\ora11g\admin\orcl\pfile\init.ora.4262009164718';
  3. 再次啟動資料庫:SQL> startup

此時實例雖啟動,但隨即報錯 ORA-01092: Oracle 實例終止,並伴隨 ORA-30012: 復原表空間 'UNDOTBS1' 不存在或類型不正確。

階段三:UNDO 表空間參數不匹配

日誌分析

Alert 日誌顯示:ORA-30012: undo tablespace 'UNDOTBS1' does not exist or of wrong type。檢查參數發現 undo_tablespace 指向 UNDOTBS1,但實際環境可能已變更。

修正方法

  1. 編輯先前使用的 PFILE 檔案 (init.ora.4262009164718),修正 undo_tablespace 參數指向正確的 UNDO 表空間名稱。
  2. 重新建立 SPFILE:create spfile from pfile='...修正後的檔案路徑...';
  3. 啟動資料庫驗證。

階段四:監聽器配置 (listener.ora) 缺失 SID 註冊

現象

PL/SQL Developer 連線報錯 ORA-12514: TNS:監聽程序目前無法識別連接描述符中請求的服務。

標準 listener.ora 配置範例

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = ORCL)
      (ORACLE_HOME = F:\app\Administrator\product\11.2.0\dbhome_1)
    )
    (SID_DESC =
      (PROGRAM = extproc)
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = F:\app\Administrator\product\11.2.0\dbhome_1)
    )
  )

補全上述配置後,執行 lsnrctl start 並重新啟動資料庫實例,問題徹底解決。

後續補充:常見啟動錯誤快速對照表 (持續更新)

錯誤代碼可能原因快速處理
ORA-01034 / ORA-27101實例未啟動 / 共享記憶體不存在檢查服務是否啟動,嘗試 sqlplus / as sysdba -> startup
ORA-00119 / ORA-00132LOCAL_LISTENER 參數指向的別名 LISTENER_ORCL 在 tnsnames.ora 中未定義在 tnsnames.ora 添加:
LISTENER_ORCL = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
ORA-01031權限不足執行 oradba.exe 或檢查用戶是否屬於 ORA_DBA 群組
ORA-28056Windows 事件日誌已滿控制台 -> 事件檢視器 -> 系統 -> 清除所有事件

附錄:無客戶端安裝 PL/SQL Developer 連線方案

下載 Oracle Instant Client Basic Package,解壓至任意目錄 (如 C:\instantclient)。建立 NETWORK\ADMIN 目錄並放入 tnsnames.ora。在 PL/SQL Developer 設定中指定:

  • Oracle Home: C:\instantclient
  • OCI Library: C:\instantclient\oci.dll

若出現中文亂碼,新增環境變數 NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK;或設定 TNS_ADMIN 指向 tnsnames.ora 所在目錄。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved