Oracle日常問題-資料庫無法啟動(案例二)

chenoracle發表於2020-02-16

Oracle日常問題-資料庫無法啟動(案例二)

 

問題現象:

同事反饋客戶機房斷電,來電後,啟動資料庫伺服器,發現資料無法啟動。

登入應用系統,輸入使用者名稱和密碼登入後報錯。

解決過程:

: 伺服器啟動後, 資料庫或監聽沒有 自動 啟動

遠端 登入資料庫伺服器,切換到oracle 使用者,發現沒有 sqlplus 命令 ???

猜測: 沒配置環境變數,還是 資料庫使用者不是oracle?

檢視使用者只有oracle 使用者

[root@zjltdb home]# ls

oracle

無法找到資料庫警告日誌

[root@zjltdb home]# find / -name alert_*

檢視資料庫環境變數

Oracle日常問題-資料庫無法啟動(案例二)

Oracle日常問題-資料庫無法啟動(案例二)

發現Oracle 家目錄沒有檔案

和客戶溝通,資料庫伺服器資料儲存在磁碟櫃,停電時,資料庫伺服器和磁碟櫃均異常斷電;

猜測:來電啟動時,磁碟櫃啟動速度慢於資料庫伺服器啟動速度,導致資料庫伺服器啟動時無法成功掛載磁碟,導致目錄丟失?

檢視自動掛載情況  

[oracle@zjltdb oracle]$ mount

/dev/sda 2  on / oracle type  ext4 (rw)

解除安裝/oracle ,重新手動掛載

[oracle@zjltdb oracle]$ u mount  /dev/sda2

[oracle@zjltdb oracle]$ mount  /dev/sda2 /oracle

/oracle 仍然沒有檔案

讓客戶重啟資料庫伺服器,啟動之後發現/oracle 目錄仍然沒有檔案

結論:/oracle 目錄下檔案並不是沒有掛載,而是真 沒了

檢視三大核心檔案( 控制檔案,日誌檔案,資料檔案 ) 還在,是否有丟失個別檔案還不確定。

[root@zjltdb home]# find / -name *.ctl

/oradata/ncdb/control01.ctl

/oradata/ncdb/control02.ctl

/oradata/ncdb/control03.ctl

[root@zjltdb home]# find / -name redo*

/oradata/ncdb/redo01.log

/oradata/ncdb/redo02.log

/oradata/ncdb/redo03.log

[root@zjltdb home]# find / -name *.dbf

/oradata/ncdb/nnc_data01.dbf

/oradata/ncdb/nnc_index01.dbf

/oradata/ncdb/system01.dbf

/oradata/ncdb/undotbs01.dbf

......

檢視引數檔案,監聽檔案等已經丟失

[root@zjltdb home]# find / -name init*

root@zjltdb home]# find / -name listener*

丟失的檔案有:引數檔案,監聽檔案,TNS 檔案, Oracle 安裝目錄 ( 包括 Oracle 命令等 )

客戶 反饋 資料庫沒有啟動歸檔,沒有RMAN 備份, 沒有 expdp 邏輯備份 總之一句話,沒有任何有效的備份。

解決方案:

在伺服器本地 重新生成Oracle 軟體 或直接將資料檔案遷移到其他伺服器上,客戶希望能直接在伺服器本地進行恢復。

客戶沒有安裝介質, 不知道oracle  10g 具體哪個 版本,但客戶反饋正式資料庫和 測試 資料庫是 一起搭建的,推測兩個資料庫版本相同,可以複製 測試 伺服器 Oracle_home 目錄到正式資料庫伺服器上。

一: 將測試庫上的oracle 軟體拷貝到正式伺服器上

[root@zjltdb ~]# scp -r 192. 100 . 100 . xxx :/oracle/* /oracle

[root@zjltdb ~]# cd /oracle

[root@zjltdb oracle]# ls

orainventory  

admin

product

由於兩個資料庫的SID 和目錄名不同,需要更改相應的目錄名和例項名

二:禁用spfile 引數檔案

[ oracle@zjltdb dbs] $   mv   spfileerpdb.ora     spfileerpdb.ora.bak

三:重新命名pfile 引數檔案

[ oracle@zjltdb dbs] $   mv   initerpdb.ora   initncdb.ora

四:修改引數檔案

[ oracle@zjltdb dbs] $   vim   initncdb.ora

五:修改監聽檔案

[ oracle@zjltdb admin] $   vim    listener.ora

六:啟動資料庫

分析啟動報錯原因: 引數檔案記錄的資料庫版本和控制檔案記錄的資料庫版本不一致,原庫版本是10.2.0.3.0 ,但是拷貝過來的資料庫軟體屬於 10.2.0.4.0 沒有時間再去找 10.2.0.3.0 的安裝包了,只能繼續恢復了。

解決方案: 修改引數compatible 版本為 10.2.4.0

[ oracle@zjltdb dbs] $   vim   initncdb.ora

七:再次啟動資料庫

可以成功掛載資料庫,但是無法open 資料庫,原因還是因為資料庫版本不匹配

檢視警告日誌

[oracle@zjltdb trace ]$ vim alert_ncdb.log

資料庫必須以UPGRADE 方式啟動

八:以UPGRADE 方式啟動資料庫

此時資料庫狀態為OPEN MIGRATE

資料庫OPEN MIGRATE 狀態下無法連線 生產 使用者,只允許sysdba 使用者連線

猜測: 必須 將資料庫升級到10.2.0.4.0 後應該可以啟動資料庫

九:執行資料庫升級指令碼( 重新建立資料字典和檢視 )

升級之前備份所有的資料檔案,控制檔案,日誌檔案到本地

SQL > @/oracle/product/10.2/rdbms/admin/catu p grd.sql

......

過程比較漫長,大概1 小時

再次啟動資料庫,可以正常open 

十一 :啟動監聽後,進入NC 系統,發現 NC 資料一切正常

十二:讓客戶儘快做備份

1 expdp 對所有使用者做邏輯備份

2 備份 /oracle 目錄到本地

第二天早上,使用者發來訊息,NC 再次出現無法登入,登入到 /oracle 目錄又變空了,並且使用者昨天晚上並沒有來得及做任何備份,他說太晚了,想早上在做備份。使用者希望可以再做一次恢復。

猜測問題可能原因:

1 人員惡意刪除

2  /oracle 所在磁碟出現問題

解決方案:

1 重複昨天的恢復操作

2 修改 oracle 環境變數,將 oracle_home 指向其他磁碟

3 全庫備份,備份檔案拷貝到其他伺服器上

4 啟動資料庫,啟動監停, 客戶 登入 系統 ,檢視 系統 資料,一切正常

建議使用者 聯絡 伺服器硬體廠商儘快檢查磁碟健康情況;

歡迎關注我的微信公眾號"IT小Chen",共同學習,共同成長!!!

Oracle日常問題-資料庫無法啟動(案例二)

Oracle日常問題-資料庫無法啟動(案例二)



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29785807/viewspace-2675803/,如需轉載,請註明出處,否則將追究法律責任。

相關文章