1. 程式人生 > >Oracle異常關閉後謹防資料檔案受損

Oracle異常關閉後謹防資料檔案受損

資料庫是智慧校園下各類資訊系統的核心組成部分。Oracle資料庫憑藉其強大的穩定性和可伸縮性,目前基本是國內所有高校作為軟體平臺底層資料倉庫的主流選擇。

正所謂“好馬配好鞍,寶劍贈英雄”,穩定高效的Oracle資料庫,自然也對運維人員技術水平和底層硬體執行環境的要求更高,一次意外的停電或一個儲存磁碟的壞塊,都有可能讓資料庫出錯,進而導致資訊系統罷工,接下來就以一則案例“現身說法”。

問題現象

資料檔案無法讀取導致系統罷工

近期,我們頻頻接到多所高校來電諮詢,均反饋其資料庫的部分資料檔案出現無法讀取的情況,這將直接導致其對應的資訊系統無法使用,影響學校業務開展。問題出現時資料庫後臺告警日誌如下,該案例顯示第6號資料檔案無法讀取:

資料庫運維工程師第一時間與現場溝通了解到,系意外斷電導致資料庫異常關閉,再重啟時出現上述問題,這也為後續問題的分析與解決縮小了排查範圍。

問題分析

異常關閉後資料庫都做了什麼

既然在問題產生前,出現過意外斷電導致的資料庫異常關閉現象,那我們就需要了解資料庫在異常關閉到重新啟動的過程中發什麼了什麼事情?同步還需要了解資料庫正常的資料操作及關閉原理,以找出差異和原因所在。

Part.1

當我們在進行資料操作的時候,均會產生兩種不同型別的資料:

重做記錄

目的是確保資料庫具有可恢復性

VS

被修改資料塊本身

目的是為了保證資料庫的永續性

oracle規定:保證重作記錄先於對應的髒資料塊寫入永久層(也就是資料庫檔案)

那麼,一個更改產生的重作記錄和髒資料塊,DBWn必須在LGWR將重做記錄寫入線上重做日誌之後才可以把對應的髒資料塊寫入磁碟,這就導致資料檔案永遠比線上重做日誌舊。

Part.2

當資料庫正常關閉與啟動時,資料庫會做三件事:

☑ Oracle會發起一個完全檢查點,此時任何新的變更將不被允許。

☑ LGWR將日誌緩衝區中現有的重作記錄寫入線上重做日誌——>清空日誌緩衝區——>停下LGWR——>線上日誌停止更新。

☑ DBWn將相對應的髒資料庫寫入資料檔案

以上三件事情目的就是實現線上重做日誌和資料檔案的同步。對正常關閉的資料庫發出start命令後,資料庫要在open階段檢查線上重做日誌和資料檔案是否同步,這也是開啟資料庫的必要條件。

Part.3

當資料庫異常關閉與啟動時,資料庫做了什麼:

Step.1

管理員發出startup命令。

Step.2

開啟引數檔案,啟動例項。

Step.3

開啟控制檔案。

Step.4

檢查線上重做日誌和資料檔案是否同步,結果為不同步。

Step.5

對已經提交事務實施前滾,對沒有寫如資料檔案的髒塊寫進資料檔案。

Step.6

開啟資料庫。

Step.7

對沒有提交的事務實施回滾,將相當於sql命令中的rollback,將相對應的已經寫入資料檔案的塊給修改掉,完成之後資料檔案中不會存在由於上一次強制關閉而留下的,未提交的髒資料塊。

而問題就恰恰就出現在這裡:在某些情況下線上重做日誌或資料檔案在資料庫異常關閉的過程中可能產生了壞塊,使得資料庫無法順利的完成前滾和回滾操作,就會出現資料檔案發生無法讀取的問題。

解決思路

全面檢查日誌以恢復資料檔案

經過上述分析明確故障原因後,其實對症下藥地去排障的思路就相對十分清晰了:

1

全面檢查作業系統和資料庫系統的告警日誌,定位問題發生的根本原因。

2

找出損壞的資料庫檔案,確認其目前的狀態。

3

利用線上日誌與歸檔日誌中的重做記錄手動對資料檔案進行恢復。

至此,資料檔案經過恢復後,資料庫同步狀態迴歸正常,受影響的資訊系統就可以重新正常訪問了。

專家建議

