剛安裝完成的 Oracle 11g 昨日運作正常,但今日開機後卻持續報錯「協議適配器錯誤」(ORA-12541:TNS:無監聽程序)。經初步檢查,發現監聽服務 OracleOraHome92TNSListener 在服務管理器中雖顯示已啟動,但實際無法正常運行。
執行 lsnrctl start 報錯 open service error,且服務列表中才剛出現監聽服務。
regedit.exe),定位至 HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services 及 CurrentControlSet\Services 下的 OracleOraHome92TNSListener 項目。ImagePath。D:\Oracle\ora92\bin\TNSLSNR.EXE。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。
sqlplus / as sysdbaSQL> create spfile from pfile='D:\ora11g\admin\orcl\pfile\init.ora.4262009164718';SQL> startup此時實例雖啟動,但隨即報錯 ORA-01092: Oracle 實例終止,並伴隨 ORA-30012: 復原表空間 'UNDOTBS1' 不存在或類型不正確。
Alert 日誌顯示:ORA-30012: undo tablespace 'UNDOTBS1' does not exist or of wrong type。檢查參數發現 undo_tablespace 指向 UNDOTBS1,但實際環境可能已變更。
init.ora.4262009164718),修正 undo_tablespace 參數指向正確的 UNDO 表空間名稱。create spfile from pfile='...修正後的檔案路徑...';PL/SQL Developer 連線報錯 ORA-12514: TNS:監聽程序目前無法識別連接描述符中請求的服務。
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-00132 | LOCAL_LISTENER 參數指向的別名 LISTENER_ORCL 在 tnsnames.ora 中未定義 | 在 tnsnames.ora 添加:LISTENER_ORCL = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) |
| ORA-01031 | 權限不足 | 執行 oradba.exe 或檢查用戶是否屬於 ORA_DBA 群組 |
| ORA-28056 | Windows 事件日誌已滿 | 控制台 -> 事件檢視器 -> 系統 -> 清除所有事件 |
下載 Oracle Instant Client Basic Package,解壓至任意目錄 (如 C:\instantclient)。建立 NETWORK\ADMIN 目錄並放入 tnsnames.ora。在 PL/SQL Developer 設定中指定:
C:\instantclientC:\instantclient\oci.dll若出現中文亂碼,新增環境變數 NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK;或設定 TNS_ADMIN 指向 tnsnames.ora 所在目錄。