解決oracle無法連接,首先檢查數據庫的監聽是否正常,監聽命令:
lsnrctl status 查看監聽器命令 lsnrctl start 會看到啟動成功的界面 lsnrctl stop 停止監聽器命令
正常的監聽啟動后會看到orcl的實例,如果沒有,說明監聽有問題
Microsoft Windows [版本 6.1.7601] 版權所有 (c) 2009 Microsoft Corporation。保留所有權利。 C:\Users\Administrator>lsnrctl status LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 13-7月 -2018 23:1 2:59 Copyright (c) 1991, 2010, Oracle. All rights reserved. 正在連接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))) LISTENER 的 STATUS ------------------------ 別名 LISTENER 版本 TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Produ ction 啟動日期 13-7月 -2018 20:02:08 正常運行時間 0 天 3 小時 10 分 50 秒 跟蹤級別 off 安全性 ON: Local OS Authentication SNMP OFF 監聽程序參數文件 d:\app\Administrator\product\11.2.0\dbhome_1\network\a dmin\listener.ora 監聽程序日志文件 d:\app\administrator\diag\tnslsnr\txf\listener\alert\l og.xml 監聽端點概要... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521))) 服務摘要.. 服務 "CLRExtProc" 包含 1 個實例。 實例 "CLRExtProc", 狀態 UNKNOWN, 包含此服務的 1 個處理程序... 服務 "orcl" 包含 1 個實例。 實例 "orcl", 狀態 READY, 包含此服務的 1 個處理程序... 服務 "orclXDB" 包含 1 個實例。 實例 "orcl", 狀態 READY, 包含此服務的 1 個處理程序... 命令執行成功 C:\Users\Administrator>
控制文件介紹:
每一個oracle都至少會生成一個控制文件,一個數據庫可以擁有多個控制文件,但是一個控制文件只能屬於一個數據庫。
控制文件內部除了存放數據庫名及其創建日期,數據文件,日志文件等相關信息,在系統運行的過程中還會存放系統更改號,檢查點信息及歸檔的當前狀態等信息。
出於安全考慮,數據庫會自動創建2到3個控制文件,每個控制文件記錄相同的信息,這個可以確保在數據庫運行時,某個控制文件損壞,oracle會自動使用另一個控制文件,當所有控制文件損壞時,數據庫將無法工作。
注:通過 v$controlfile 可以查看oracle的控制文件信息。 select name from v$controlfile
本次問題發生情況:服務器異常斷電,啟動后,oracle無法連接,使用plsql連接報錯ora12514監聽出現問題,進一步檢查后發現是控制文件不一致,導致數據庫無法啟動。
解決步驟:
cmd窗體運行以下語句
1.使用nolog模式,DBA登錄
sqlplus /nolog
conn / as sysdba
2.先關閉數據庫
shutdown immediate
3.使用nomount模式登錄
startup nomount
4.拷貝其中一個控制文件到另外一個地方,完成替換
host copy D:\app\Administrator\oradata\orcl\control01.ctl D:\app\Administrator\flash_recovery_area\orcl\control02.ctl
5.手動啟動到mount模式
alter database mount;
6.手動啟動到open模式
alter database open;
注:本次解決問題的關鍵在於搞清楚數據庫不同的啟動模式的區別。
直接使用startup命令啟動數據庫,數據庫會自動按次序執行nomount,mount,open模式打開數據庫,這樣就會生成新的控制文件,
因為服務器異常斷電后,原有的控制文件不一致,所以就會導致數據庫啟動不了
因此先以nomount模式啟動:只會創建實例,不加載數據庫,也不會打開任何數據文件然后使用host copy命令復制其中一個控制文件到另外一個控制文件的地方,
再啟動到mount,open模式,問題解決。
2017年11月8日17:16:01
再記錄一次無法連接的問題:
問題描述:服務器歸檔內容過多,手動刪除歸檔日志后,plsql連接不上,客戶端sqlplus連不上, 服務端sqlplus能連接
sqlplus當中的錯誤為:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
進程 ID: 0
會話 ID: 0 序列號: 0
解決步驟:sqlplus /nolog模式登錄(如果直接在cmd當中無法登錄的話,可以嘗試dos命令cd進入到D:\app\Administrator\product\11.2.0\dbhome_1\BIN目錄下連接)
登錄后使用shutdown immediate命令,start命令,將數據庫關閉,啟動
如果在start命令啟動后啟動后出現如下錯誤:通信通道的文件結尾問題
SQL> startup open hstestdb
ORACLE 例程已經啟動。
Total System Global Area 6847938560 bytes
Fixed Size 2188768 bytes
Variable Size 3422554656 bytes
Database Buffers 3405774848 bytes
Redo Buffers 17420288 bytes
數據庫裝載完畢。
ORA-03113: 通信通道的文件結尾
進程 ID: 2984
會話 ID: 5 序列號: 3
再次shutdown immediate關閉數據庫,然后再啟動到 startup mount模式,查詢一下select * from v$log;看一下數據庫最后正常的時間
執行recover database until time '2013-03-01 12:12:12';恢復一下
SQL> recover database until time '2013-03-01 12:12:12';
完成介質恢復。
再執行alter database open resetlogs; 更改恢復的內容
SQL> alter database open resetlogs;
數據庫已更改。
注意如果沒有恢復,直接執行alter database open resetlogs應該會有如下提示
SQL> alter database open resetlogs;
alter database open resetlogs
*
第 1 行出現錯誤:
ORA-01139: RESETLOGS 選項僅在不完全數據庫恢復后有效
最后使用startup再把數據庫例程啟動。
還有一種試驗解決監聽問題的方法:
找到D:\app\Administrator\product\11.2.0\dbhome_1\NETWORK\ADMIN
將listener.ora和tnsnames.ora文件中的HOST名字依次改成ip地址;計算機名;127.0.0.1;localhost然后啟動oracle看是否正常
