在日常工作中,时候有在维护数据的时候因为误操作或者其他原因导致数据库中的数据丢失。比如删除了数据库中的某个表,DB2数据库可以恢复到制定的时间点,我们只要找出删除数据的时间点,将数据恢复到删除时间点之前,就可恢复这个表了。
下面我们来做个实验,将数据库恢复到指定时间点。
准备工作:
启用归档日志
db2 update db cfg for testdb using LOGRETAIN ON
db2 update db cfg for testdb using USEREXIT ON
启用增量备份
db2 update db cfg for testdb using TRACKMOD on
1. 做数据的全备份
命令:
db2 backup db online include logs
操作步骤:
F:\db2backup\test>db2 backup db testdb online include logs 备份成功。此备份映像的时间戳记是:20100424180911 F:\db2backup\test>dir TESTDB.0.DB2.NODE0000.CATN0000.20100424180911.001 驱动器 F 中的卷是 data2 卷的序列号是 1848-45E8 F:\db2backup\test 的目录 2010-04-24 18:09 110,407,680 TESTDB.0.DB2.NODE0000.CATN0000.20100424180911.001 1 个文件 110,407,680 字节 0 个目录 37,943,844,864 可用字节 |
2. 模拟事故
1). 连接数据库
命令:
建表、修改表结构、插入数据等
db2 connect to
2). 建表、修改表结构、插入数据等
db2 CREATE TABLE TEST(ID INTEGER , NAME VARCHAR(10))
db2 ALTER TABLE TEST ALTER COLUMN id SET NOT NULL
db2 REORG TABLE TEST
db2 ALTER TABLE TEST ADD PRIMARY KEY (ID)
db2 REORG TABLE TEST
db2 INSERT INTO TEST VALUES (1,'a1')
db2 INSERT INTO TEST VALUES (2,'a2')
db2 INSERT INTO TEST VALUES (3,'a3')
2). 验证表中的数据
db2 select count(*) from test
db2 select * from test
操作步骤:
连接数据库
F:\db2backup\test>db2 connect to testdb 数据库连接信息 数据库服务器 = DB2/NT 9.5.2 SQL 授权标识 = ZHOULJ 本地数据库别名 = TESTDB |
建表、修改表结构、插入数据等
F:\db2backup\test>db2 CREATE TABLE TEST(ID INTEGER , NAME VARCHAR(10)) DB20000I SQL 命令成功完成。 F:\db2backup\test>db2 ALTER TABLE TEST ALTER COLUMN id SET NOT NULL DB20000I SQL 命令成功完成。 F:\db2backup\test>db2 REORG TABLE TEST DB20000I REORG 命令成功完成。 F:\db2backup\test>db2 ALTER TABLE TEST ADD PRIMARY KEY (ID) DB20000I SQL 命令成功完成。 F:\db2backup\test>db2 REORG TABLE TEST DB20000I REORG 命令成功完成。 F:\db2backup\test>db2 INSERT INTO TEST VALUES (1,'a1') DB20000I SQL 命令成功完成。 F:\db2backup\test>db2 INSERT INTO TEST VALUES (2,'a2') DB20000I SQL 命令成功完成。 F:\db2backup\test>db2 INSERT INTO TEST VALUES (3,'a3') DB20000I SQL 命令成功完成。 |
验证表中的数据
F:\db2backup\test>db2 select count(*) from test 1 ----------- 3 1 条记录已选择。 F:\db2backup\test>db2 select * from test ID NAME ----------- ---------- 1 a1 2 a2 3 a3 3 条记录已选择。 |
3). 删除表
命令:
db2 drop table test
F:\db2backup\test>db2 drop table test DB20000I SQL 命令成功完成。 F:\db2backup\test>db2 select * from test SQL0204N "ZHOULJ.TEST" 是一个未定义的名称。 SQLSTATE=42704 |
3. 恢复数据到指定时间点
将数据库恢复到指定时间点需要以下内容:
-
数据库备份文件
-
数据库日志
1). 查看表的删除时间点
命令:
db2 list history dropped table all for
操作步骤:
F:\db2backup\test>db2 list history dropped table all for testdb 列示 testdb 的历史记录文件 匹配的文件条目数 = 1 Op 对象 时间戳记+序列 类型 设备 最早日志 当前日志 备份标识 -- --- ------------------ ---- --- ------------ ------------ -------------- D T 20100424181656 000000000000e5030003000e ---------------------------------------------------------------------------- "ZHOULJ"."TEST" 驻留在 1 表空间中: 00001 IBMDB2SAMPLEREL ---------------------------------------------------------------------------- 注释:DROP TABLE 开始时间:20100424181656 结束时间:20100424181656 状态:A ---------------------------------------------------------------------------- EID:19 DDL: CREATE TABLE "ZHOULJ"."TEST" ( "ID" INTEGER NOT NULL , "NAME" VARCHAR(10) ) IN "IBMDB2SAMPLEREL" ; ---------------------------------------------------------------------------- |
根据上面的“ 开始时间:20100424181656” 和 “结束时间:20100424181656” 确定数据库要恢复到什么时候合适。
2). 恢复数据库
命令:
db2 restore db testdb into testdb1 logtarget f:\db2backup\test\logs
操作步骤:
F:\db2backup\test>mkdir logs F:\db2backup\test>db2 restore db testdb into testdb1 logtarget f:\db2backup\test\logs DB20000I RESTORE DATABASE 命令成功完成。 |
3). 准备日志
进行数据库前滚需要日志,到原数据库的日志目录找到日志,然后复制到恢复数据库的目录下,以备回滚使用。
操作步骤:
F:\db2backup\test>db2 get db cfg for testdb | findstr /C:"日志文件路径" 日志文件路径 = C:\DB2\NODE0000\SQL00002\SQLOGDIR\ F:\db2backup\test>copy C:\DB2\NODE0000\SQL00002\SQLOGDIR\* F:\db2backup\test\logs C:\DB2\NODE0000\SQL00002\SQLOGDIR\S0000000.LOG 改写 F:\db2backup\test\logs\S0000000.LOG 吗? (Yes/No/All): yes C:\DB2\NODE0000\SQL00002\SQLOGDIR\S0000001.LOG C:\DB2\NODE0000\SQL00002\SQLOGDIR\S0000002.LOG C:\DB2\NODE0000\SQL00002\SQLOGDIR\S0000003.LOG C:\DB2\NODE0000\SQL00002\SQLOGDIR\S0000004.LOG 已复制 5 个文件。 |
4). 前滚数据库
前滚时间点的格式:
yyyy-mm-dd-HH-MM-SS.NNNNNN
命令:
db2 "rollforward db testdb1 to 2010-04-24-18-16-56.000000 using local time and stop overflow log path(F:\db2backup\test\logs\)"
F:\db2backup\test>db2 "rollforward db testdb1 to 2010-04-24-18-16-56.000000 using local time and stop overflow log path(F:\db2backup\test\logs\)" 前滚状态 输入数据库别名 = testdb1 节点数已返回状态 = 1 节点号 = 0 前滚状态 = 未暂挂 下一个要读取的日志文件 = 已处理的日志文件 = S0000000.LOG - S0000002.LOG 上次落实的事务 = 2010-04-24-18.13.56.000000 Local DB20000I ROLLFORWARD 命令成功完成。 |
4. 验证恢复是否正确
1). 连接数据库
命令:
db2 connect to testdb1
2). 查看表结构
命令:
db2look -d testdb1 -a -e -t test
3). 查询表中数据
db2 select count(*) from test
db2 select * from test
操作步骤:
F:\db2backup\test>db2 connect to testdb1 数据库连接信息 数据库服务器 = DB2/NT 9.5.2 SQL 授权标识 = ZHOULJ 本地数据库别名 = TESTDB1 |
F:\db2backup\test>db2 select count(*) from test 1 ----------- 3 1 条记录已选择。 F:\db2backup\test>db2 select * from test ID NAME ----------- ---------- 1 a1 2 a2 3 a3 3 条记录已选择。 |
F:\db2backup\test>db2look -d testdb1 -a -e -t test -- 为所有创建程序生成统计信息 -- db2look 实用程序将只考虑指定的表 -- 正在创建表的 DDL -- 此 CLP 文件是使用 DB2LOOK 版本 "9.5" 创建的 -- 时间戳记: 2010-4-24 19:51:34 -- 数据库名称: TESTDB1 -- 数据库管理器版本: DB2/NT Version 9.5.2 -- 数据库代码页: 1208 -- 数据库整理顺序为: IDENTITY -- 正在自动绑定程序包 ... -- 绑定成功 -- 正在自动绑定程序包 ... -- 绑定成功 CONNECT TO TESTDB1; ------------------------------------------------ -- 表的 DDL 语句 "ZHOULJ"."TEST" ------------------------------------------------ CREATE TABLE "ZHOULJ"."TEST" ( "ID" INTEGER NOT NULL , "NAME" VARCHAR(10) ) IN "IBMDB2SAMPLEREL" ; -- 表上主键的 DDL 语句 "ZHOULJ"."TEST" ALTER TABLE "ZHOULJ"."TEST" ADD PRIMARY KEY ("ID"); COMMIT WORK; CONNECT RESET; TERMINATE; |
通过以上步骤,说明表结构,数据都存在。恢复成功!
5. 将恢复的表导入到原数据库中
操作步骤:
F:\db2backup\test>db2 connect to testdb1 数据库连接信息 数据库服务器 = DB2/NT 9.5.2 SQL 授权标识 = ZHOULIJU... 本地数据库别名 = TESTDB1
F:\db2backup\test>db2 "export to test.ixf of ixf select * from test" SQL3104N EXPORT 实用程序 正在开始将数据导出至文件 "test.ixf"。 SQL3105N Export 实用程序已经完成导出 "3" 行。
导出的行数:3
F:\db2backup\test>db2 disconnect testdb1 DB20000I SQL DISCONNECT 命令成功完成。 F:\db2backup\test>db2 connect to testdb 数据库连接信息 数据库服务器 = DB2/NT 9.5.2 SQL 授权标识 = ZHOULIJU... 本地数据库别名 = TESTDB
F:\db2backup\test>db2 import from test.ixf of ixf create into test SQL3150N PC/IXF 文件中的 H 记录具有产品 "DB2 02.00",日期 "20100424" 和时间 "200234"。 SQL3153N PC/IXF 文件中的 T 记录具有名称 "test.ixf",限定符 "" 和源 ""。 SQL3109N 实用程序正在开始从文件 "test.ixf" 装入数据。 SQL3110N 实用程序已完成处理。从输入文件读了 "3" 行。 SQL3221W ...开始 COMMIT WORK。输入记录计数 = "3"。 SQL3222W ...对任何数据库更改的 COMMIT 都成功。 SQL3149N 处理了输入文件中的 "3" 行。已将 "3" 行成功插入表中。拒绝了 "0"行。 读取行数 = 3 跳过行数 = 0 插入行数 = 3 更新行数 = 0 拒绝行数 = 0 落实行数 = 3 F:\db2backup\test>db2 select * from test ID NAME ----------- ---------- 1 a1 2 a2 3 a3 3 条记录已选择。 |
至此,整个操作步骤完成。
转载请注明转自http://zlj2208.cublog.cn/
相关推荐
### Windows 下 DB2 数据库恢复知识点详解 #### 一、DB2 数据库恢复概述 - **DB2**:由IBM开发的一款关系型数据库管理系统(RDBMS),支持多种操作系统如Windows、Linux等。 - **数据库恢复**:指的是将数据库从...
4. **滚动前向恢复**:用于将数据库恢复到某个时间点后,并继续处理事务日志中的所有更改。 ```sql db2rollforward <dbname> to <timestamp> on all nodes and stop ``` ### db2move的使用 `db2move`是一个强大...
2. **恢复数据**:使用`db2 restore database pb_db from /home/db2inst1/rdl/data taken at 20140625141510`命令恢复到特定时间点。系统可能会提示确认,输入`y`以继续恢复操作。 在实际应用中,除了上述基本操作...
- **执行全库备份**:使用`db2 backup database sample to e:\db2\backup`命令将数据库“sample”完整备份到指定目录。 #### 四、DB2数据库恢复过程 数据库恢复通常涉及以下步骤: 1. **恢复前准备**:确保目标...
- **点恢复(Point-in-Time Recovery):** 将数据库恢复到特定时间点的状态。 - **前向恢复(Forward Recovery):** 用于处理日志序列断裂的情况。 - **即时恢复(Instant Recovery):** 允许数据库在短时间内...
- **恢复到某个时间点**: 使用`db2 restore tablespace tblspc from directory_or_filename at timestamp`命令恢复表空间到指定时间点。 - **前滚至某个时间点**: 使用`db2 restore tablespace tblspc from ...
### DB2误删除表的恢复方法 在数据库管理与维护过程中,误删除表是一个常见的问题,尤其是对于初学者或是日常操作人员来说。本文将详细介绍如何在IBM DB2环境下恢复被误删除的表,并通过具体步骤指导如何进行操作,...
- `db2 restore tablespace <tsname>`:用于恢复指定的表空间。 - **日志文件的应用**:对于完整恢复,可能还需要应用重做日志文件来确保数据的一致性。 #### 3. 后续处理 - **数据校验**:恢复完成后,需要对数据...
这通常包括选择要恢复的数据库、对象、恢复时间点,指定备份和日志文件路径,查看并选择恢复计划,以及监控恢复进度和结果。 在Location页面,用户可从列出的数据库中选择目标数据库,如Sample数据库,然后进入...
### DB2使用9.7.3恢复v8的数据库备份 在进行数据库版本之间的恢复时,特别是当目标数据库版本高于源数据库版本时,通常会遇到一些兼容性问题和技术挑战。本篇文章将详细介绍如何使用DB2 9.7.3版本来恢复一个v8版本...
利用`db2look`命令,导出原始数据库(本例中为`orcl`)的表结构和数据到SQL脚本文件中。具体命令如下: ```sql db2look -d orcl -e -l -t -d @ -a -x -i yygl -w yygl -o d:\db2move\createdb.sql ``` 其中: - `-...
- 使用`db2rollforwarddbsampleto[时间点] onallnodes and stop`命令进行前滚操作,使数据库恢复到指定时间点的状态。 6. **在线与离线恢复的区别** - 在线恢复允许数据库在恢复过程中保持在线状态,而离线恢复则...
### DB2常用命令详解及数据库备份与恢复方法 #### 一、DB2连接与应用管理命令 1. **连接数据库** - `db2 connect to <数据库名>` - 示例:`db2 connect to sample` - 解释:此命令用于连接到指定的数据库实例。...
- **从指定时间点停止恢复数据库:** - `db2ROLLFORWARD DATABASE testdb TO 2010-02-08-16.03.00 AND STOP` - 此命令用于将数据库恢复到指定的时间点后停止。 ### 其他系统命令 #### 文件压缩与解压 - **解压...
- 指定恢复时间点,或者选择恢复至日志末尾。 - 如果需要,指定额外的备份文件和日志文件路径。 - 查看并选择合适的恢复方案。 - 监控恢复过程状态和结果。 **Location页面** 在Location页面,用户可以选择...
### DB2数据库备份恢复实践总结 #### 一、DB2备份与恢复概述 DB2是IBM开发的一款关系型数据库管理系统,广泛应用于企业级环境中。在DB2中进行数据备份和恢复是非常重要的工作,以确保数据的安全性和业务连续性。本...
3. **滚动前向恢复**:结合`BACKUP`、`RESTORE`和`ROLLFORWARD`命令,可以将数据库恢复到指定的时间点,最大限度地减少数据丢失。这种策略特别适合于处理长时间内数据丢失的情况,同时保持业务连续性。 #### 三、...