欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

DB2 备份 恢复 详细测试

程序员文章站 2022-04-08 19:42:13
...

本文测试环境:Windows XP、IBM DB2 Express V9.5、 DB2 Quest Center V9.5 在这里举个应用场景以说明数据库恢复备份的思路: 那么假设我们周一晚上做了一个数据库的备份,周二中午 12 点数据库存储介质出现了故障。如何能够实现恢复呢 ? 那么首先是把数据库

本文测试环境:Windows XP、IBM DB2 Express V9.5、 DB2 Quest Center V9.5

在这里举个应用场景以说明数据库恢复备份的思路:

那么假设我们周一晚上做了一个数据库的备份,周二中午12 点数据库存储介质出现了故障。如何能够实现恢复呢 ? 那么首先是把数据库恢复到我们备份的那个时刻(周一晚上),但是备份之后和周二 12 点之间对数据库已经做的交易(事物)怎么办呢?这就需要用到数据库日志,因为一旦交易提交,我们对数据库做的 SQL insert update delete 等)都会记录到数据库日志中。所以我们就用数据库日志(前提是数据库日志没有受到损坏)把备份之后和数据库崩溃之前的所有 SQL 操作重做( redo )一遍,。这就是数据库备份恢复的原理。

1、DB2数据备份和恢复实验准备工作

Step1:创建测试数据库TestDB

1 DB2 备份 恢复 详细测试CREATE DATABASE TestDB
2 DB2 备份 恢复 详细测试 ON ' E: '
3 DB2 备份 恢复 详细测试 USING CODESET GBK TERRITORY CN
4 DB2 备份 恢复 详细测试 WITH ' DEMO TestDB ' ;

结果:


*** SCRIPT START: Connection: LENOVO-MILO-DB2-TOOLSDB (db2admin) Jul-09-2009 14:34:49 ***

CREATE DATABASE TestDB
ON 'E:'
USING CODESET GBK TERRITORY CN
WITH 'DEMO TestDB';
completed successfully.
DB20000I CREATE DATABASE命令成功完成。


Statement processed successfully in 32.42 secs.

*** SCRIPT END : Connection: NONE Jul-09-2009 14:35:21 ***

DB2 备份 恢复 详细测试

Step2:创建数据库管理表区间Data_SP(要先设置好路径和文件)

此处的路径为:E:/DB2_Train/TestDB/UserData
文件名设置为:TestDB.UserData

DB2 备份 恢复 详细测试

1 DB2 备份 恢复 详细测试CREATE REGULAR TABLESPACE Data_SP
2 DB2 备份 恢复 详细测试
3 DB2 备份 恢复 详细测试 PAGESIZE 4K
4 DB2 备份 恢复 详细测试
5 DB2 备份 恢复 详细测试 MANAGED BY DATABASE
6 DB2 备份 恢复 详细测试
7 DB2 备份 恢复 详细测试 USING( FILE ' E:/DB2_Train/TestDB/UserData/TestDB.UserData ' 2560 )
8 DB2 备份 恢复 详细测试
9 DB2 备份 恢复 详细测试 BUFFERPOOL IBMDEFAULTBP;


这里设置了初始化为4K * 2560 = 10MB的表空间

结果:TableSpace里面多了一个名为Data_SP表空间

DB2 备份 恢复 详细测试

Step3:创建测试表TestTable

1 DB2 备份 恢复 详细测试CREATE TABLE TestTable
2 DB2 备份 恢复 详细测试 (
3 DB2 备份 恢复 详细测试 ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 0 , INCREMENT BY 1 , NO CACHE),
4 DB2 备份 恢复 详细测试 Message VARCHAR ( 100 ),
5 DB2 备份 恢复 详细测试 PRIMARY KEY (ID)
6 DB2 备份 恢复 详细测试 ) IN Data_SP;


结果:
DB2 备份 恢复 详细测试 :

Step4:在TestTable下面插入测试数据

1 DB2 备份 恢复 详细测试INSERT INTO TestTable(Message)
2 DB2 备份 恢复 详细测试 VALUES ( ' 测试表建立成功 ' )

--说明:建立测试表并插入数据是为了稍后验证数据库恢复的时候用的--

结果:
DB2 备份 恢复 详细测试

或者可以使用

1 DB2 备份 恢复 详细测试db2stop force
2 DB2 备份 恢复 详细测试 db2start
3 DB2 备份 恢复 详细测试 db2 connect to TestDB
4 DB2 备份 恢复 详细测试 db2 select * from TestTable



DB2 备份 恢复 详细测试

Step5:DB2数据库脱机备份和恢复实验

说明:我将脱机备份的文件放在了以下路径中:E:/DB2_Train/Offline

1、完全脱机备份数据库

1 DB2 备份 恢复 详细测试db2stop force // 停止及启动DB2实例
2 DB2 备份 恢复 详细测试 db2start
3 DB2 备份 恢复 详细测试
4 DB2 备份 恢复 详细测试 db2 connect to TestDB
5 DB2 备份 恢复 详细测试 // 指定当前活动的数据库为TestDB
6 DB2 备份 恢复 详细测试
7 DB2 备份 恢复 详细测试 db2 backup db TestDB to "E:/DB2_Train/Offline"
8 DB2 备份 恢复 详细测试 // 完全备份数据库,(脱机,备份时间戳为20090709152004)
9 DB2 备份 恢复 详细测试
10 DB2 备份 恢复 详细测试



DB2 备份 恢复 详细测试


2、模拟灾难现场,强制删除TestDB数据库

1 DB2 备份 恢复 详细测试db2 drop db TestDB


DB2 备份 恢复 详细测试

3、根据数据库完全备份恢复数据库

1 DB2 备份 恢复 详细测试// 利用离线完全备份恢复数据库
2 DB2 备份 恢复 详细测试 db2 restore db TestDB from "E:/DB2_Train/Offline" taken at 20090709152004



DB2 备份 恢复 详细测试

4、查询表TestTable里面内容,这一块要重点关注,因为它涉及三种备份方式的区别

1 DB2 备份 恢复 详细测试db2stop force
2 DB2 备份 恢复 详细测试 db2start
3 DB2 备份 恢复 详细测试
4 DB2 备份 恢复 详细测试 db2 connect to TestDB
5 DB2 备份 恢复 详细测试
6 DB2 备份 恢复 详细测试 db2 select * from TestTable



DB2 备份 恢复 详细测试


Step6、DB2数据库增量备份和恢复实验

1、查看数据库配置文件

1 DB2 备份 恢复 详细测试// 查询数据库配置文件里的参数TRACKMOD的状态,默认为OFF
2 DB2 备份 恢复 详细测试 db2 get db cfg for TestDB


DB2 备份 恢复 详细测试

2、修改数据库配置参数TRACKMOD,使之数据库进行增量备份

1 DB2 备份 恢复 详细测试// 设置参数TRACKMOD为YES,使之数据库可以进行增量备份
2 DB2 备份 恢复 详细测试 db2 update db cfg for TestDB USING TRACKMOD YES


DB2 备份 恢复 详细测试

3、更改参数后,必须需要完全离线全备份数据库

1 DB2 备份 恢复 详细测试// 修改参数后需要全备份数据库,脱机,时间戳为20090709163256
2 DB2 备份 恢复 详细测试 db2 backup db TestDB to "E:/DB2_Train/Online"


DB2 备份 恢复 详细测试

3、查看TestTable表的内容

DB2 备份 恢复 详细测试

4、插入测试数据

这里我要说明一下为什么要在表这里插入测试据?

状态 TestTable表里MESSAGE的值 备注
全备份 测试表建立成功
插入数据

测试表建立成功

开始增量数据库备份测试

增量备份

测试表建立成功

开始增量数据库备份测试

还原全备份

