db2haodb
作者db2haodb2016-07-13 17:32
数据库开发工程师, IGI

数据库备份恢复的一点总结

字数 23667阅读 7549评论 1赞 1

数据库备份:

一:离线备份:

0. db2 force applicationsall

1. db2 deactivate db xe

2. db2 "backup databasexe to /home/db2inst1/db2backup/OFFLINE_BACKUP compress without prompting"

3. db2 activate db xe

 

二:在线备份(online):

前提:在线备份要求数据库必须是归档日志。

判断是否归档日志:  db2 get db cfg for sample|grep –i log

LOGARCHMETH1和LOGARCHMETH2有一个不为OFF即为归档日志。

若不是归档日志,可以设置为归档日志:

db2 update db cfg fordbtest using logarchmeth1 DISK:DB2Arch_log

 

备份语句:

db2 "backup databasexe online to /home/db2inst1/db2backup/OFFLINE_BACKUP compress withoutprompting"

 

三:增量备份(incremental):

增量备份是在全备的基础上做的备份。

db2 "backup databasexe online incremental to /home/db2inst1/db2backup/OFFLINE_BACKUP compresswithout prompting"

notes1: 增量备份的前提是TRACKMOD开启:

db2 update db cfg forsample using TRACKMOD on

notes2:做增量备份的前提是之前必须做一次离线全备份(开启TRACKMOD之后)。

顺序:

1. db2 update db cfg forsample using TRACKMOD on   --开启参数

2.db2 force applicationsall    

3.db2 backup db sample      --离线全备份

4.

db2 backup db sample onlineincremental  或   --在线增量备份

db2 backup db sampleincremental  或   --离线增量备份

db2 backup db sample onlineincremental delta  --在线增量delta备份

 

四: incremental  delta备份:

incremental   delta是在上次备份(full/incremental/delta)的基础上做的备份.(不能单独delta)

db2 backup db sampleincremental delta

db2 backup db sample onlineincremental delta

 

五:表空间备份:

db2 “backup db sample tablespace (tbs1, tbs2)online to /db2/db2backup”

notes: DPF数据库如果想再所有节点上执行:
ON ALL DBPARTITIONNUMS
如:
 
db2 backup db sample ON ALL DBPARTITIONNUMS online incremental delta

db2“backup db sample ON ALL DBPARTITIONNUMS  tablespace (tbs1, tbs2) online to/db2/db2backup”

六:备份介质检查:

db2ckbkp –h 备份介质名字

七:备份监控:

db2 list utilities show detail

 数据库恢复

包含: 崩溃恢复/ 版本恢复/前滚恢复

 

(一) 崩溃恢复

崩溃恢复是自动发生的,不需要用户干预。由参数AUTORESTART控制,该参数默认是开启的.崩溃恢复的过程可以通过db2diag.log和db2list utilities show detail命令监控。

在应用中频繁提交,并合理使用数据库参数chgpg_thresh使得缓冲池数据尽快写入磁盘,可以减少崩溃恢复的时间。

 

(二)版本恢复:

语法:db2restore db $DB_NAME  from  $PATH taken at  $date_time

 

1. 对于在线备份的数据库文件,因为包含logs,需要做前滚。

(1) db2 restore db STAGING from/db/a3inew1d/db2backup/WEEKLY_OFFLINE taken at 20150505023216 

(2)  db2ROLLFORWARD DATABASE STAGING to end of backup and stop 

 

2. 对于离线备份的数据库文件,备份过程中没有数据写入,备份的文件和实际db数据是一致的,也没有log,所以无需前滚:

(1) db2 restore db STAGING from/db/a3inew1d/db2backup/WEEKLY_OFFLINE  taken at 20150505023216  WITHOUT ROLLING  FORWARD

 

3. 对于增量备份(包括incremental和incrementaldelta),恢复的时候加incrementalautomatic taken at <时间戳>,会自动按顺序进行恢复。

如:db2 restore db sample incremental automatic taken at 20160311020139

 

4. 表空间恢复

可以从数据库备份或者表空间备份中恢复表空间。

