摘要本文探討了基於 IBM DB 的各種數據庫備份與恢復策略並附有完整的實驗步驟本文試圖通過具體的實驗使讀者領會各種數據庫備份方式的優劣和異同並掌握 IBM DB 的數據庫備份與恢復技術
若無特殊說明以下數據庫備份與恢復的試驗環境均為 Windows XP + IBM DB V 企業版同樣的語句也在 AIX + IBM DB V 上驗證通過
一 數據庫備份的重要性
在信息日趨發達的時代數據顯得尤其重要如何保障數據的完整性和安全性呢?如何避免數據災難事故的發生呢?數據庫備份作為數據安全和完整最有利保障手段的重要性就不言而喻了
數據庫備份的重要性主要體現在
提高系統的高可用性和災難可恢復性(在數據庫系統崩潰的時候沒有數據庫備份怎麼辦!?)
使用數據庫備份還原數據庫是數據庫系統崩潰時提供數據恢復最小代價的最優方案(總不能讓客戶重新填報數據吧!?)
沒有數據就沒有一切數據庫備份就是一種防范災難於未然的強力手段(沒有了數據應用再花哨也是鏡中花水中月)
對於DBA來說最首要也是最重要的任務就是數據庫備份
二 DB 數據庫備份的方式與分類
按照數據庫備份對數據庫的使用影響來劃分
A聯機備份(也稱熱備份或在線備份)
B脫機備份(也稱冷備份或離線備份)
說明聯機備份和脫機備份最大的不同在於聯機備份數據庫時數據庫仍然可以供用戶使用而脫機備份數據庫則不行脫機備份數據庫時必須斷開所有與數據庫有連接的應用後才能進行
按照數據庫的數據備份范圍來劃分
A完全備份
B增量備份
說明完全備份數據庫是指備份數據庫中的所有數據而增量備份只是備份數據庫中的部分數據至於增量備份到底備份哪些數據稍候會提到
增量備份的兩種實現方式
A增量備份(也稱累計備份)
Bdelta備份
說明這兩種備份方式的嚴格定義如下
增量備份是自最近成功的完全備份以來所有更改的數據的備份
delta 備份則是上一次成功的完全增量或 delta 備份以後所做更改的數據的備份
這裡請讀者們仔細的看上面兩個增量備份方式的定義注意這兩種備份方式的細微差別這裡我們舉一個例子來說明
假設有一個數據庫它每天都有部分數據在發生變化我們星期一晚上對該數據庫做了一次完全備份星期二晚上對該數據庫做了一次增量備份A(注這裡的增量備份是指累計備份下同)星期三晚上又做了一次增量備份B星期四則做了一次delta 備份
那麼我們可以得出以下結論
星期一的數據庫備份包含了所有的數據
星期二沒有變動過的數據沒有發生備份在星期二變動過的數據會備份並且備份到增量備份A中
星期三的備份中含有自星期一完全備份以來發生過變動的所有數據包含了星期二和星期三發生過變動的數據顯然增量備份A 被 增量備份 B 包含
星期四做的是delta備份注意它會也只會備份自星期三備份之後變動過的數據
三 DB 備份文件的結構介紹
在不同的操作系統下DB 的備份文件的結構是不同的這裡概要地介紹一下
Windows 操作系統下的數據庫備份文件結構
說明Windows 操作系統下的數據庫備份文件是嵌套在一系列文件夾之下的特殊結構上例中D:\DB_Train 是指備份目錄TESTDB 是指數據庫名稱為 TESTDBDB 是指實例名稱NODE 是指節點名稱CATN 是指編目名稱 是指備份發生的年月日形如YYYYMMDD是指備份發生的時間精確到秒也就是指 點 分 秒形如HHMMSS最後的 則是備份文件的一個序列號
Unix 操作系統下的數據庫備份文件結構
說明Unix 操作系統下的數據庫備份文件就是一個文件上例中HTDC 是指數據庫名稱dbinst 是指實例名稱NODE 是指節點名稱CATN 是指編目名稱 是指備份發生的具體時間形如YYYYMMDDHHMMSS同樣地它的時間精確到秒也就是指 年月日點分秒發生備份最後的 則是備份文件的一個序列號
四 DB 數據庫備份實驗(附完整命令腳本清單)
DB 數據庫實驗准備工作
()Step創建測試數據庫 TestDB
腳本清單
CREATE DATABASE TestDB
ON D:
USING CODESET GBK TERRITORY CN
WITH Pjjs Test DB;
}
()Step創建數據庫管理表空間 Data_SP(注意路徑如果沒有請創建)
腳本清單
CREATE REGULAR TABLESPACE Data_SP
PAGESIZE K
MANAGED BY DATABASE
USING ( FILE D:\DB\Container\TestDB\UserData\UserData )
BUFFERPOOL IBMDEFAULTBP;
說明上面的腳本創建了一個名為 Data_SP 的數據庫管理表空間該表空間使用的緩沖池為 IBMDEFAULTBP存儲路徑為 D:\DB\Container\TestDB\UserData\存儲文件名為 UserData大小為 * K = M頁大小為 K
()Step創建測試表 TestTable 並插入測試數據
腳本清單
CREATE TABLE TestTable
(
ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH INCREMENT BY NO CACHE )
Message VARCHAR()
PRIMARY KEY(ID)
)IN Data_SP;
插入測試數據 INSERT INTO TestTable(Message) VALUES(測試表建立成功);
說明建立測試表並插入數據是為了稍候驗證數據庫恢復的時候用的
()Step創建測試表 TestTable 並插入測試數據
腳本清單
CREATE TABLE TestTable
(
ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH INCREMENT BY NO CACHE )
Message VARCHAR()
PRIMARY KEY(ID)
)IN Data_SP;
插入測試數據
INSERT INTO TestTable(Message)
VALUES(測試表建立成功);
DB 數據庫脫機備份與恢復實驗
腳本清單
Step完全備份數據庫(脫機備份時間戳記為 )
db backup db TestDB to D:\DB_Train
Step模擬災難強制刪除數據庫
db drop db TestDB
Step根據該數據庫完全備份還原數據庫
db restore db TestDB from D:\DB_Train taken at
DB 數據庫增量備份與恢復實驗
腳本清單
數據庫增量備份以及還原實驗
修改數據庫參數 TrackMod 使之支持數據庫進行增量備份
db update db cfg using TrackMod YES
更改參數後必須完全離線備份數據庫(脫機備份時間戳記為 )
db backup db TestDB to D:\DB_Train
插入測試數據
INSERT INTO TestTable(Message)
VALUES(開始增量數據庫備份測試);
開始增量備份(脫機備份時間戳記為 )
db backup db TestDB incremental to D:\DB_Train
刪除數據庫模擬數據災難
db drop db TestDB
首先還原至完全離線備份狀態
db restore db TestDB from D:\DB_Train taken at
還原至增量離線備份狀態
db restore db TestDB incremental automatic from D:\DB_Train taken at
注意上述語句中有一個 automatic 它表示無論有多少個增量備份系統將全自動檢索恢復數據庫的順序並自動恢復數據庫如果沒有 automatic 則需要多次手動恢復數據庫很麻煩而且容易出錯
Step根據該數據庫完全備份還原數據庫
db restore db TestDB from D:\DB_Train taken at
還原數據庫後查詢測試表數據檢驗數據是否恢復成功
DB 數據庫聯機機備份與恢復實驗
說明聯機備份數據庫可以使數據庫在備份的同時仍然保持在可用狀態要讓數據庫支持聯機備份必須更改數據庫的日志歸檔方式在脫機備份模式下數據庫采用循環日志方式記錄數據庫日志在聯機備份模式下數據庫則采用歸檔日志的方式備份數據庫日志另外對於聯機備份的數據庫來說活動日志和歸檔日志就很重要了一定要經常備份保存
腳本清單
數據庫聯機備份以及還原實驗
連接至數據庫並插入測試數據
db connect to TestDB
插入測試數據
INSERT INTO TestTable(Message)
VALUES(開始聯機數據庫備份測試完全備份);
修改數據庫參數使之支持在線聯機備份
db update db cfg for TestDB using logretain on trackmod on
執行增量在線備份之前必須執行離線全備份一次否則數據庫將處於備份暫掛的不可用狀態
(聯機完全備份時間戳記)
db backup db TestDB
連接至數據庫並插入測試數據
db connect to TestDB
插入測試數據
INSERT INTO TestTable(Message)
VALUES(開始聯機數據庫備份測試增量備份);
執行聯機備份備份同時再打開一個會話模擬應用在線(聯機增量備份時間戳記)
db backup db TestDB online incremental to D:\DB_Train
模擬災難刪除數據庫!
重要此前一定要將活動日志文件備份至另一個路徑保存好本例中活動日志保存在 C:\dbadmin 下
db drop db TestDB
根據在線完全備份恢復數據庫
db restore db TestDB from D:\DB_Train taken at
根據在線增量備份恢復數據庫
db restore db TestDB incremental automatic from D:\DB_Train taken at
恢復後的數據庫處於前滾暫掛的不可用狀態
db connect to TestDB
前滾數據庫並指定歸檔日志位置重要!
db ROLLFORWARD DATABASE TESTDB TO END OF LOGS AND COMPLETE OVERFLOW LOG PATH (C:\dbadmin)
五 綜述
對於數據庫管理人員或者維護人員來說怎麼強調數據庫備份的重要性都不為過
希望本文能拋磚引玉能讓大家對 IBM DB UDB 的數據庫備份與恢復有一些深入的認識也希望大家能在本機上按照本文的腳本認真的做一次實驗這樣你的認識會更加深刻
數據庫崩潰和災難並不可怕可怕的是在發生數據庫崩潰和災難的時候沒有數據庫備份這句話與各位數據庫愛好者共勉
From:http://tw.wingwit.com/Article/program/Oracle/201311/18590.html