| 導購 | 订阅 | 在线投稿
分享
 
 
 

帶你深入了解IBM DB2數據庫的備份與恢複

來源:互聯網  2008-06-01 03:23:15  評論

本文深入講解了基于DB2數據庫的各種備份與恢複策略,通過文中具體示例,讀者可以很快的掌握DB2數據庫的備份與恢複技術。

(注:以下數據庫備份與恢複的試驗環境均爲 Windows xp + IBM DB2 V9 企業版,同樣的語句也在 AIX 5.2 + IBM DB2 V8.2 環境下驗證通過)。

一、數據庫備份的重要性

在信息日趨發達的時代,數據顯得尤其重要。如何保障數據的完整性和安全性呢?如何避免數據災難事故的發生呢?數據庫備份作爲數據安全和完整最有利保障手段的重要性就不言而喻了。

數據庫備份的重要性主要體現在:

1、提高系統的高可用性和災難可恢複性;(在數據庫系統崩潰的時候,沒有數據庫備份怎麽辦!)

2、使用數據庫備份還原數據庫是數據庫系統崩潰時提供數據恢複最小代價的最優方案;(總不能讓客戶重新填報數據吧!)

3、沒有數據就沒有一切,數據庫備份就是一種防範災難于未然的強力手段;

4、對于DBA來說,最首要也是最重要的任務就是數據庫備份。

二、 DB2 數據庫備份的方式與分類

1、按照數據庫備份對數據庫的使用影響來劃分

A、聯機備份(也稱熱備份或在線備份)

B、脫機備份(也稱冷備份或離線備份)

說明:聯機備份和脫機備份最大的不同在于:聯機備份數據庫時,數據庫仍然可以供用戶使用,而脫機備份數據庫則不行。脫機備份數據庫時,必須斷開所有與數據庫有連接的應用後才能進行。

2、按照數據庫的數據備份範圍來劃分

A、完全備份

B、增量備份

說明:完全備份數據庫是指備份數據庫中的所有數據,而增量備份只是備份數據庫中的部分數據。至于增量備份到底備份哪些數據,稍候會提到。

3、增量備份的兩種實現方式

A、增量備份(也稱累計備份)

B、delta備份

說明:這兩種備份方式的嚴格定義如下,

增量備份是自最近成功的完全備份以來所有更改的數據的備份。

delta 備份則是上一次成功的完全、增量或 delta 備份以後所做更改的數據的備份。

這裏請讀者們仔細的看上面兩個增量備份方式的定義,注意這兩種備份方式的細微差別。這裏我們舉一個例子來說明。

假設有一個數據庫,它每天都有部分數據在發生變化。我們星期一晚上對該數據庫做了一次完全備份,星期二晚上對該數據庫做了一次增量備份A(注:這裏的增量備份是指累計備份,下同),星期三晚上又做了一次增量備份B,星期四則做了一次delta 備份。

那麽,我們可以得出以下結論:

星期一的數據庫備份包含了所有的數據。

星期二沒有變動過的數據沒有發生備份,在星期二變動過的數據會備份,並且備份到增量備份A中。

星期三的備份中含有自星期一完全備份以來發生過變動的所有數據,包含了星期二和星期三發生過變動的數據。顯然,增量備份A 被 增量備份 B 包含。

星期四做的是delta備份,注意,它會也只會備份自星期三備份之後變動過的數據。

三、 DB2 備份文件的結構介紹

在不同的操作系統下,DB2 的備份文件的結構是不同的,這裏概要地介紹一下。

1、Windows 操作系統下的數據庫備份文件結構:

帶你深入了解IBM DB2數據庫的備份與恢複

說明:Windows 操作系統下的數據庫備份文件是嵌套在一系列文件夾之下的特殊結構。上例中,D:\DB2_Train 是指備份目錄,TESTDB.0 是指數據庫名稱爲 TESTDB,DB2 是指實例名稱,NODE0000 是指節點名稱,CATN0000 是指編目名稱,20070801 是指備份發生的年月日,形如YYYYMMDD,181241是指備份發生的時間,精確到秒,也就是指 18 點 12 分 41 秒,形如HHMMSS,最後的 001 則是備份文件的一個序列號。

2、 Unix 操作系統下的數據庫備份文件結構:

帶你深入了解IBM DB2數據庫的備份與恢複

