[摘 要] 文章根據(jù)具體的數(shù)據(jù)庫管理系統(tǒng)(SYBASE ASE 12.5)分析介質(zhì)失敗后如何恢復(fù)數(shù)據(jù)庫,包括數(shù)據(jù)庫介質(zhì)失敗后的各種情況、數(shù)據(jù)全部可恢復(fù)情況的災(zāi)難恢復(fù)步驟、部分恢復(fù)數(shù)據(jù)庫數(shù)據(jù)的災(zāi)難恢復(fù)步驟等內(nèi)容。
[關(guān)鍵詞] 數(shù)據(jù)庫;介質(zhì);備份;恢復(fù)
[作者簡介] 謝聲時(shí),中國人民銀行??谥行闹校芯糠较颍盒畔踩?,海南 ???,570105
[中圖分類號] TP311 [文獻(xiàn)標(biāo)識碼] A [文章編號] 1007-7723(2012)10-0034-0002
為了數(shù)據(jù)庫的安全,我們對應(yīng)用系統(tǒng)數(shù)據(jù)制定了可行的備份策略。數(shù)據(jù)庫介質(zhì)失敗后,數(shù)據(jù)庫的恢復(fù)程度因數(shù)據(jù)庫的存放方法及備份策略的不同而不同。系統(tǒng)管理員制定每天進(jìn)行數(shù)據(jù)庫備份、每小時(shí)進(jìn)行事務(wù)日志備份的備份方案。早上8時(shí),系統(tǒng)進(jìn)行了數(shù)據(jù)庫的備份。早上9時(shí),系統(tǒng)進(jìn)行了數(shù)據(jù)庫事務(wù)日志的該天第一次備份,早上10時(shí),系統(tǒng)進(jìn)行了數(shù)據(jù)庫事務(wù)日志的該天第二次備份。早上10時(shí)后,數(shù)據(jù)庫介質(zhì)失敗造成數(shù)據(jù)庫失敗。很顯然,由于沒有備份,10時(shí)后到介質(zhì)失敗前的數(shù)據(jù)修改很可能沒法恢復(fù)。我們能否恢復(fù)最后一次執(zhí)行數(shù)據(jù)庫事務(wù)日志備份和介質(zhì)失敗點(diǎn)之間的數(shù)據(jù)庫數(shù)據(jù)修改呢?針對數(shù)據(jù)庫介質(zhì)的失敗,在最后一次數(shù)據(jù)庫事務(wù)日志備份和介質(zhì)失敗點(diǎn)之間的數(shù)據(jù)修改可能全部不能恢復(fù),也可能全部可以恢復(fù)。本文將根據(jù)具體的數(shù)據(jù)庫管理系統(tǒng)(SYBASE ASE 12.5)分析介質(zhì)失敗后如何恢復(fù)數(shù)據(jù)庫。
一、數(shù)據(jù)庫介質(zhì)失敗后的情況
數(shù)據(jù)庫介質(zhì)失敗后可分為在最后一次數(shù)據(jù)庫事務(wù)日志備份后的數(shù)據(jù)全部不能恢復(fù)、全部能恢復(fù)和需要部分恢復(fù)的情況。
(一)最后一次事務(wù)日志備份后的數(shù)據(jù)全部不可恢復(fù)
該情況下數(shù)據(jù)庫設(shè)備沒有鏡像且存放數(shù)據(jù)庫日志的設(shè)備也失敗。早上8時(shí),系統(tǒng)進(jìn)行了數(shù)據(jù)庫的備份。早上9時(shí),系統(tǒng)進(jìn)行了數(shù)據(jù)庫事務(wù)日志的該天第一次備份,早上10時(shí),系統(tǒng)進(jìn)行了數(shù)據(jù)庫事務(wù)日志的該天第二次備份。10時(shí)后,數(shù)據(jù)庫介質(zhì)失敗造成數(shù)據(jù)庫失敗。由于沒有備份,10時(shí)后到介質(zhì)失敗前的數(shù)據(jù)修改全部沒法恢復(fù),數(shù)據(jù)庫的災(zāi)難恢復(fù)最多能恢復(fù)到最后一次事務(wù)日志備份前的數(shù)據(jù)。
(二)最后一次事務(wù)日志備份后的數(shù)據(jù)全部可恢復(fù)
該情況下數(shù)據(jù)庫設(shè)備有鏡像或者存放數(shù)據(jù)庫日志的設(shè)備沒失敗。早上8時(shí),系統(tǒng)進(jìn)行了數(shù)據(jù)庫的備份。早上9時(shí),系統(tǒng)進(jìn)行了數(shù)據(jù)庫事務(wù)日志的該天第一次備份,早上10時(shí),系統(tǒng)進(jìn)行了數(shù)據(jù)庫事務(wù)日志的該天第二次備份。10時(shí)后,數(shù)據(jù)庫介質(zhì)失敗造成數(shù)據(jù)庫失敗。如果數(shù)據(jù)庫設(shè)備有鏡像,則10時(shí)后到介質(zhì)失敗前的數(shù)據(jù)修改沒受介質(zhì)失敗的影響,鏡像設(shè)備仍能繼續(xù)工作。如果存放事務(wù)日志的設(shè)備沒失敗,則10時(shí)后到介質(zhì)失敗前的關(guān)于數(shù)據(jù)修改的事務(wù)日志沒受介質(zhì)失敗的影響,仍可進(jìn)行事務(wù)日志的備份。數(shù)據(jù)庫的災(zāi)難恢復(fù)能恢復(fù)到介質(zhì)失敗前的所有數(shù)據(jù)。
(三)最后一次事務(wù)日志備份的數(shù)據(jù)僅需要部分恢復(fù)
該情況下用戶操作失誤破壞數(shù)據(jù)庫數(shù)據(jù)。早上8時(shí),系統(tǒng)進(jìn)行了數(shù)據(jù)庫的備份。早上9時(shí),系統(tǒng)進(jìn)行了數(shù)據(jù)庫事務(wù)日志的該天第一次備份,早上10時(shí),系統(tǒng)進(jìn)行了數(shù)據(jù)庫事務(wù)日志的該天第二次備份。10時(shí)30分一個(gè)用戶由于操作失誤刪除了一個(gè)重要的數(shù)據(jù)表中的數(shù)據(jù)。事后,我們發(fā)現(xiàn)重要的數(shù)據(jù)被刪除了。這時(shí),我們考慮的是部分的數(shù)據(jù)恢復(fù),僅將數(shù)據(jù)庫數(shù)據(jù)恢復(fù)到早上10時(shí)30分。
二、數(shù)據(jù)全部可恢復(fù)情況的災(zāi)難恢復(fù)步驟
數(shù)據(jù)全部可恢復(fù)情況的災(zāi)難恢復(fù)步驟為:
1. 執(zhí)行dump transaction with no_truncate命令備份數(shù)據(jù)庫的事務(wù)日志。其中,執(zhí)行dump transaction with no_truncate命令的語法格式為dump transaction database_name to device_name with no_truncate。如dump transaction safesdb to dump_salesdb_log with no_truncate。
2. 刪除壞的數(shù)據(jù)庫。
3. 重新創(chuàng)建新的數(shù)據(jù)庫。
4. 用load database 命令恢復(fù)最新的數(shù)據(jù)庫備份。按備份時(shí)間順序執(zhí)行事務(wù)日志的恢復(fù),其中最后一個(gè)恢復(fù)的事務(wù)日志是由帶with no_truncate參數(shù)的備份生成的。
三、部分恢復(fù)數(shù)據(jù)庫數(shù)據(jù)的災(zāi)難恢復(fù)步驟
部分恢復(fù)數(shù)據(jù)庫數(shù)據(jù)的數(shù)據(jù)操作即按時(shí)間點(diǎn)恢復(fù)數(shù)據(jù)庫數(shù)據(jù)。按時(shí)間點(diǎn)恢復(fù)數(shù)據(jù)庫的操作主要是一個(gè)load transation命令執(zhí)行過程,它可以通過事務(wù)日志中的特別的時(shí)間點(diǎn)依據(jù)事務(wù)日志恢復(fù)數(shù)據(jù)庫數(shù)據(jù)。使用load transaction命令恢復(fù)分?jǐn)?shù)據(jù)庫數(shù)據(jù)命令的語法格式為load transaction database_name from device_name with until_time=\"date-time\"其中,date-time的格式為“month,day,year hh:mm:ss:ms [AM|PM]”。當(dāng)需要按時(shí)間點(diǎn)恢復(fù)數(shù)據(jù)庫數(shù)據(jù)時(shí),可按以下步驟進(jìn)行:
1. 使用sp_who命令列出正在使用數(shù)據(jù)庫的用戶,并通知在線用戶退出系統(tǒng)。
2. 設(shè)置數(shù)據(jù)庫操作,將數(shù)據(jù)庫的模式設(shè)置為單用戶模式。
sp_dboption salesdb, \"single user\", true
use salesdb
checkpoint
3. 使用dump transaction命令備份數(shù)據(jù)庫的事務(wù)日志。
dump transaction salesdb to dump_salesdb_log。
4. 使用load database命令恢復(fù)數(shù)據(jù)庫的最新數(shù)據(jù)庫備份。
load database salesdb from dump_salesdb_db。
5. 使用load transaction命令按順序恢復(fù)最后一次備份數(shù)據(jù)庫之后的事務(wù)日志備份。
6. 使用帶參數(shù)\"until_time\"的load transaction命令恢復(fù)帶有失誤操作記錄的事務(wù)日志,使數(shù)據(jù)庫事務(wù)日志恢復(fù)到失誤操作前的時(shí)間點(diǎn)。
load transactionsalesdb from dump_salesdb_log
with until_time=\"Dec 31,2006 11:59:59:650PM\"。
7. 使用checkstorage檢查和糾正恢復(fù)后的數(shù)據(jù)庫的一致性。
dbcc checkstorage (salesdb)。其中,checkstorage是檢查數(shù)據(jù)庫一致性的命令。該命令的執(zhí)行需要一些準(zhǔn)備工作,包括規(guī)劃用于checkstorage操作的\"dbccdb\"的資源、配置\"number of worker processes\"和\"memory per worker process\"服務(wù)器配置、安裝\"dbccdb\"數(shù)據(jù)庫、增加工作空間片段、創(chuàng)建數(shù)據(jù)庫\"dbccdb\"的工作空間、指定目標(biāo)數(shù)據(jù)庫特征、估計(jì)配置等工作。
8. 備份恢復(fù)后的數(shù)據(jù)庫。
dump database salesdb to dump_salesdb_dev。
9. 將數(shù)據(jù)庫的單用戶模式更改為非單用戶模式。
sp_dboption salesdb, \"single user\", 1。
[參考文獻(xiàn)]
[1]Performance and Tuning:Configuring Adaptive Server Enterprise Volume 2.