测试表建立成功

还原增量备份

测试表建立成功

开始增量数据库备份测试

1 DB2 备份 恢复 详细测试-- 插入数据 开始增量数据库备份测试--
2 DB2 备份 恢复 详细测试 INSERT INTO TestTable(Message)
3 DB2 备份 恢复 详细测试 VALUES ( ' 开始增量数据库备份测试 ' )


DB2 备份 恢复 详细测试

5、开始增量备份(脱机备份)

1 DB2 备份 恢复 详细测试// 增量备份数据库,脱机,时间戳为20090709170956
2 DB2 备份 恢复 详细测试 db2 backup db TestDB incremental to "E:/DB2_Train/Online"


DB2 备份 恢复 详细测试

6、模拟灾难,强制删除数据库

1 DB2 备份 恢复 详细测试// 强制删除数据库,模拟灾难现场
2 DB2 备份 恢复 详细测试 db2 drop db TestDB


DB2 备份 恢复 详细测试

7、恢复数据库

首先还原至完全离线备份状态,然后还原至增量离线备份状态

7.1、还原至完全离线备份状态

1 DB2 备份 恢复 详细测试// 还原离线完全备份数据库,脱机,时间戳为20090709163256
2 DB2 备份 恢复 详细测试 db2 restore db TestDB from "E:/DB2_Train/Online" taken at 20090709163256


DB2 备份 恢复 详细测试

这里要注意还原完全备份后TestTable表里Message的值,也是为什么要加入测试数据的原因

DB2 备份 恢复 详细测试

7.2、还原至增量离线备份状态

1 DB2 备份 恢复 详细测试// -- 注意:下述语句中,有一个 automatic ,它表示无论有多少个增量备份,系统将全自动检索恢复数据库的顺序并自动恢复数据库。如果没有 automatic ,则需要多次手动恢复数据库,很麻烦而且容易出错
2 DB2 备份 恢复 详细测试 db2 restore db TestDB incremental automatic from "E:/DB2_Train/Online" taken at 20090709170956
3 DB2 备份 恢复 详细测试 // 然后提示想继续吗y OR n,然后点击y进行恢复
4 DB2 备份 恢复 详细测试


DB2 备份 恢复 详细测试

DB2 备份 恢复 详细测试


Step7、DB2联机备份和恢复实验

联 机备份数据库可以使数据库在备份的同时仍然保持在可用状态。要让数据库支持联机备份,必须更改数据库的日志归档方式。在脱机备份模式下,数据库采用循环日 志方式记录数据库日志,在联机备份模式下,数据库则采用归档日志的方式备份数据库日志。另外,对于联机备份的数据库来说, 活动日志和归档日志就很重要了,一定要经常备份、保存,像银行多数使用的是归档日志的方式,因为银行的数据关乎到民生的生活,哪怕是突然间断电了,数据库崩溃了,但是每一笔的银行交易都需要时时刻刻把交易记录保存下来,所以这里的联机备份模式就很适合这类的应用场景

1、实验开始之前,最好先重新启动数据库实例,并且连接到需要做联机备份的数据库,此例数据库为TestDB

1 DB2 备份 恢复 详细测试db2stop force
2 DB2 备份 恢复 详细测试 db2start
3 DB2 备份 恢复 详细测试 db2 connect to TestDB


2、开始插入测试数据,此处为“开始联机备份恢复的测试”

1 DB2 备份 恢复 详细测试-- 开始联机备份恢复测试--
2 DB2 备份 恢复 详细测试 INSERT INTO TestTable(Message)
3 DB2 备份 恢复 详细测试 VALUES ( ' 开始联机备份恢复测试 ' )


DB2 备份 恢复 详细测试

3、修改数据库配置文件参数,以启动联机备份模式

1 DB2 备份 恢复 详细测试// 查询数据库配置文件
2 DB2 备份 恢复 详细测试 db2 get db cfg for TestDB


主要测试的参数为