說明:Unix 操作系統下的數據庫備份文件就是一個文件。上例中,HTDC 是指數據庫名稱,db2inst1 是指實例名稱,NODE0000 是指節點名稱,CATN0000 是指編目名稱,20070310002357 是指備份發生的具體時間,形如YYYYMMDDHHMMSS,同樣地,它的時間精確到秒,也就是指 2007年3月10日0點23分57秒發生備份,最後的 001 則是備份文件的一個序列號。

四、 DB2 數據庫備份實驗(附完整命令腳本清單)

4.1 DB2 數據庫實驗准備工作

(1)、Step1:創建測試數據庫 TestDB

腳本清單:

CREATE DATABASE TestDB

ON 'D:'

USING CODESET GBK TERRITORY CN

WITH 'Pjj''s Test DB';

}

(2)、Step2:創建數據庫管理表空間 Data_SP(注意路徑,如果沒有請創建)

腳本清單

CREATE REGULAR TABLESPACE Data_SP

PAGESIZE 4 K

MANAGED BY DATABASE

USING ( FILE 'D:\DB2\Container\TestDB\UserData\UserData' 2560 )

BUFFERPOOL IBMDEFAULTBP;

說明:上面的腳本創建了一個名爲 Data_SP 的數據庫管理表空間,該表空間使用的緩沖池爲 IBMDEFAULTBP,存儲路徑爲 D:\DB2\Container\TestDB\UserData\,存儲文件名爲 UserData,大小爲 2560 * 4K = 10M,頁大小爲 4K。

(3)、Step3:創建測試表 TestTable 並插入測試數據

腳本清單:

CREATE TABLE TestTable

(

ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 0, INCREMENT BY 1, NO CACHE ),

Message VARCHAR(100),

PRIMARY KEY(ID)

)IN Data_SP;

--插入測試數據 INSERT INTO TestTable(Message) VALUES('測試表建立成功');

說明:建立測試表並插入數據是爲了稍候驗證數據庫恢複的時候用的。

(4)、Step3:創建測試表 TestTable 並插入測試數據

腳本清單:

CREATE TABLE TestTable

(

ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 0, INCREMENT BY 1, NO CACHE ),

Message VARCHAR(100),

PRIMARY KEY(ID)

)IN Data_SP;

--插入測試數據

INSERT INTO TestTable(Message)

VALUES('測試表建立成功');

4.2 DB2 數據庫脫機備份與恢複實驗

腳本清單

--Step1:完全備份數據庫(脫機,備份時間戳記爲 20071121152940)

db2 backup db TestDB to D:\DB2_Train

--Step2:模擬災難,強制刪除數據庫

db2 drop db TestDB

--Step3:根據該數據庫完全備份還原數據庫

db2 restore db TestDB from D:\DB2_Train taken at 20071121152940

4.3 DB2 數據庫增量備份與恢複實驗

腳本清單:

--數據庫增量備份以及還原實驗

--修改數據庫參數 TrackMod ,使之支持數據庫進行增量備份

db2 update db cfg using TrackMod YES

--更改參數後必須完全離線備份數據庫(脫機,備份時間戳記爲 20071121153818)

db2 backup db TestDB to D:\DB2_Train

--插入測試數據

INSERT INTO TestTable(Message)

VALUES('開始增量數據庫備份測試');

--開始增量備份(脫機,備份時間戳記爲 20071121154006)

db2 backup db TestDB incremental to D:\DB2_Train

--刪除數據庫,模擬數據災難

db2 drop db TestDB

--首先還原至完全離線備份狀態

db2 restore db TestDB from D:\DB2_Train taken at 20071121153818

--還原至增量離線備份狀態

db2 restore db TestDB incremental automatic from D:\DB2_Train taken at 20071121154006

--注意:上述語句中,有一個 automatic ,它表示無論有多少個增量備份,系統將全自動檢索恢複數據庫的順序並自動恢複數據庫。如果沒有 automatic ,則需要多次手動恢複數據庫,很麻煩而且容易出錯。

--Step3:根據該數據庫完全備份還原數據庫

db2 restore db TestDB from D:\DB2_Train taken at 20071121152940

--還原數據庫後查詢測試表數據檢驗數據是否恢複成功

4.4 DB2 數據庫聯機機備份與恢複實驗

說明:聯機備份數據庫可以使數據庫在備份的同時仍然保持在可用狀態。要讓數據庫支持聯機備份,必須更改數據庫的日志歸檔方式。在脫機備份模式下,數據庫采用循環日志方式記錄數據庫日志,在聯機備份模式下,數據庫則采用歸檔日志的方式備份數據庫日志。另外,對于聯機備份的數據庫來說,活動日志和歸檔日志就很重要了,一定要經常備份、保存。

腳本清單:

--數據庫聯機備份以及還原實驗

--連接至數據庫並插入測試數據

db2 connect to TestDB

--插入測試數據

INSERT INTO TestTable(Message)

VALUES('開始聯機數據庫備份測試--完全備份');

--修改數據庫參數,使之支持在線聯機備份

db2 update db cfg for TestDB using logretain on trackmod on

--執行增量、在線備份之前必須執行離線全備份一次,否則數據庫將處于備份暫挂的不可用狀態

--(聯機完全備份,時間戳記:20071121160548)

db2 backup db TestDB

--連接至數據庫並插入測試數據

db2 connect to TestDB

--插入測試數據

INSERT INTO TestTable(Message)

VALUES('開始聯機數據庫備份測試--增量備份');

--執行聯機備份,備份同時再打開一個會話,模擬應用在線(聯機增量備份,時間戳記:20071121152922)

db2 backup db TestDB online incremental to D:\DB2_Train

--模擬災難,刪除數據庫!

--重要,此前一定要將活動日志文件備份至另一個路徑,保存好,本例中,活動日志保存在 C:\db2admin 下。

db2 drop db TestDB

--根據在線完全備份恢複數據庫

db2 restore db TestDB from D:\DB2_Train taken at 20071121160548

--根據在線增量備份恢複數據庫

db2 restore db TestDB incremental automatic from D:\DB2_Train taken at 20071121152922

--恢複後的數據庫處于前滾暫挂的不可用狀態

db2 connect to TestDB

--前滾數據庫,並指定歸檔日志位置,重要!

db2 ROLLFORWARD DATABASE TESTDB TO END OF LOGS AND COMPLETE OVERFLOW LOG PATH ("C:\db2admin")

五. 綜述

對于數據庫管理人員或者維護人員來說,數據庫崩潰和災難其實並不可怕,可怕的是在發生數據庫崩潰和災難的時候沒有數據庫備份。希望通過本文的學習,可以讓大家對數據庫備份的重要性有一個更深的認識。

