oracle服務器異常關閉,斷電,導致oracle控制文件版本不一致,報錯ora-12514,ora-00214解決記錄


  解決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
正常運行時間              03 小時 1050 秒
跟蹤級別                  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看是否正常

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM