热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

DB2备份恢复详细测试

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

本文测试环境: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 CREATE DATABASE TestDB
2 ON ' E: '
3 USING CODESET GBK TERRITORY CN
4 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 ***



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

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


1 CREATE REGULAR TABLESPACE Data_SP
2
3 PAGESIZE 4K
4
5 MANAGED BY DATABASE
6
7 USING( FILE ' E:/DB2_Train/TestDB/UserData/TestDB.UserData ' 2560 )
8
9 BUFFERPOOL IBMDEFAULTBP;


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

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



Step3:创建测试表TestTable

1 CREATE TABLE 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下面插入测试数据

1 INSERT INTO TestTable(Message)
2 VALUES ( ' 测试表建立成功 ' )

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

结果:


或者可以使用

1 db2stop force
2 db2start
3 db2 connect to TestDB
4 db2 select * from TestTable




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

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

1、完全脱机备份数据库

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






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

1 db2 drop db TestDB




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

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





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

1 db2stop force
2 db2start
3
4 db2 connect to TestDB
5
6 db2 select * from TestTable






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

1、查看数据库配置文件

1 // 查询数据库配置文件里的参数TRACKMOD的状态,默认为OFF
2 db2 get db cfg for TestDB




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

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




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

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




3、查看TestTable表的内容



4、插入测试数据

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

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

测试表建立成功

开始增量数据库备份测试

增量备份

测试表建立成功

开始增量数据库备份测试

还原全备份

测试表建立成功

还原增量备份

测试表建立成功

开始增量数据库备份测试

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




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

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




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

1 // 强制删除数据库,模拟灾难现场
2 db2 drop db TestDB




7、恢复数据库

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

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

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




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



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

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







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

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

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

1 db2stop force
2 db2start
3 db2 connect to TestDB


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

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




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

1 // 查询数据库配置文件
2 db2 get db cfg for TestDB


主要测试的参数为

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




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





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

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






5、插入测试数据

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




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

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






7、插入测试数据

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

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




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

名称

ID

TestTable表里Message字段的值

离线完全备份

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

在线增量备份

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

数据库日志

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



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

系统默认的数据库日志文件存放位置,此路径由参数MIRRORLOGPATH设置,这里为E:/DB2_Train/Logs

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




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

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

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




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

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


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

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




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

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




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

1 // 前滚恢复数据库,最大程度的保留了数据
2 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 ")




14、查看数据完整性

1 // 查询TestTable表的内容,检查数据的完整性
2 db2 " select * from TestTable"




15、总结及展望

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

推荐阅读
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了如何在 Linux 平台上安装和配置 PostgreSQL 数据库。通过访问官方资源并遵循特定的操作步骤,用户可以在不同发行版(如 Ubuntu 和 Red Hat)上顺利完成 PostgreSQL 的安装。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细介绍了HTML中标签的使用方法和作用。通过具体示例,解释了如何利用标签为网页中的缩写和简称提供完整解释,并探讨了其在提高可读性和搜索引擎优化方面的优势。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 使用C#开发SQL Server存储过程的指南
    本文介绍如何利用C#在SQL Server中创建存储过程,涵盖背景、步骤和应用场景,旨在帮助开发者更好地理解和应用这一技术。 ... [详细]
  • 本文探讨了适用于Spring Boot应用程序的Web版SQL管理工具,这些工具不仅支持H2数据库,还能够处理MySQL和Oracle等主流数据库的表结构修改。 ... [详细]
  • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • 在使用 DataGridView 时,如果在当前单元格中输入内容但光标未移开,点击保存按钮后,输入的内容可能无法保存。只有当光标离开单元格后,才能成功保存数据。本文将探讨如何通过调用 DataGridView 的内置方法解决此问题。 ... [详细]
  • 如何在PostgreSQL中查看数据表
    本文将指导您使用pgAdmin工具连接到PostgreSQL数据库,并展示如何浏览和查找其中的数据表。通过简单的步骤,您可以轻松访问所需的表结构和数据。 ... [详细]
author-avatar
tigerweilong
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有