武麗君 張文 王國鋒 郭翃利 胡奇
(北京機械設備研究所 北京市 100854)
在制造行業企業中,產品數據管理(以下簡稱PDM)是以軟件技術為基礎、以產品為核心、實現對產品相關的數據、過程、資源一體化集成管理技術[1],通過產品結構管理、文檔版本變更管控、模型協同設計管理等功能有效支撐了產品設計領域研發工作的開展,被視作企業的核心系統。PDM 中存儲、管理的產品設計等業務數據是企業的核心數據,是企業賴以生存的數據資產。一旦系統出現問題時如果有較長時間的數據丟失將對企業形成較大影響、造成巨大損失。高性能的數據備份和災難恢復技術能充分保護系統中有價值的信息,保證災難發生時系統仍能正常工作[2]。因此基于RTO 和RPO 衡量指標的PDM 系統的數據備份與恢復是企業信息化的重要工作內容,日益受到企業的重視。
PDM 系統的備份恢復分為三部分:應用程序、電子倉庫和基于Oracle 的數據庫。前兩個主要是基于文件系統的備份和恢復,過程相對簡單、穩妥。基于Oracle 的數據庫通過康孚備份恢復軟件(以下簡稱康孚)進行備份、恢復,過程較為復雜,是PDM 系統備份恢復的關鍵內容。
為滿足新的業務需求,啟動了PDM 升級改造項目。升級后的PDM 系統采用Windchill 10+Oracle 11g 的基礎框架進行構建。由于PDM 系統為核心關鍵系統,按照信息化項目建設要求,項目上線前需要對備份恢復策略(備份恢復手冊)進行驗證。系統升級后為了減少停機備份對業務帶來的影響,根據實施廠商建議,項目團隊擬停用原有冷備份策略(即停應用、停數據庫服務后的全量數據備份)采用新的備份策略,即擬通過康孚軟件對數據庫采用每周日全量熱備、周一到周六進行增量熱備的周備份策略。
按照備份恢復手冊,對升級改造項目進行備份恢復驗證。備份恢復的環境如下:
(1)數據備份對象為測試系統(有一定量的測試數據);
(2)恢復目標(目標機)所需環境與測試系統一致;
備份恢復的具體過程如下:
(1)利用康孚按周備份策略對PDM 實施一周備份計劃,周日采用全量熱備、周一到周六進行增量熱備??垫谲浖@示備份全部成功;
(2)在執行Oracle 的周六增量后,對應用程序、電子倉庫進行備份,成功完成;
(3)康孚對Oracle 備份在進行數據恢復,康孚顯示恢復成功;
(4)對應用程序和電子倉庫進行了相應恢復;
(5)啟動系統,用戶登錄PDM 系統進行簡單常規操作,未見異常,經查詢,數據也恢復到了指定時間點,初步判定本次恢復成功;
(6)數據有效性驗證。為進一步確保數據的有效性,將恢復到備機上的PDM 系統停機,并進行expdp 操作,全部導出數據,并重新創建用戶進行impdp 導入操作,提示有壞塊,導入失敗。使用Oracle 的DBV 工具對數據文件進行逐個檢查,多個文件報多行如下錯誤:“DBV-00201:無效重做應用程序的塊 DBA 50042120 已標記為損壞”,說明了恢復的數據文件存在壞塊。備份恢復整體失敗。
(7)對測試系統進行dbv 壞塊校驗,結果顯示系統數據無壞塊。此次數據備份恢復失敗。
根據數據備份恢復驗證的結果,最終判定該備份恢復方案無效。
由于上述備份恢復過程中,康孚沒有報錯信息,隨后項目團隊從如下兩個方面開展進一步的工作。
(1)將測試系統停機,從Oracle 中導出DMP 格式的數據文件,導入到目標機Oracle 數據庫中,系統成功啟動后,對數據庫文件進行dbv 壞塊校驗,結果顯示系統數據無壞塊。說明采用較長時間的expdp/impdp 方式進行備份恢復有效。
(2)再次按照備份恢復手冊執行了備份恢復,恢復后目標機的數據庫中數據文件依然存在壞塊,并且壞塊分布的數據文件與上次不同。由于對基于康孚的備份恢復過程日志進行深入分析發現均沒有報錯信息,所以說明康孚執行備份恢復的運行過程是沒有問題的,但是通過康孚實現備份恢復是行不通的。
2.2.1 發現問題原因
經以上的問題復盤分析:
(1)證明源數據無問題;
(2)康孚執行過程沒有問題。
分析將問題的原因定位在康孚軟件備份恢復采用的技術機制與expdp/impdp 不同這一點上,二者不同之處是康孚軟件備份恢復采用的是Oracle 的RMAN 技術。
RMAN(Recovery Manager)是Oracle 提供的備份恢復工具,不同于expdp/impdp 的邏輯備份,RMAN 是基于Oracle block(磁盤OS 塊組成)級別的物理備份,支持對數據文件、控制文件、參數文件、歸檔重做日志和RMAN 備份文件進行備份和恢復[3]。開始備份時,直接讀取磁盤上的Oracle block,并寫入到指定位置進行備份,同時將備份過程中產生的歸檔重做日志進行備份,最后備份控制文件、參數文件(可選)。開始恢復時,先還原控制文件,再還原數據文件,并運用備份的歸檔重做日志進行數據的恢復,使數據文件與控制文件時間一致,進而打開數據庫,完成數據恢復。如圖1 所示。
通過Oracle 的RMAN 備份恢復原理推斷問題鎖定在歸檔重做日志的恢復上,初步斷定是數據庫中有部分Oracle 對象設置為不記錄日志模式,因此歸檔重做日志中未記錄這些對象的變化情況。這些數據文件在備份時,由于發生了變化,控制文件記錄了數據塊的最新時間狀態,但并沒有形成相應的歸檔重做日志。在恢復數據時,無法運用重做日志,將數據前滾到控制文件指定的時間點,導致數據備份恢復的內容與原備份數據不一致,產生壞塊。

圖1:RMAN 恢復原理
根據上述分析,對測試機的Oracle 數據庫的對象(表)進行檢查,發現數據庫中確實有25 張表的日志狀態Logging 是No,即不記錄日志:

具體不記錄日志的表如圖2 所示。
至此找出問題所在的原因。
2.2.2 數據備份恢復
現針對基于Oracle 數據庫的上述問題原因導致數據備份恢復異常進行深入分析。數據恢復時先使用備份文件進行數據還原,再運用日志,將數據庫文件從還原點前滾到指定的恢復時間點,完成數據恢復。具體的原理如下:
(1)恢復原理舉例說明。在Oracle 中進行操作,Oracle 會記錄一條聯機重做日志(Redo日志),Redo日志寫滿后,會自動進行歸檔,形成歸檔重做日志,以下將兩類日志統稱為日志。進行數據備份時,將當時的數據記錄在備份文件中,如果要恢復備份完成后的數據,就需要先還原備份文件,再運用日志,前滾數據,實現數據恢復。如原來某表中的一個用戶名字段在數據庫中存的內容為scott,并進行了備份(1 點),那么備份文件中該字段內容為scott。如果備份后對數據庫進行了操作,該字段內容變為tom(2 點),數據庫會自動記錄該操作的日志,記錄數據由scott 到tom 的日志。假設備份完成后數據庫奔潰,需要進行數據恢復。此時,備份文件中該字段的內容為scott,要還原數據(即將數據更新到備份結束時間2 點),就需要運用日志,將1 點以后的操作再“模擬操作”一遍,即進行數據前滾,那么字段內容就變成了2 點的狀態tom。
(2)PDM 不記錄日志產生壞塊的簡要原理說明。假設數據庫中包含某數據塊A,并對其進行備份和恢復。由于是熱備份,在備份的過程中,數據還在不斷地變化。假設在1:00 時對A 進行了備份,形成A1(假設A1 記錄A 數據塊1 點的數據內容),在2:00時完成全部的數據庫備份,此時A 的數據內容已經發生了變化,記為A2。此時,如果要將數據庫恢復到2:00,由于在1:00 到2:00 之間,A 數據塊被修改,如果需要恢復到2:00,那么需要對數據塊A在A1(物理備份塊)的基礎上運用Oracle日志。如果記錄了日志,即可重新前滾A1 到A2 的數據變化,將其數據狀態前滾到2:00 時的狀態A2,此時完成了數據庫的恢復。如圖3 所示。
但由于PDM 對數據塊A 設置了不記錄日志,并且在1:00 到2:00過程中A1 確實發生了變化,那么就無法運用日志將A1 前滾到A2的狀態,因此,數據塊無法恢復到2 點的數據內容,導致產生了損壞。
同樣的情景,如果是停機冷備份,那么A 文件在備份開始到結束時不發生變化,也不會產生聯機重做日志/歸檔重做日志,備份的全部數據都是停機時刻的數據,數據一致,不需要運用日志,數據也具有一致性,因此可以成功恢復數據。
根據導致問題的原因,項目團隊從源Oracle 數據庫變更參數配置和修改備份策略兩方面給出了解決方案。
3.1.1 將源Oracle 數據庫改為記日志
(1)方案:變更Oracle 數據庫參數配置,將不記日志的對象改為記日志,或修改數據庫參數FORCE_LOGGING 為YES,使所有數據庫都記日志,仍然采用既定備份策略。
(2)驗證:
1.將測試機Oracle 數據庫中配置參數FORCE_LOGGING 為YES;
2.按照份恢復手冊執行備份恢復,恢復后目標機系統成功啟動后,對數據庫文件進行dbv 壞塊校驗,結果顯示系統數據無壞塊;
3.該備份恢復方案有效。
3.1.2 將備份策略改為冷備份
(1)方案:對備份恢復策略在備份環節進行變更,即對源Oracle 數據庫進行停機冷備份(全量冷備份和增量冷備份相結合的方式進行備份),數據恢復策略不變。
(2)驗證:
1.將測試機Oracle 數據庫中配置參數不變;
2.通過康孚對測試機Oracle 數據庫進行停機全量冷備份,備份成功;通過康孚將備份數據恢復至目標機,系統成功啟動后,對數據庫文件進行dbv 壞塊校驗,結果顯示系統數據無壞塊。恢復成功;
3.通過康孚對測試機Oracle 數據庫進行停機增量冷備份,備份成功;通過康孚將備份數據(全量冷備份+三次增量冷備份)恢復至目標機,系統成功啟動后,對數據庫文件進行dbv 壞塊校驗,結果顯示系統數據無壞塊?;謴统晒?;
4.該備份恢復方案有效。
針對上述兩種備份恢復方案,項目團隊均通過實踐操作驗證了有效性,確認了恢復后數據的有效、可用。兩種方案對比如下:
(1)由于對系統操作記錄大量日志,所以第一種方案會較大程度影響系統的運行和響應速度;
(2)需要利用空閑時間,對系統(包括數據庫)進行定時起停,會造成系統特定時間段(如晚上11 點到次日早上六點)無法提供服務。
經過項目團隊對比以上兩種方案引發的影響,確定采用第二種方案進行系統備份恢復。
按照第二種方案制定的備份恢復手冊執行半年,備份無異常;期間進行三次恢復驗證均成功。

圖2:不記錄日志的表

圖3:數據塊恢復原理
在企業信息化工作中,作為支撐核心業務的PDM 系統數據備份和恢復由于過程復雜,加上數據量龐大,所以非常重要但又容易異常,應當引起足夠重視。此次工作不僅對項目完成前的災難恢復進行了驗證、完善,消除了隱患,更為重要的是企業級整體備份與恢復提供了可借鑒的寶貴性。