本文深入講解了基于DB2數據庫的各種備份與恢複策略,通過文中具體示例,讀者可以很快的掌握DB2數據庫的備份與恢複技術。 (注:以下數據庫備份與恢複的試驗環境均爲 Windows xp + IBM DB2 V9 企業版,同樣的語句也在 AIX 5.2 + IBM DB2 V8.2 環境下驗證通過)。 一、數據庫備份的重要性 在信息日趨發達的時代,數據顯得尤其重要。如何保障數據的完整性和安全性呢?如何避免數據災難事故的發生呢?數據庫備份作爲數據安全和完整最有利保障手段的重要性就不言而喻了。 數據庫備份的重要性主要體現在: 1、提高系統的高可用性和災難可恢複性;(在數據庫系統崩潰的時候,沒有數據庫備份怎麽辦!) 2、使用數據庫備份還原數據庫是數據庫系統崩潰時提供數據恢複最小代價的最優方案;(總不能讓客戶重新填報數據吧!) 3、沒有數據就沒有一切,數據庫備份就是一種防範災難于未然的強力手段; 4、對于DBA來說,最首要也是最重要的任務就是數據庫備份。 二、 DB2 數據庫備份的方式與分類 1、按照數據庫備份對數據庫的使用影響來劃分 A、聯機備份(也稱熱備份或在線備份) B、脫機備份(也稱冷備份或離線備份) 說明:聯機備份和脫機備份最大的不同在于:聯機備份數據庫時,數據庫仍然可以供用戶使用,而脫機備份數據庫則不行。脫機備份數據庫時,必須斷開所有與數據庫有連接的應用後才能進行。 2、按照數據庫的數據備份範圍來劃分 A、完全備份 B、增量備份 說明:完全備份數據庫是指備份數據庫中的所有數據,而增量備份只是備份數據庫中的部分數據。至于增量備份到底備份哪些數據,稍候會提到。 3、增量備份的兩種實現方式 A、增量備份(也稱累計備份) B、delta備份 說明:這兩種備份方式的嚴格定義如下, 增量備份是自最近成功的完全備份以來所有更改的數據的備份。 delta 備份則是上一次成功的完全、增量或 delta 備份以後所做更改的數據的備份。 這裏請讀者們仔細的看上面兩個增量備份方式的定義,注意這兩種備份方式的細微差別。這裏我們舉一個例子來說明。 假設有一個數據庫,它每天都有部分數據在發生變化。我們星期一晚上對該數據庫做了一次完全備份,星期二晚上對該數據庫做了一次增量備份A(注:這裏的增量備份是指累計備份,下同),星期三晚上又做了一次增量備份B,星期四則做了一次delta 備份。 那麽,我們可以得出以下結論: 星期一的數據庫備份包含了所有的數據。 星期二沒有變動過的數據沒有發生備份,在星期二變動過的數據會備份,並且備份到增量備份A中。 星期三的備份中含有自星期一完全備份以來發生過變動的所有數據,包含了星期二和星期三發生過變動的數據。顯然,增量備份A 被 增量備份 B 包含。 星期四做的是delta備份,注意,它會也只會備份自星期三備份之後變動過的數據。 三、 DB2 備份文件的結構介紹 在不同的操作系統下,DB2 的備份文件的結構是不同的,這裏概要地介紹一下。 1、Windows 操作系統下的數據庫備份文件結構: [url=/bbs/detail_1787990.html][img]http://image.wangchao.net.cn/it/1323414814698.jpg[/img][/url] 說明:Windows 操作系統下的數據庫備份文件是嵌套在一系列文件夾之下的特殊結構。上例中,D:\DB2_Train 是指備份目錄,TESTDB.0 是指數據庫名稱爲 TESTDB,DB2 是指實例名稱,NODE0000 是指節點名稱,CATN0000 是指編目名稱,20070801 是指備份發生的年月日,形如YYYYMMDD,181241是指備份發生的時間,精確到秒,也就是指 18 點 12 分 41 秒,形如HHMMSS,最後的 001 則是備份文件的一個序列號。 2、 Unix 操作系統下的數據庫備份文件結構: [url=/bbs/detail_1787990.html][img]http://image.wangchao.net.cn/it/1323414845234.jpg[/img][/url] 說明:Unix 操作系統下的數據庫備份文件就是一個文件。上例中,HTDC 是指數據庫名稱,db2inst1 是指實例名稱,NODE0000 是指節點名稱,CATN0000 是指編目名稱,20070310002357 是指備份發生的具體時間,形如YYYYMMDDHHMMSS,同樣地,它的時間精確到秒,也就是指 2007年3月10日0點23分57秒發生備份,最後的 001 則是備份文件的一個序列號。 四、 DB2 數據庫備份實驗(附完整命令腳本清單) 4.1 DB2 數據庫實驗准備工作 (1)、Step1:創建測試數據庫 TestDB 腳本清單: CREATE DATABASE TestDB ON 'D:' USING CODESET GBK TERRITORY CN WITH 'Pjj''s Test DB'; } (2)、Step2:創建數據庫管理表空間 Data_SP(注意路徑,如果沒有請創建) 腳本清單 CREATE REGULAR TABLESPACE Data_SP PAGESIZE 4 K MANAGED BY DATABASE USING ( FILE 'D:\DB2\Container\TestDB\UserData\UserData' 2560 ) BUFFERPOOL IBMDEFAULTBP; 說明:上面的腳本創建了一個名爲 Data_SP 的數據庫管理表空間,該表空間使用的緩沖池爲 IBMDEFAULTBP,存儲路徑爲 D:\DB2\Container\TestDB\UserData\,存儲文件名爲 UserData,大小爲 2560 * 4K = 10M,頁大小爲 4K。 (3)、Step3:創建測試表 TestTable 並插入測試數據 腳本清單: CREATE TABLE TestTable ( ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 0, INCREMENT BY 1, NO CACHE ), Message VARCHAR(100), PRIMARY KEY(ID) )IN Data_SP; --插入測試數據 INSERT INTO TestTable(Message) VALUES('測試表建立成功'); 說明:建立測試表並插入數據是爲了稍候驗證數據庫恢複的時候用的。 (4)、Step3:創建測試表 TestTable 並插入測試數據 腳本清單: CREATE TABLE TestTable ( ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 0, INCREMENT BY 1, NO CACHE ), Message VARCHAR(100), PRIMARY KEY(ID) )IN Data_SP; --插入測試數據 INSERT INTO TestTable(Message) VALUES('測試表建立成功'); 4.2 DB2 數據庫脫機備份與恢複實驗 腳本清單 --Step1:完全備份數據庫(脫機,備份時間戳記爲 20071121152940) db2 backup db TestDB to D:\DB2_Train --Step2:模擬災難,強制刪除數據庫 db2 drop db TestDB --Step3:根據該數據庫完全備份還原數據庫 db2 restore db TestDB from D:\DB2_Train taken at 20071121152940 4.3 DB2 數據庫增量備份與恢複實驗 腳本清單: --數據庫增量備份以及還原實驗 --修改數據庫參數 TrackMod ,使之支持數據庫進行增量備份 db2 update db cfg using TrackMod YES --更改參數後必須完全離線備份數據庫(脫機,備份時間戳記爲 20071121153818) db2 backup db TestDB to D:\DB2_Train --插入測試數據 INSERT INTO TestTable(Message) VALUES('開始增量數據庫備份測試'); --開始增量備份(脫機,備份時間戳記爲 20071121154006) db2 backup db TestDB incremental to D:\DB2_Train --刪除數據庫,模擬數據災難 db2 drop db TestDB --首先還原至完全離線備份狀態 db2 restore db TestDB from D:\DB2_Train taken at 20071121153818 --還原至增量離線備份狀態 db2 restore db TestDB incremental automatic from D:\DB2_Train taken at 20071121154006 --注意:上述語句中,有一個 automatic ,它表示無論有多少個增量備份,系統將全自動檢索恢複數據庫的順序並自動恢複數據庫。如果沒有 automatic ,則需要多次手動恢複數據庫,很麻煩而且容易出錯。 --Step3:根據該數據庫完全備份還原數據庫 db2 restore db TestDB from D:\DB2_Train taken at 20071121152940 --還原數據庫後查詢測試表數據檢驗數據是否恢複成功 4.4 DB2 數據庫聯機機備份與恢複實驗 說明:聯機備份數據庫可以使數據庫在備份的同時仍然保持在可用狀態。要讓數據庫支持聯機備份,必須更改數據庫的日志歸檔方式。在脫機備份模式下,數據庫采用循環日志方式記錄數據庫日志,在聯機備份模式下,數據庫則采用歸檔日志的方式備份數據庫日志。另外,對于聯機備份的數據庫來說,活動日志和歸檔日志就很重要了,一定要經常備份、保存。 腳本清單: --數據庫聯機備份以及還原實驗 --連接至數據庫並插入測試數據 db2 connect to TestDB --插入測試數據 INSERT INTO TestTable(Message) VALUES('開始聯機數據庫備份測試--完全備份'); --修改數據庫參數,使之支持在線聯機備份 db2 update db cfg for TestDB using logretain on trackmod on --執行增量、在線備份之前必須執行離線全備份一次,否則數據庫將處于備份暫挂的不可用狀態 --(聯機完全備份,時間戳記:20071121160548) db2 backup db TestDB --連接至數據庫並插入測試數據 db2 connect to TestDB --插入測試數據 INSERT INTO TestTable(Message) VALUES('開始聯機數據庫備份測試--增量備份'); --執行聯機備份,備份同時再打開一個會話,模擬應用在線(聯機增量備份,時間戳記:20071121152922) db2 backup db TestDB online incremental to D:\DB2_Train --模擬災難,刪除數據庫! --重要,此前一定要將活動日志文件備份至另一個路徑,保存好,本例中,活動日志保存在 C:\db2admin 下。 db2 drop db TestDB --根據在線完全備份恢複數據庫 db2 restore db TestDB from D:\DB2_Train taken at 20071121160548 --根據在線增量備份恢複數據庫 db2 restore db TestDB incremental automatic from D:\DB2_Train taken at 20071121152922 --恢複後的數據庫處于前滾暫挂的不可用狀態 db2 connect to TestDB --前滾數據庫,並指定歸檔日志位置,重要! db2 ROLLFORWARD DATABASE TESTDB TO END OF LOGS AND COMPLETE OVERFLOW LOG PATH ("C:\db2admin") 五. 綜述 對于數據庫管理人員或者維護人員來說,數據庫崩潰和災難其實並不可怕,可怕的是在發生數據庫崩潰和災難的時候沒有數據庫備份。希望通過本文的學習,可以讓大家對數據庫備份的重要性有一個更深的認識。
󰈣󰈤
 
 
 
>>返回首頁<<
 
 
 
 
 熱帖排行
 
王朝網路微信公眾號
微信掃碼關註本站公眾號 wangchaonetcn
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有