参数名 修改前 修改后
TRACKMOD ON ON
MIRRORLOGPATH NULL E:/DB2_Train/Logs
LOGRETAIN OFF ON
USEREXIT OFF ON


DB2 备份 恢复 详细测试

1 DB2 备份 恢复 详细测试// 参数TRACKMOD设置为ON
2 DB2 备份 恢复 详细测试 // 参 数MIRRORLOGPATH设置为E:/DB2_Train/Logs,还有一点需要补充的是,当删除数据库的时候,它会根据数据库配置文件来自动搜寻 相关的文件,因此这个文件夹下面的数据库日志文件同样也会被删除,所以需要将它复制一份放到别的路径下,此例放在了E:/DB2_Train /Logs_Backup,一定要注意另外保存归档好这些数据库日志文件
3 DB2 备份 恢复 详细测试 // 参数LOGRETAIN设置为ON
4 DB2 备份 恢复 详细测试 // 参数USEREXIT设置为ON
5 DB2 备份 恢复 详细测试 db2 update db cfg for TestDB USING TRACKMOD ON MIRRORLOGPATH E:/DB2_Train/Logs LOGRETAIN ON USEREXIT ON
6 DB2 备份 恢复 详细测试
7 DB2 备份 恢复 详细测试 // 更新配置文件参数好,最好重新启动一下数据库,以使参数设置成功
8 DB2 备份 恢复 详细测试 db2stop force
9 DB2 备份 恢复 详细测试 db2start
10 DB2 备份 恢复 详细测试 db2 connect to TestDB
11 DB2 备份 恢复 详细测试
12 DB2 备份 恢复 详细测试 // 每当更改为联机备份模式的时候,系统会要求你强制离线完全备份一次数据库



DB2 备份 恢复 详细测试

4、执行离线完全备份(脱机,时间戳为20090710113202)

1 DB2 备份 恢复 详细测试// 执行联机模式备份之前必须执行离线完全备份一次,否则数据库处于备份暂挂的不可用状态
2 DB2 备份 恢复 详细测试 db2 backup db TestDB to "E:/DB2_Train/Online"


DB2 备份 恢复 详细测试

DB2 备份 恢复 详细测试

5、插入测试数据

1 DB2 备份 恢复 详细测试-- 开始联机备份恢复测试--开始增量备份--
2 DB2 备份 恢复 详细测试 INSERT INTO TestTable(Message)
3 DB2 备份 恢复 详细测试 VALUES ( ' 开始联机备份恢复测试--开始增量备份 ' )


DB2 备份 恢复 详细测试

6、执行联机在线增量备份,模拟应用在线(联机增量备份,时间戳为20090710115930)

1 DB2 备份 恢复 详细测试// 这里不需要重新断开应用程序连接,就可在线增量备份
2 DB2 备份 恢复 详细测试 db2 backup db TestDB online incremental to "E:/DB2_Train/Online"


DB2 备份 恢复 详细测试

DB2 备份 恢复 详细测试

7、插入测试数据

这里模拟发生了一个应用场景,假设我早上11点钟做了离线完全备份,12点钟做了在线增量备份,但是1点钟突然间发生了不可预见的灾难性事故,数据库崩溃了,在12点钟备份后到1点钟这个时间段我做了一个插入数据“开始联机备份恢复测试-数据库日志”

1 DB2 备份 恢复 详细测试-- 开始联机备份恢复测试-数据库日志--
2 DB2 备份 恢复 详细测试 INSERT INTO TestTable(Message)
3 DB2 备份 恢复 详细测试 VALUES ( ' 开始联机备份恢复测试-数据库日志 ' )


DB2 备份 恢复 详细测试

这里列出所有备份所对应的TestTable表里Message字段的值

名称

ID

TestTable表里Message字段的值

离线完全备份

0 测试表建立成功
1 开始增量数据库备份测试
2 开始联机备份恢复测试

在线增量备份

