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