恢复时,正在恢复的表空间不可访问。

db2 “restore db sample tablespace (IBMDB2SAMPLEREL)   from/data1 taken at 20160602043807”

指定online选项后可以连接数据库,并可访问其余表空间:

db2 “restore db sample tablespace (IBMDB2SAMPLEREL) onlinefrom /data1 taken at 20160602043807”

表空间恢复后,会处于rollforward-pending状态(无论恢复的介质是online还是offline的备份),  需要对表空间进行前滚,前滚的最早时间点必须是表空间最后一次update的时间:

db2 "rollforward db sample  to 2016-05-20-04.32.19.890729tablespace(IBMDB2SAMPLEREL)"

 

5. 日志恢复

db2 "backup db ts online compress include logs withoutprompting"

对于这种带有includelogs(online备份默认值)的在线备份,如果要恢复到另一台机器或者同一个机器的另一个instance下。需要在恢复的时候将备份介质的日志恢复到某个位置,然后利用日志进行前滚。若不指定位置则前滚时会报错:

db2inst2@db2awse:~/db2backup>db2 "restore db sam_tst from . taken at 20160603034914"

SQL2539W  The specified name of the backup image torestore is the same as the

name ofthe target database.  Restoring to anexisting database that is the

same asthe backup image database will cause the current database to be

overwrittenby the backup version.

Do youwant to continue ? (y/n) y

DB20000I  The RESTORE DATABASE command completedsuccessfully.

db2inst2@db2awse:~/db2backup>db2"rollforward db sam_tst to end of logs and stop"

SQL1273N  An operation reading the logs on database"SAM_TST" cannot continue

becauseof a missing log file "S0000012.LOG" on database partition"0" and log

stream"0".

(以上命令在同一个server同一个实例下就完全正确。)

正确的做法是:

db2 "restore db sam_tst from . taken at20160603034914  logtarget  /home/db2inst2/data/logs"

db2 "rollforward db sam_tst to end of logs and stopoverflow log path (/home/db2inst2/data/logs)"

 

tips: 如果仅仅恢复log,则恢复的时候需要加关键字logs:

db2 "restore db sam_tst logs from . taken at 20160603034914  logtarget /home/db2inst2/data/logs"

 

 

 

 

(三)前滚恢复:

语法:

前滚表:rollforwarddb  $DB_NAME   to $TIME_POINT

前滚表空间:rollforward db $DB_NAME   to $TIME_POINT  tablespace(IBMDB2SAMPLEREL)

前滚的时间点($TIME_POINT):

(1)前滚到某个时间点。

    默认是UTC,也可以用本地时间(中国标准时间CST) 加using local time

(2)to end of logs 前滚到日志结尾。

能遍历所有需要的归档日志和活动日志,能做大程度的恢复db,使用也较简单

(3)to end of backup 前滚到备份结束的时间点。

    是前滚操作结束要求的最小时间点。最小程度的恢复DB。

 

Tips:

      (1)DB前滚的最小时间点为endof backup

        (2) 表空间前滚的最小时间点为:系统目录表对表空间或其中表的最后一次更新操作的时间戳。 因为这个时间点不好查(可以在表函数snapshot_tbs_cfg中或listtablespaces得到),所以为了简便期间,建议前滚到最大时间点toend of logs.

(3)小技巧:如果不知道最小时间点,可以恢复到早于备份结束点的时间,系统会提示SQL1275N错误,并给出最小恢复时间点:

db2inst2@db2awse:~/db2backup>db2 "rollforward db sam_tst to 2016-06-02-09.3.47.000000 using local timetablespace(IBMDB2SAMPLEREL)"

SQL1275N  The stop time passed to the rollforwardutility must be greater than

or equalto timestamp "2016-06-02-09.11.47.000000 Local", because database

"SAM_TST"on nodes "0" contains information later than the specified time.

 

 

常见的DB2恢复场景:

(一)同一个server同一个实例同一个db恢复,替换原有db。  (最基本的语法)

1.离线全备:

db2"backup database xe   to /home/BACKUP compress withoutprompting"