0 测试表建立成功
1 开始增量数据库备份测试
2 开始联机备份恢复测试
3开始联机备份恢复测试-开始增量备份

数据库日志

0 测试表建立成功
1 开始增量数据库备份测试
2 开始联机备份恢复测试
3 开始联机备份恢复测试-开始增量备份
4 开始联机备份恢复测试-数据库日志



8、保存归档好数据库日志文件

系统默认的数据库日志文件存放位置,此路径由参数MIRRORLOGPATH设置,这里为E:/DB2_Train/Logs
DB2 备份 恢复 详细测试

1 DB2 备份 恢复 详细测试// 一定要注意将数据库日志文件复制一份放置到另一个路径上,此处为E:/DB2_Train/Logs_Backup,并且把它归档好,归档的方法下面所述


DB2 备份 恢复 详细测试

说 明:Windows操作系统下的数据库备份文件是嵌套在一系列文件夹之下的特殊结构。上例中,D:/DB2_Train 是指备份目录,TESTDB.0是指数据库名称为 TESTDB,DB2 是指实例名称,NODE0000 是指节点名称,CATN0000 是指编目名称,20070801是指备份发生的年月日,形如YYYYMMDD,181241是指备份发生的时间,精确到秒,也就是指 18 点 12 分 41秒,形如HHMMSS,最后的 001 则是备份文件的一个序列号。

9、本例数据库日志归档整理后的文件组织结构

1 DB2 备份 恢复 详细测试// 日志文件最好和数据库备份文件对应起来,这样子到时候比较好查询


DB2 备份 恢复 详细测试

10、模拟灾难现场,强制删除数据库

1 DB2 备份 恢复 详细测试// 删除数据库之前,最好先重启一下DB2实例,以断开应用程序和数据库的连接
2 DB2 备份 恢复 详细测试 db2stop force
3 DB2 备份 恢复 详细测试 db2start
4 DB2 备份 恢复 详细测试 // 强制删除数据库
5 DB2 备份 恢复 详细测试 db2 drop db TestDB


11、根据离线完全备份恢复数据库

1 DB2 备份 恢复 详细测试// 离线完全备份恢复数据库
2 DB2 备份 恢复 详细测试 db2 restore db TestDB from "E:/DB2_Train/Online" taken at 20090710113202


DB2 备份 恢复 详细测试

12、根据在线增量备份恢复数据库

1 DB2 备份 恢复 详细测试// 在线增量备份恢复数据库,记得加上automatic,系统会自动寻找相关的增量备份文件
2 DB2 备份 恢复 详细测试 db2 restore db TestDB incremental automatic from "E:/DB2_Train/Online" taken at 20090710115930
3 DB2 备份 恢复 详细测试 // 然后根据系统提示,输入y确认恢复


DB2 备份 恢复 详细测试

13、前滚恢复数据库,并指定归档日志位置

1 DB2 备份 恢复 详细测试// 前滚恢复数据库,最大程度的保留了数据
2 DB2 备份 恢复 详细测试 db2 ROLLFORWARD DATABASE TestDB TO END OF LOGS AND COMPLETE OVERFLOW LOG PATH("E:/DB2_Train/Logs_Backup/TestDB. 0 /DB2/NODE0000/CATN0000/ 20090710 / 115930.001 ")


DB2 备份 恢复 详细测试

14、查看数据完整性

1 DB2 备份 恢复 详细测试// 查询TestTable表的内容,检查数据的完整性
2 DB2 备份 恢复 详细测试 db2 " select * from TestTable"


DB2 备份 恢复 详细测试

15、总结及展望

这 个教程花了我两天的时间来整理和撰写,但是还是感觉到对文章组织结构、逻辑推理方面还远远不够,这篇教程的用意是为了让自己更加深刻的理解DB2数据库的 各种备份和恢复类型,也作为一个知识字典,下次忘记语句了,还可以过来查找,希望自己更加的努力学习DB2数据库,它的魅力实在太大了。