做好UPS與容災備份雙重預防

無論意外斷電或儲存壞塊,資料庫異常關閉導致資料檔案受損時,都可以通過上述思路線上快速恢復,即使無法快速恢復,也可以通過資料庫備份對資料檔案進行恢復。但是為了保證業務連續執行,避免承受可能存在的資料丟失風險,專家建議學校做好以下預防工作:

建議學校機房建設UPS不間斷電源,並定期對UPS進行檢修,有條件的情況下可以每年進行一次機房斷電演練,確保在異常斷電時核心伺服器可以正常執行。

做好容災應急恢復方案

當學校資訊系統遇到嚴重的故障時,比如核心儲存損壞、機房斷電等情況,若沒有整體有效的資料保護與應急恢復方案,學校核心資訊系統將長時間停擺,造成無法估計的損失與嚴重的社會影響。建設資訊系統容災可以在資訊系統發生嚴重故障時快速對資料與系統進行切換與恢復,減少資料丟失的可能性,保證業務連續性。目前比較主流的容災解決方案包括:儲存卷複製技術、磁碟陣列複製技術、資料庫複製技術。

相關推薦

Oracle異常關閉謹防資料檔案受損

資料庫是智慧校園下各類資訊系統的核心組成部分。Oracle資料庫憑藉其強大的穩定性和可伸縮性,目前基本是國內所有高校作為軟體平臺底層資料倉庫的主流選擇。 正所謂“好馬配好鞍,寶劍贈英雄”,穩定高效的Oracle資料庫,自然也對運維人員技術水平和底層硬體執行環境的要求更高,一

【MangoDB】mongodb異常關閉,再啟動需要刪除mongod.lock檔案

mongod.lock檔案是mongo服務端啟動後在硬碟中建立的一個鎖檔案, 如果你正常退出mongod服務,該檔案即使還存在,也不會影響下一次啟動mongod服務的。 這個檔案還會記錄mongod在執行過程中的一些狀態,以便在正常重新啟動服務時能夠獲取異常資訊提示。

Oracle 刪除資料釋放資料檔案所佔磁碟空間

據說,隨著資料的 insert,所使用段(Segment)的資料塊(data block)也不斷增加,這時候高水位(HWM)也隨著上升。當資料被刪除後(無論是 delete 還是 truncate table)雖然被佔用的資料塊(data block)已經相應減少,但是高水位(HWM)並不會隨之下降。當高水位

12c容器資料庫匯入操作_筆記(Linux/oracle借用shell工具匯入資料檔案操作)

Linux/oracle借用shell工具匯入資料檔案操作 一、使用shell工具,遠端連線到Linux下的oracle資料庫服務上 Xshell 6 (Build 0095) Copyright (c) 2002 NetSarang Computer, Inc. All rights reserved

postman異常關閉,再次啟動異常