db2 “restoredb xe  from  /home/BACKUP taken  at   20150505023216  WITHOUT ROLLING FORWARD”

2. 在线全备

db2 "backup databasexe online to /home/BACKUP  compress withoutprompting"

db2 “restore db xe  from  /home/BACKUP  taken at   20150505023216”

db2 “rollforward db xe  to  end  of  logs and  stop”

 

(二) 同一个server 同一个实例同一个db恢复 , 将db恢复到另一个db,两个db保持共存。

原有db: xe  ,  新增db: xe_dev, 都在同一个server和同一个instance下。这种情况需要做的:

(1) 改db名字:  into xe_dev

(2)需要指定新的db路径:  to $new_db_path或DBPATH ON $new_db_path 或on $new_db_path

三者区别: 

若目标库不存则to选项和DBPATH ON选项用来指定目标库的数据库目录,ON选项用来指定自动存储路径的位置,如果只有ON选项则数据库的目录放在ON指定的第一个目录。

若目标库存在,则忽略to和DBPATH ON选项,还用原有目标库的数据库目录,如果指定ON选项则改变自动存储路径。

(3)需要指定新的log路径,  包括活动日志/归档/诊断日志路径。NEWLOGPATH 用于指定新的活动日志路径; 更改归档日志路径(db cfg)和诊断日志路径(dbm cfg)。如果不更改这些log路径会和原有db所产生的log冲突。

例1:非自动存储的数据库:

1) 备份:

db2 "backup databasexe   to /home/BACKUP compress withoutprompting"

2)恢复: 

db2 “restore db xe  from  /home/BACKUP  taken at   20150505023216   to /home/db2inst1/xe_dev  into  xe_dev   NEWLOGPATH  '/home/db2inst1/db2inst1/xe_dev /NODE0000/SQL00001/LOGSTREAM0000/' WITHOUT ROLLING FORWARD

DBPATH ON选项等效:

db2 “restore db xe  from  /home/BACKUP  taken at   20150505023216   DBPATHON /home/db2inst1/xe_dev  into xe_dev   NEWLOGPATH   '/home/db2inst1/db2inst1/xe_dev /NODE0000/SQL00001/LOGSTREAM0000/' WITHOUT ROLLING FORWARD”

注意:

NEWLOGPATH 和logtarget选项需要分清楚:logtarget是用来恢复在线备份的db的时候指定log恢复到的路径,然后用于db前滚; 而NEWLOGPATH则是在恢复的时候指定新的活动日志的路径。

恢复后表空间的路径会和to/ DBPATH ON后面的数据库路径保持一致,所以如果不指定to/ DBPATHON选项那么数据库会恢复到dbm cfg参数DFTDBPATH指定的默认数据库路径下,因为是同一个实例下恢复db,所以该参数适应于该实例下所有的db,那么就会与原有db数据库路径一致,数据库路径一致表空间路径也会一致,所以就会出现表空间冲突(因为容器只能属于一个表空间),对于这种情况可以做重定向恢复来改变表空间路径,才能避免冲突。简言之:对于恢复到同一个实例下的非自动存储的db,要么重新定义数据库路径,要么重定向恢复改变表空间路径。

3) 更改归档日志路径和诊断日志路径

db2 “update db cfg for xe_dev using LOGARCHMETH1 DISK:/home/db2inst1/logarch/“

db2 “update dbm cfg using DIAGPATH /home/db2inst1/sqllib/db2dump/

 

 

例2:自动存储的数据库恢复:

1) 备份:

db2 "backup databasexe   to /home/BACKUP compress withoutprompting"

2)恢复(改变自动存储的路径):

db2 “restore db xe  from  /home/BACKUP  taken at   20150505023216   to /home/db2inst1/xe_dev  on  /home/db2inst1/db2inst1/xe_dev  into xe_dev   NEWLOGPATH   '/home/db2inst1/db2inst1/xe_dev /NODE0000/SQL00001/LOGSTREAM0000/' WITHOUT ROLLING FORWARD”

(以上语句若不用on则自动存储路径不变。)

