DB2 备份 恢复 详细测试
来源:互联网 发布:reveal.js markdown 编辑:程序博客网 时间:2024/04/29 09:03
本文测试环境:Windows XP、IBM DB2 Express V9.5、 DB2 Quest Center V9.5 那么假设我们周一晚上做了一个数据库的备份,周二中午12点数据库存储介质出现了故障。如何能够实现恢复呢?那么首先是把数据库恢复到我们备份的那个时刻(周一晚上),但是备份之后和周二12点之间对数据库已经做的交易(事物)怎么办呢?这就需要用到数据库日志,因为一旦交易提交,我们对数据库做的SQL(insert、update、delete等)都会记录到数据库日志中。所以我们就用数据库日志(前提是数据库日志没有受到损坏)把备份之后和数据库崩溃之前的所有SQL操作重做(redo)一遍,。这就是数据库备份恢复的原理。 结果:
在这里举个应用场景以说明数据库恢复备份的思路:
1、DB2数据备份和恢复实验准备工作
Step1:创建测试数据库TestDB
2ON 'E:'
3USING CODESET GBK TERRITORY CN
4WITH '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 ***
Step2:创建数据库管理表区间Data_SP(要先设置好路径和文件)
此处的路径为:E:/DB2_Train/TestDB/UserData
文件名设置为:TestDB.UserData
2
3PAGESIZE 4K
4
5MANAGED BY DATABASE
6
7USING(FILE 'E:/DB2_Train/TestDB/UserData/TestDB.UserData' 2560)
8
9BUFFERPOOL IBMDEFAULTBP;
这里设置了初始化为4K * 2560 = 10MB的表空间
结果:TableSpace里面多了一个名为Data_SP表空间
Step3:创建测试表TestTable
2(
3 ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY(START WITH 0 , INCREMENT BY 1, NO CACHE),
4 Message VARCHAR(100),
5 PRIMARY KEY(ID)
6)IN Data_SP;
结果:
:
Step4:在TestTable下面插入测试数据
2VALUES('测试表建立成功')
--说明:建立测试表并插入数据是为了稍后验证数据库恢复的时候用的--
结果:
或者可以使用
2db2start
3db2 connect to TestDB
4db2 select * from TestTable
Step5:DB2数据库脱机备份和恢复实验
说明:我将脱机备份的文件放在了以下路径中:E:/DB2_Train/Offline
1、完全脱机备份数据库
2db2start
3
4db2 connect to TestDB
5//指定当前活动的数据库为TestDB
6
7db2 backup db TestDB to "E:/DB2_Train/Offline"
8//完全备份数据库,(脱机,备份时间戳为20090709152004)
9
10
2、模拟灾难现场,强制删除TestDB数据库
3、根据数据库完全备份恢复数据库
2db2 restore db TestDB from "E:/DB2_Train/Offline" taken at 20090709152004
4、查询表TestTable里面内容,这一块要重点关注,因为它涉及三种备份方式的区别
2db2start
3
4db2 connect to TestDB
5
6db2 select * from TestTable
Step6、DB2数据库增量备份和恢复实验
1、查看数据库配置文件
2db2 get db cfg for TestDB
2、修改数据库配置参数TRACKMOD,使之数据库进行增量备份
2db2 update db cfg for TestDB USING TRACKMOD YES
3、更改参数后,必须需要完全离线全备份数据库
2db2 backup db TestDB to "E:/DB2_Train/Online"
3、查看TestTable表的内容
4、插入测试数据
这里我要说明一下为什么要在表这里插入测试据?
测试表建立成功
开始增量数据库备份测试
增量备份测试表建立成功
开始增量数据库备份测试
还原全备份测试表建立成功
还原增量备份测试表建立成功
开始增量数据库备份测试
2INSERT INTO TestTable(Message)
3VALUES('开始增量数据库备份测试')
5、开始增量备份(脱机备份)
2db2 backup db TestDB incremental to "E:/DB2_Train/Online"
6、模拟灾难,强制删除数据库
2db2 drop db TestDB
7、恢复数据库
首先还原至完全离线备份状态,然后还原至增量离线备份状态
7.1、还原至完全离线备份状态
2db2 restore db TestDB from "E:/DB2_Train/Online" taken at 20090709163256
这里要注意还原完全备份后TestTable表里Message的值,也是为什么要加入测试数据的原因
7.2、还原至增量离线备份状态
2db2 restore db TestDB incremental automatic from "E:/DB2_Train/Online" taken at 20090709170956
3//然后提示想继续吗y OR n,然后点击y进行恢复
4
Step7、DB2联机备份和恢复实验
联机备份数据库可以使数据库在备份的同时仍然保持在可用状态。要让数据库支持联机备份,必须更改数据库的日志归档方式。在脱机备份模式下,数据库采用循环日志方式记录数据库日志,在联机备份模式下,数据库则采用归档日志的方式备份数据库日志。另外,对于联机备份的数据库来说,活动日志和归档日志就很重要了,一定要经常备份、保存,像银行多数使用的是归档日志的方式,因为银行的数据关乎到民生的生活,哪怕是突然间断电了,数据库崩溃了,但是每一笔的银行交易都需要时时刻刻把交易记录保存下来,所以这里的联机备份模式就很适合这类的应用场景
1、实验开始之前,最好先重新启动数据库实例,并且连接到需要做联机备份的数据库,此例数据库为TestDB
2db2start
3db2 connect to TestDB
2、开始插入测试数据,此处为“开始联机备份恢复的测试”
2INSERT INTO TestTable(Message)
3VALUES('开始联机备份恢复测试')
3、修改数据库配置文件参数,以启动联机备份模式
2db2 get db cfg for TestDB
主要测试的参数为
2//参数MIRRORLOGPATH设置为E:/DB2_Train/Logs,还有一点需要补充的是,当删除数据库的时候,它会根据数据库配置文件来自动搜寻相关的文件,因此这个文件夹下面的数据库日志文件同样也会被删除,所以需要将它复制一份放到别的路径下,此例放在了E:/DB2_Train/Logs_Backup,一定要注意另外保存归档好这些数据库日志文件
3//参数LOGRETAIN设置为ON
4//参数USEREXIT设置为ON
5db2 update db cfg for TestDB USING TRACKMOD ON MIRRORLOGPATH E:/DB2_Train/Logs LOGRETAIN ON USEREXIT ON
6
7//更新配置文件参数好,最好重新启动一下数据库,以使参数设置成功
8db2stop force
9db2start
10db2 connect to TestDB
11
12//每当更改为联机备份模式的时候,系统会要求你强制离线完全备份一次数据库
4、执行离线完全备份(脱机,时间戳为20090710113202)
2db2 backup db TestDB to "E:/DB2_Train/Online"
5、插入测试数据
2INSERT INTO TestTable(Message)
3VALUES('开始联机备份恢复测试--开始增量备份')
6、执行联机在线增量备份,模拟应用在线(联机增量备份,时间戳为20090710115930)
2db2 backup db TestDB online incremental to "E:/DB2_Train/Online"
7、插入测试数据
这里模拟发生了一个应用场景,假设我早上11点钟做了离线完全备份,12点钟做了在线增量备份,但是1点钟突然间发生了不可预见的灾难性事故,数据库崩溃了,在12点钟备份后到1点钟这个时间段我做了一个插入数据“开始联机备份恢复测试-数据库日志”
2INSERT INTO TestTable(Message)
3VALUES('开始联机备份恢复测试-数据库日志')
这里列出所有备份所对应的TestTable表里Message字段的值
名称
ID
TestTable表里Message字段的值
离线完全备份0 测试表建立成功
1 开始增量数据库备份测试
2 开始联机备份恢复测试
0 测试表建立成功
1 开始增量数据库备份测试
2 开始联机备份恢复测试
3开始联机备份恢复测试-开始增量备份
0 测试表建立成功
1 开始增量数据库备份测试
2 开始联机备份恢复测试
3 开始联机备份恢复测试-开始增量备份
4 开始联机备份恢复测试-数据库日志
8、保存归档好数据库日志文件
系统默认的数据库日志文件存放位置,此路径由参数MIRRORLOGPATH设置,这里为E:/DB2_Train/Logs
说明:Windows操作系统下的数据库备份文件是嵌套在一系列文件夹之下的特殊结构。上例中,D:/DB2_Train是指备份目录,TESTDB.0是指数据库名称为 TESTDB,DB2 是指实例名称,NODE0000 是指节点名称,CATN0000是指编目名称,20070801是指备份发生的年月日,形如YYYYMMDD,181241是指备份发生的时间,精确到秒,也就是指 18 点 12分 41秒,形如HHMMSS,最后的 001 则是备份文件的一个序列号。
9、本例数据库日志归档整理后的文件组织结构
10、模拟灾难现场,强制删除数据库
2db2stop force
3db2start
4//强制删除数据库
5db2 drop db TestDB
11、根据离线完全备份恢复数据库
2db2 restore db TestDB from "E:/DB2_Train/Online" taken at 20090710113202
12、根据在线增量备份恢复数据库
2db2 restore db TestDB incremental automatic from "E:/DB2_Train/Online" taken at 20090710115930
3//然后根据系统提示,输入y确认恢复
13、前滚恢复数据库,并指定归档日志位置
2db2 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")
14、查看数据完整性
2db2 "select * from TestTable"
15、总结及展望
这个教程花了我两天的时间来整理和撰写,但是还是感觉到对文章组织结构、逻辑推理方面还远远不够,这篇教程的用意是为了让自己更加深刻的理解DB2数据库的各种备份和恢复类型,也作为一个知识字典,下次忘记语句了,还可以过来查找,希望自己更加的努力学习DB2数据库,它的魅力实在太大了。
- DB2 备份 恢复 详细测试
- DB2 备份 恢复 详细测试
- DB2 备份 恢复 详细测试
- DB2 备份 恢复 详细测试 .
- [DB2]DB2备份和恢复
- DB2 备份和恢复
- db2 备份和恢复
- DB2备份与恢复
- db2 备份恢复 2
- db2 备份 恢复
- DB2备份与恢复
- DB2 备份恢复
- DB2备份恢复范例
- DB2在线备份恢复
- db2 备份与恢复
- db2备份恢复
- DB2 备份恢复
- DB2数据库备份恢复
- 软件开发团队在苹果iPhone上日进千金
- Android init 启动过程分析
- 设计模式学习笔记(四):封装变化
- CDN 介绍
- Flash的编解码格式介绍
- DB2 备份 恢复 详细测试
- JSP实例二、登录验证
- MYSQL和ORACLE的一些操作区别
- 今天修改别人的诗
- DB2 常见错误号 解释
- foreign company英语电话(实用)
- 关于 DB2 授权的研究
- 用动态规划解--滑雪题 算法分析
- 使用动态规划解花店问题 两种思考方法分析