晚上電腦沒關機,早晨上班,postman被關閉了,然後開啟後一直在轉圈,無法進入介面 解決方法: 刪除電腦上postman的配置檔案即可(會登出登入,如果沒有登入下填寫的資料,一定要注意備份) 檔案路徑:C:\Users\Administrator\AppData\Roaming(找

VMware異常關閉虛擬機器無法開啟問題解決辦法

問題描述:今天在刪除虛擬機器快照的時候虛擬機器卡死了,於是簡單粗暴的開啟工作管理員結束了虛擬機器程序,再開啟虛擬機器後彈出提示框:“提示: 該虛擬機器似乎正在使用中,請按“獲取所有權(T)”按鈕獲取他的所有權,否則按取消”。但點選“獲取所有權”按鈕後,虛擬機器依舊打不開。 解決辦法:找到

oracle備份之rman_恢復資料檔案

測試環境:redhat 5.5 oracle 11g 測試步驟: 1.備庫 2.插資料 3.刪dbf 4.關閉並啟動到mount 5.restore 6.recover 7.開啟 RMAN> backup database; Starting back

Eclipse開啟閃退、異常關閉,啟動閃退的解決辦法

問題描述:         32位Win7系統下 Eclipse開啟便閃退,或者稍微維持十幾分鍾或半小時,還是自動關閉,在虛擬機器桌面內同樣的配置和設定就沒有這個問題,我自己電腦3G記憶體就會出現這樣的閃退或者自動關閉。     &

Oracle 10g使用amdu抽取資料檔案

環境:OEL 5.7 + Oracle 10.2.0.5 RAC 需求:實驗在Oracle 10g環境使用amdu抽取資料庫檔案 本文主要目的是介紹3個知識點: 1.使amdu可以在oracle 10g環境中使用 2.使kfed可以在oracle 10g環境中使用 3.amdu如何抽取損壞的

mysql innodb引擎 長時間使用資料檔案遠大於實際資料量,導致空間不足。

近期我碰到了一個令人頭疼的事情。就是我的mysql伺服器使用了很久之後,發現/data  目錄的空間佔滿了我係統的整個空間,馬上就要滿了。下面是我的分析。 在網上查看了這2個方法,但是執行後發現沒有解決。系統空間沒有變小。 1.optimize table table.n

vmware異常關閉導致虛擬機器無法開啟問題解決辦法

使用vmware的虛擬機器過程中,vmware軟體異常關閉導致了兩個正在使用的虛擬機器異常關閉。再開啟虛擬機器後彈出提示框:“提示: 該虛擬機器似乎正在使用中,請按“獲取所有權(T)”按鈕獲取他的所有

oracle-dba-表空間與資料檔案管理

表空間與資料檔案管理 ORACLE資料庫應用系統ORACLE中介軟體DBMS資料檔案 邏輯結構:一個數據庫有多個表空間,一個表空間有多個段,一個段有多個區段,一個區段有多個數據塊,一個數據塊有多個作業系統資料庫塊 物理結構:一個表空間有多個數據

oracle 12c誤刪pdb資料檔案導致整個資料庫無法開啟問題

同事誤刪了某個外掛資料庫(PDB)的資料檔案,結果整個資料庫,包括容器資料庫(CDB),以及其他外掛資料庫都用不了了。 1、用sys賬號進入例項,可見容器資料庫處於mounted狀態;插在上面的所有PDB當然也都是mounted。 sqlplus sys/p

Oracle RMAN恢復帶有OFFLINE資料檔案的資料庫

1、建立測試表空間及測試資料檔案 SQL> create tablespace test datafile '/u01/app/oracle/oradata/qlotcdb/test.dbf' size 1M; SQL> create user test ide

eclipse在異常關閉,導致無法啟動workspace問題的解決

現象: 現在大多數java開發者使用的IDE都是eclipse,而且一般在一個workspace中,會有很多個專案,有些是open的,有些是關閉的。有時候eclipse在使用過程中會莫名其妙的異常中斷關閉,再開啟eclipse,選擇workspace後,會一直停留在載入的

oracle異常關閉,啟動:ORA-24324: service handle not initialized

oracle關閉異常,再次啟動時錯誤資訊如下: SQL> shutdown immediate; ORA-24324: service handle not initialized ORA-24

使用Oracle儲存過程匯入匯出資料檔案

 搞了幾天,終於把使用Oracle儲存過程匯入匯出資料做成功了。現在分享一下,供大家共同進步。在這裡我非常非常感謝“往事如夢”,以及“Oracle愛好者”上好友的幫助。     首先判斷utl_file_dir的目錄  SQL> show parameter utl_

解決Eclipse開啟閃退 Eclipse在異常關閉,啟動閃退的解決辦法

問題描述:Win7下 Eclipse編譯原本沒問題的工程時,第二天開始編譯總是通不過,後來Debug As - Android Application 除錯時出現卡死現象。工作管理員強制關閉Eclip

kettle 異常關閉重新開啟導致不能建立和開啟轉換與作業的解決辦法

     經常使用kettle的人都熟悉kettle工具的常用操作,但是,對於它出現過的很多問題卻不一定都見過,自己就是遇到過幾次,上午找答案也是亂七八糟的回答,在這裡給做一個總結的回覆。希望幫助大家。      常見的卡死的原因是因為點選某個元件後,長時間無響應只能強制關

oracle 表空間檔案達到32G手動新增資料檔案

客戶忽然打電話來說資料庫疑似出了問題,資料插不進去。我遠端登入過去一看,還真是,按照錯誤提示一查,估計是資料庫檔案大小超標了。 "ORA-01654: 索引。。。無法通過8192(在表空間。。。中)擴充套件" 原來,oracle單個數據庫檔案上限是32g。雖然我們設了引數是自動