或只用on, 不用to/DBPATH ON, 这样新建目标数据库路径和自动存储路径就都放在了on后面的第一个路径中:

db2 “restore db xe  from  /home/BACKUP  taken at   20150505023216  on  /home/db2inst1/db2inst1/xe_dev  into xe_dev   NEWLOGPATH   '/home/db2inst1/db2inst1/xe_dev /NODE0000/SQL00001/LOGSTREAM0000/' WITHOUT ROLLING FORWARD”

 

综上可知,to/DBPATH ON是用来改变目标数据库路径的, on是用来改变自动存储路径。(自动存储数据库的自动存储路径决定了表空间的路径,也即意味着用on来改变自动存储数据库的表空间路径,那么非自动存储数据库如何改变表空间路径呢?答案就是重定向恢复(redirect restore))

 

Tips:

Db2恢复的时候涉及到的路径:

1. db2数据库路径(可通过db2 list db directory显示)

2. 表空间路径(db2pd–d sample –tab可以查看)

3. 自动存储路径(也即为自动存储数据库的表空间存储路径)

4. 日志路径(活动日志(NEWLOGPATH)/归档日志/诊断日志)

5. 恢复db的时候用于前滚操作的日志存放路径(logtarget)

 

 

(三) 同一个server下不同实例间的恢复。

1. 非自动存储数据库:

和(二)基本相同,则db2会自动恢复到DFTDBPATH指定的默认数据库路径下,如果两个实例的dbm cfg参数DFTDBPATH不同,则to/DBPATH ON无需指定,数据库路径不会相同,也可以不做重定向恢复来改变表空间路径,因为表空间容器默认放在数据库安装路径下,不会和原来的实例相同不会冲突。

 

但是如果两个实例dbm cfg参数DFTDBPATH相同,则和(二)情况一样,要么指定to/DBPATH ON选项重新定义数据库路径,要么重定向恢复改变表空间路径。

 

2. 自动存储数据库:

如果目标库不存在:

to/DBPATH ON用来指定数据库安装路径, on指定自动存储路径。

(1)如果没有to/DBPATH ON只有on选项,则数据库路径放到on指定的第一个路径,自动存储路径为on指定的路径。

(2)如果有to/DBPATH ON,没有on选项,则数据库路径会改为to/DBPATH ON指定的路径,但是自动存储路径不变。

(3)三个选项都没有,则数据库路径和自动存储路径都不变。

(4) to/DBPATH ON和on三个选项都有,会忽略to/DBPATH ON, 和(1)效果一样。

由此可知:在同一个server不同实例下恢复db,如果目标库不存在的时候,需要至少指定on选项以改变自动存储路径(db路径会放到on指定的第一个路径下),以免和另一个实例的自动存储表空间冲突。

 

如果目标库存在:

(1) 如果没有to/DBPATH ON只有on选项, 则数据库路径不变,自动存储路径改变为on后面的路径。

(2) 如果有to/DBPATH ON没有on选项, 则会忽略to/DBPATH ON选项,数据库路径和自动存储路径都不变。

(3)三个选项都没有,和(2)效果一样。

(4) to/DBPATH ON和on三个选项都有,和(1)效果一样。

 

 

(三) 同一个server下不同实例间的恢复(替换DB)。

适合所有替换的情况,无需改路径。

1) 备份:

db2 "backup databasexe   to /home/BACKUP compress withoutprompting"

2)恢复:

db2 “restore db xe  from  /home/BACKUP  taken at   20150505023216   WITHOUT ROLLING FORWARD”

 

 

 

(四)重定向恢复

对于非自动存储数据库,如果需要改变目标数据库表空间容器的路径,则需要重定向恢复。例如:将从serverA备份的介质恢复到server B上,而server B上没有介质数据库中定义的表空间路径,则需要修改到已有的路径。(对于自动存储db用on选项改变自动存储路径)。

重定向恢复步骤:

(1) 加关键字redirect恢复db:

db2 "restore dbSAM_TST from . taken at 20160605102748 redirect WITHOUT ROLLING FORWARD  WITHOUT PROMPTING"

 

