摘要:遼河油田開發(fā)生產數據庫經多年建設與完善,數據庫內容已涵蓋科研、生產、管理等多個專業(yè),海量的信息資源為DBA有效管理、維護數據庫系統(tǒng)提出了嚴格要求。本文通過長期實際工作積累和體會,介紹作為DBA通過制定和實施周密的數據庫備份、恢復策略,以保證油田開發(fā)生產數據庫長期安全高效平穩(wěn)運行。
關鍵詞:生產 數據 備份 恢復
前 言
隨著辦公自動化和電子商務的飛速發(fā)展,企業(yè)對信息系統(tǒng)的依賴性越來越高,數據庫作為信息系統(tǒng)的核心擔當著重要角色,當我們不斷的將所有重要生產數據都存儲其中,使用時總希望數據庫的內容是可靠的、正確的、完整的。但由于計算機系統(tǒng)的故障(包括機器故障、介質故障、誤操作等),數據庫有時也能遭到破壞。由此,制定一整套適合企業(yè)自己的數據庫備份、恢復策略是十分必要,也是企業(yè)信息系統(tǒng)安全、穩(wěn)定運行的保證。
一、數據庫應用情況
遼河油田網絡經過不斷的改造升級,主干全部為千兆,桌面達千兆/百兆,在高效的網絡平臺支持下,數據庫服務器集中在油田信息中心統(tǒng)一管理,數據全部由數據源頭直接進庫;為便于規(guī)范化管理,通過應用系統(tǒng)升級改造,將SQL SERVER、MYSQL等數據庫統(tǒng)一到ORACLE 920數據庫平臺。目前各采油廠開發(fā)生產數據庫支持的應用覆蓋了油田地質靜態(tài)、開發(fā)動態(tài)、地質月報、監(jiān)測化驗、天然氣開發(fā)、采油生產、井下作業(yè)、注汽管理、油氣集輸等專業(yè)系統(tǒng)及綜合辦公應用系統(tǒng);通過信息整合及二次開發(fā),拓展了油水井施工設計、新井措施井運行跟蹤、生產調度等應用,海量的信息存儲以每日近20M的速度不斷增加。
龐大的數據庫支持著油田各專業(yè)系統(tǒng)的運行,數據資源的寶貴在企業(yè)中越來越被廣泛認可,為及時反映油田每日的科研、開發(fā)、生產、管理動態(tài),數據庫要求7×24小時不間斷運行,并且要保證信息安全,盡可能減少一切因素帶來的信息損失。這些都給DBA人員提出了嚴格的工作要求,要求數據庫管理員制定周密的數據備份、恢復策略。
二、數據庫常見故障分析
開發(fā)生產數據的安全性受到油田技術、管理人員和各級領導的高度重視,我們也做了一些有預見性的防護工作,但這也不能完全阻止數據庫故障的發(fā)生。數據庫的錯誤和故障是復雜多樣的,有些故障可直接導致數據庫的無法使用,通過多年應用實踐,并查閱相關資料,總結數據庫常見的故障有:
1、用戶失誤。用戶失誤刪除一行或刪除表。
2、語句失效。可以定義為Oracle無法執(zhí)行某一條SQL語句。
3、進程失效。進程失效是進程異常終止,這有可能是Oracle本身引起,也可能是用戶(如用戶從SQL*PLUS發(fā)出一個C命令)引起的。
4、網絡失效。網絡失效可能在使用多個數據庫服務器時,通過通信網絡連結的客房/服務器配置或分布式數據庫系統(tǒng)時產生。
5、實例失效。實例失效可能由物理(硬件)或設計(軟件)問題引起。例如,當某一數據庫后臺進程檢測到硬盤上有問題無法寫入時,后臺進程就會全部終止。
6、介質失效。介質失效是最危險的錯誤,不僅由于沒有執(zhí)行合適的備份過程,可能會丟失數據,而且它通常比其它失效的恢復時間更長。介質失效的典型例子是磁盤控制器失效或磁頭損壞,這將導致丟失該磁盤上所有Oracle數據庫文件。
通過分析發(fā)現,在常見錯誤及故障中,輕者可導致生產數據丟失,嚴重的可失掉全部數據,這是非?膳碌氖虑,后果將很嚴重,所以做好開發(fā)生產數據庫的備份刻不容緩。
三、備份策略及實施
為了最大限度的進行數據庫恢復,保證數據庫安全運行,就要制定一套確實可行的備份與恢復策略,要選擇最合理的備份方法,來防止介質失敗導致用戶數據丟失。而Oracle數據庫自身就提供了幾種很好的備份工具和方法:
1、物理備份。物理備份又可分為非歸檔的操作系統(tǒng)備份和歸檔的操作系統(tǒng)備份(Hot Backup),用歸檔的操作系統(tǒng)備份方法可以將數據庫恢復到介質失敗后的失敗點,而其它方法只能將數據庫恢復到介質失敗的最后一次備份點。
2、邏輯備份。邏輯備份(logical backup)是創(chuàng)建一個直接的數據庫備份文件,它不能與歸檔日志文件組合使用。備份時使用Export工具進行備份,使用Import工具進行恢復,其方法雖簡單易行,但備份恢復時間較長。
我們制定的備份目標是:“正確備份,安全存放”。綜合這三種備份類型的利弊,根據各采油廠開發(fā)生產數據庫實際運行情況及數據量大小,決定采用歸檔的操作系統(tǒng)備份(Hot Backup)和邏輯備份(Export)相結合的策略,并把備份時間安排在數據庫使用率最低、網絡負擔最輕的中午和晚間進行。
我們在較好的硬件支持環(huán)境下,實現了雙/多機、異地存放備份數據構想。目前的開發(fā)生產數據庫服務器采用多臺SUNV880服務器,其中一部分正常運轉,另一部分作為備用服務器。把備份時間安排在每天12:00和19:00各進行一次全庫方式的邏輯備份(Export),同時為彌補全庫方式邏輯的備份文件大、恢復速度慢等不足,在全庫Export后對開發(fā)動態(tài)、采油生產、井下作業(yè)等更新率較高的數據進行用戶方式的Export,然后將備份數據拷貝到備份服務器上。
(1)每晚24:00對數據庫所有表空間和控制文件做聯機熱備份,然后將備份數據拷貝到信息中心內的備用服務器上;
(2)每半年(月數據處理完)將全庫邏輯備份(Export)數據刻到光盤上,送檔案室保存;
(3)每月10日左右在備用服務器上對備份數據進行恢復測試,以檢驗其備份的正確性。
圖1 備份數據存放流程圖
3、Hot Backup(熱備份)。
(1)改歸檔方式。數據庫運行過程中對日志的處理方式不同,Oracle數據庫可運行在兩種不同的方式下,即非歸檔方式(NOARCHIVELOG)和歸檔方式(ARCHIVELOG)。Oracle數據庫缺省的運行方式是非歸檔方式,但我們備份策略中選擇歸檔的操作系統(tǒng)備份(Hot Backup),所以首先要改變數據庫的運行方式。修改數據庫的參數文件,用ORACLE的管理工具Enterprise Manager Console更直觀、更方便,分別改動以下(圖2)、(圖 3)中的參數。
圖2 更改數據庫參數文件界面圖
圖3 更改數據庫參數文件界面圖
(2)重啟數據庫啟動歸檔方式
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database open;
(3)聯機備份表空間
首先標記聯機表空間回收的開始
SQL> alter tablespace 表空間名 begin backup;
用操作系統(tǒng)命令備份數據文件
最后標記聯機的表空間回收結束
SQL> alter tablespace 表空間名 end backup;
循環(huán)用此方法將數據庫中所有表空間備份出來。
(4)聯機備份控制文件
SQL> alter database backup controlfile to '文件名' reuse;
每天晚間讓系統(tǒng)自動執(zhí)行第3步聯機備份表空間和第4步聯機備份控制文件,將數據庫中所有數據文件和控制文件備份出來,然后拷貝到異地的服務器上,并每隔一小時向異地服務器上拷貝一次歸檔的日志文件。
4、Export(邏輯備份)。命令格式如下:
Exp 用戶名/口令 file=db_back log= exp_back.log bueeer=4096 full=y
四、恢復方法
數據庫的恢復可分為兩大類:完全恢復、不完全恢復。完全恢復指將數據庫恢復到發(fā)生故障的時間點,不丟失任何數據。不完全恢復指將數據庫恢復到發(fā)生故障前的某一個時間點,此時間點以后的所有改動將會丟失。Oracle數據庫恢復過程分兩步進行,首先把存放在重做日志文件中的所有重做運用到數據文件,之后對重做中所有未提交的事務進行回滾,這樣所有數據就恢復到發(fā)生災難那一時刻了。數據庫的恢復只能在發(fā)生故障之前的數據文件上運用重做,將其恢復到故障時刻,而不能將數據文件反向回滾到之前的某一個時刻。
我們設計數據庫恢復方案時,充分結合ORACLE恢復的特點和以往數據庫出現的錯誤,以及我們能夠預想到的故障,把這些錯誤進行分類,然后對備份策略進行恢復測試。因為對數據庫的控制文件和聯機日志文件都在不同的磁盤上做了鏡像,所以對這兩種類型的文件的恢復基本上不用去考慮了,下面主要說一下用戶級錯誤、數據文件、所有文件丟失的恢復方法。
1、用戶誤操作的恢復。由于用戶誤操作造成數據及表的丟失,其補救措施主要是導入最新的邏輯備份。命令格式:
IMP 用戶名/口令 file=db_back log= imp_back.log bueeer=4096 fromuse=cxxt touser=cxxt tables=表名
2、恢復數據文件。當發(fā)生介質失效時,該磁盤上所有Oracle數據庫文件將丟失,當介質修復后,需要對該磁盤上的數據庫文件進行恢復(只描述數據文件的恢復過程)。
·關閉數據庫:
SQL> shutdown immediate
·啟動數據庫到MOUNT方式:
SQL> startup mount
·脫機丟失的數據文件:
SQL> alter database datafile ‘home3/oradata/cxxt.dbf’ offline;
然后拷貝此數據文件的熱備;
·恢復數據文件,然后將其聯機:
SQL> recover datafile ‘home3/oradata/cxxt.dbf’;
SQL> alter database datafile ‘home3/oradata/cxxt.dbf’ online;
·打開數據庫:
SQL> alter database open;
3、將數據庫恢復到另一臺服務器上。當發(fā)生介質失效,而又不能及時修復時,我們會將數據庫恢復到另一臺備份服務器上。
·關閉數據庫
SQL> shutdown immediate
拷貝所有數據文件和控制文件的熱備份到新服務器上(數據庫文件所存放的目錄最好與損壞的數據庫相同)。
·啟動數據庫到MOUNT方式
SQL> startup mount
·恢復數據庫,然后打開數據庫
SQL> recover database until cancel using backup controlfile;
SQL> alter database open resetlogs;
4、幾點注意事項:
(1) 本文討論所有情況的默認前提是數據庫運行在歸檔(ARCHIVELOG)方式下,并只涉及到一般常見的情況和最基本的恢復方法。
(2) 一旦數據庫發(fā)生災難,最好在進行恢復之前做一次完全的冷備份,以便在進行恢復時產生差錯還可以進行補救。其實很大一部分數據丟失是由于不正確的恢復操作所引起的。
(3) 當數據庫完成恢復之后,尤其是使用resetlogs選項打開數據庫之后,要馬上備份數據庫。
(4) 要特別注意當進行數據庫完全恢復,從發(fā)生故障的時間點前的備份中恢復損壞文件時,一定不要使備份中的redo log文件覆蓋當前的redo log文件,否則就只能進行不完全恢復并,且要丟失一部分數據了。
(5) 按ORACLE公司建議,做聯機日志和控制文件的鏡像。
五、結束語
Oracle 提供的備份、恢復功能非常健全,方式、方法也很多,給DBA提供了較大的選擇空間,備份計劃越好,在恢復過程中選擇的余地越大。以上談到的備份、恢復策略及方法主要是根據遼河油田實際生產情況,綜合企業(yè)信息資源及員工情況而制定的,通過實際驗證能夠適應我廠開發(fā)生產數據庫的運行狀況,且簡便、易行,但距7×24小時不間斷運行的要求還有差距,能夠實現真正的雙機容錯備份也是我們的一個愿望。從企業(yè)信息化角度來講,油田開發(fā)生產數據庫的安全機制不僅僅是數據庫管理員、信息中心或是信息工作者的職責,更是企業(yè)硬件環(huán)境、員工素質、協作精神等多方面因素綜合考驗。
參考文獻
[1](美)瓦普瑞(Velpuri,K.)等.何江華等編譯.Oracle8備份與恢復手冊.第一版.北京:機械工業(yè)出版社,1998.10.
[2]滕永昌.Oracle9i數據管理員. 2002.02
轉載請注明來自:http://www.jinnzone.com/jisuanjixinxiguanlilw/15588.html