(2)查看目标库表空间状态(该空间为唯一一个非自动存储表空间):

db2 list tablespaces show detail

……..

Tablespace ID                        = 6

 Name                                 = TS_DATA_TST

 Type                                 = Databasemanaged space

 Contents                             = All permanentdata. Large table space.

 State                                = 0x2001100

  Detailed explanation:

     Restore pending

     Storage must be defined

     Storage may be defined

 

该表空间所在的容器状态:

db2 list tablespacecontainers for 6 show detail

            Tablespace Containers forTablespace 6

 

 Container ID                         = 0

 Name                                 =/db2fs/db2inst2/NODE0000/SAM_TST/T0000006

 Type                                 = File

 Total pages                          = 1280

 Useable pages                        = 1248

 Accessible                           = No

 

 

(3)修改表空间容器定义。对每一个需要修改的表空间重新定义容器,代码如下:

db2 "SET TABLESPACE CONTAINERS FOR 6 USING ( FILE   '/db2fs/db2inst2/NODE0000/SAM_TST/T0000006/C0000000.LRG'                        1280 )"
 

notes:

此处1280代表page总个数,尽量和原来的大小保持一致(Total pages                          = 1280),也可改大或改小。

 

(4)通过restore....continue开始正式恢复:

db2 restore db SAM_TST continue

 

[5] 若是恢复在线备份的db,需要做前滚:

db2 rollforward db  SAM_TST  to end  of logs and stop

简便且推荐的方法:

用redirectgenerate script来生成脚本,统一执行:

db2 "restore db SAM_TST from . taken at20160605102748 redirect  generatescript  redirect.ddl"

然后可以根据需要手动编辑脚本redirect.ddl重新定义非自动存储表空间的容器。然后执行脚本。

 

 

 

(五)跨平台恢复数据库:

不同操作系统和硬件平台之间的备份和复原操作

DB2®数据库系统支持在不同操作系统和硬件平台之间执行一些备份和复原操作。

可以将支持 DB2 备份和复原操作的平台分为以下三种系列:

  • 大尾数法 Linux 和 UNIX
  • 小尾数法 Linux 和 UNIX
  • Windows

一种平台系列的数据库备份只能在相同平台系列的任何系统上复原。对于Windows 操作系统,可复原在 DB2 V10.5 数据库系统上的 DB2 V10.1 中创建的数据库。对于 Linux和 UNIX 操作系统,只要备份和复原平台的字节存储次序(大尾数法或小尾数法)相同,就可复原在下级版本上创建的备份。

下表显示了 DB2 支持的每个Linux 和 UNIX 平台,并指示了这些平台是采用大尾数法还是小尾数法:

AIX®

大尾数法

HP on IA64

大尾数法

Solaris x64

小尾数法

Solaris SPARC

大尾数法

Linux on zSeries

大尾数法

Linux on IBM® Power Systems™

大尾数法

Linux on IA-64

小尾数法

Linux on AMD64 和 Intel EM64T

小尾数法

32 位 Linux on x86

小尾数法

目标系统必须与源系统具有相同(或比源系统更新的)DB2 数据库产品。不能将在一个数据库产品版本中创建的备份复原到运行较低版本的数据库产品的系统。例如,可复原 DB2 V10.5 数据库系统上的 DB2 V10.1,但不能复原 DB2 V10.1 数据库系统上的 DB2 V10.5 备份。

注:可以将数据库从在 32 位级别创建的备份映像复原到64 位级别,但反之则不然。DB2 BACKUP 实用程序和RESTORE 实用程序应该用来备份和复原数据库。建议不要将文件集从一台机器移至另一台机器,因为这可能破坏数据库的完整性。

在不允许某些备份和复原组合的情况下,可以使用其他方法在DB2 数据库之间移动表:

  • db2move 命令
  • 使用 EXPORT 命令,接着使用 IMPORT 或 LOAD 命令

注:如果备份中的值超出了将在其中复原数据库的环境所允许的范围,那么数据库配置参数将设置为其缺省值。

 

例:从AIXàLinux就会报错:

解决办法:

用db2move来实现。

具体步骤:

1.

在sourceDB上指定路径下执行:

db2move testdb export [-u userid -p passwd]

2.

在targetserver上创建db: testdb

db2 create db testdb

3.

将从sourceDB上导出的所有文件(ixf,msg, out, lst)放到另一个server的指定的路径下:

执行:

db2move testdb import [-u userid -p passwd]

 

 

跨平台恢复注意事项请参考:http://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.admin.ha.doc/doc/c0005960.html?cp=SSEPGG_9.7.0&lang=zh

 

 

(六)删除表恢复(dropped table recovery )

恢复表的几种情况:

1) 表结构和数据都可以从其他渠道获得(如prod环境), 可以考虑重建表。

2)从来不做备份,也没有其他渠道获取数据,无法恢复表。

3) 做过db备份但是log是循环日志模式,则可以考虑恢复最后一次备份,但是备份之后的数据将会丢失。

4) 做过db备份且是归档日志,可以对db做restore+rollforward,前滚到删除表之前的状态,但是删除之后做的数据变化都将丢失,而且数据量很大的话恢复时间会比较长,影响系统正常使用。

 

针对第4)种情况我们可以用dropped tablerecovery,当有drop, create, alter等DDL操作发生时,DB2会在系统表中更新定义,并更新表空间最小恢复时间点,只有前滚到最小时间点之后才能保证系统表和数据库对象保持一致。(通过前滚表空间的方式来恢复表是不可能的,因为表删了之后表空间中就不存在了)

dropped table recovery就是利用删除表恢复历史文件和表空间前滚机制(仅在归档日志模式下)分别获得删除表的定义和数据。该机制要求表空间的dropped table recovery选项必须打开(默认打开的),若没有打开,可以通过altertablespace < tablespace_name> dropped table recovery on进行更改。

 

例子:

1.建表,插入数据,做在线备份:

db2inst2@db2awse:~/db2backup>db2 "create table TEST.TABLE_RESTORE(ID INT, NAME CHAR(12))"

DB20000I  The SQL command completed successfully.

db2inst2@db2awse:~/db2backup>db2 "insert into TEST.TABLE_RESTORE values(1,'a'), (2,'b')"

DB20000I  The SQL command completed successfully.

db2inst2@db2awse:~/db2backup>db2 "select * from TEST.TABLE_RESTORE"

 

ID          NAME       

----------- ------------

          1 a          

          2 b          

 

 2 record(s) selected.

 

db2inst2@db2awse:~/db2backup>db2 "backup db sam_tst online to . compress without prompting"

 

Backup successful. The timestampfor this backup image is : 20160606143538

 

db2inst2@db2awse:~/db2backup>

 

 

2.删除表TEST.TABLE_RESTORE,当启用了dropped table recovery之后,删除表的时候db2会在log中记录一些信息:如:table_name, timestamp,TID, FID等信息,并在历史文件中记录table_name, timestamp, TID, FID和建表语句DDL,这些信息将在随后的恢复中用到。

 

 

db2inst2@db2awse:~/db2backup>db2 drop table TEST.TABLE_RESTORE

DB20000I  The SQL command completed successfully.

db2inst2@db2awse:~/db2backup>

 

3.在历史文件中查找删除表的定义:

db2inst2@db2awse:~/db2backup>db2 "list history dropped table all for sam_tst"

 

                    List History File forsam_tst

 

Number of matching file entries =2

 

 

 Op Obj Timestamp+Sequence Type Dev EarliestLog Current Log  Backup ID

 -- --- ------------------ ---- --------------- ------------ --------------

 D  T  20160606143311                                       000000000000808300060004

 ----------------------------------------------------------------------------

 "TEST   "."TABLE_RESTORE" resides in 1 tablespace(s):

 

 00001 TS_DATA_TST

 ----------------------------------------------------------------------------

   Comment: DROP TABLE

 Start Time: 20160606143311

  End Time: 20160606143311

     Status: A

 ----------------------------------------------------------------------------

 EID: 63

 

 DDL: CREATE TABLE "TEST    "."TABLE_RESTORE" ("ID" INTEGER , "NAME" CHAR(12 OCTETS) )  IN "TS_DATA_TST"               ORGANIZE BY ROW;    

 ----------------------------------------------------------------------------

 

 Op Obj Timestamp+Sequence Type Dev EarliestLog Current Log  Backup ID

 -- --- ------------------ ---- --------------- ------------ --------------

 D  T  20160606152356                                       000000000000dc8300060004

 ----------------------------------------------------------------------------

 "TEST   "."TABLE_RESTORE" resides in 1 tablespace(s):

 

 00001 TS_DATA_TST

 ----------------------------------------------------------------------------

   Comment: DROP TABLE

 Start Time: 20160606152356

  End Time: 20160606152356

     Status: A

 ----------------------------------------------------------------------------

 EID: 67

 

 DDL: CREATE TABLE "TEST    "."TABLE_RESTORE" ("ID" INTEGER , "NAME" CHAR(12 OCTETS) )  IN "TS_DATA_TST"               ORGANIZE BY ROW;    

 ----------------------------------------------------------------------------

 

4.恢复表TEST.TABLE_RESTORE所在的表空间,将表空间前滚,获取被删除表的数据。

db2inst2@db2awse:~/db2backup>db2 "restore db sam_tst tablespace (TS_DATA_TST) from . taken at20160606143538"

DB20000I  The RESTORE DATABASE command completed successfully.

 

前滚的时候指定backup id:000000000000dc8300060004,每个backup id对应一张表:

db2inst2@db2awse:~/db2backup/data>db2 "rollforward db sam_tst to end of logs tablespace (TS_DATA_TST)recover dropped table 000000000000dc8300060004 to /home/db2inst2/db2backup/data"

 

                                 RollforwardStatus

 

 Input database alias                   = sam_tst

 Number of members have returned status = 1

 

 Member ID                              = 0

 Rollforward status                     = not pending

 Next log file to be read               =

 Log files processed                    =  -

 Last committed transaction             = 2016-06-06-19.32.30.000000 UTC

 

DB20000I  The ROLLFORWARD command completedsuccessfully.

 

此时在该路径下就得到了该表的数据(del文件):

db2inst2@db2awse:~/db2backup/data/NODE0000>pwd

/home/db2inst2/db2backup/data/NODE0000

db2inst2@db2awse:~/db2backup/data/NODE0000>ls -l

total 4

-rw-r----- 1 db2inst2 db2grp1 34Jun  6 15:47 data

db2inst2@db2awse:~/db2backup/data/NODE0000>more data

1,"a           "

2,"b           "

db2inst2@db2awse:~/db2backup/data/NODE0000>

 

 

5.重建表结构,导入数据。

在第3步里通过命令db2 "list history dropped table all for sam_tst" 获得的信息中,有表结构DDL,取出来,放到一个文件里,并执行建表:

db2inst2@db2awse:~/db2backup/data/NODE0000>cat create_table.ddl

CREATE TABLE "TEST    "."TABLE_RESTORE" ("ID" INTEGER , "NAME" CHAR(12 OCTETS) )  IN "TS_DATA_TST"           ORGANIZEBY ROW;

db2inst2@db2awse:~/db2backup/data/NODE0000>db2 -tvf create_table.ddl

CREATE TABLE "TEST    "."TABLE_RESTORE" ("ID" INTEGER , "NAME" CHAR(12 OCTETS) )  IN "TS_DATA_TST"           ORGANIZEBY ROW

DB20000I  The SQL command completed successfully.

 

Load数据进去:

db2 "load from data of delinsert into TEST.TABLE_RESTORE nonrecoverable"

 

db2inst2@db2awse:~/db2backup/data/NODE0000>db2 "select * from TEST.TABLE_RESTORE "

 

ID          NAME       

----------- ------------

          1 a          

          2 b          

 

 2 record(s) selected.

 

 

自此,恢复表完毕。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

1

添加新评论1 条评论

bigbearcatbigbearcat网络工程师, 中国
2016-10-19 08:58
谢谢分享
Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广