情形:
实例test下的testdb数据库其中TS2表空间有2张表tb1和tb2,在一次全备份后,
误删除了tb2表,如何恢复tb2表,且能不影响和丢失tb1和其他表空间的数据呢?
第一:循环日志模式,直接恢复到全备份时间点,那么则丢失备份点后的全部数据;
第二:归档日志模式,数据库恢复+rollforward,恢复数据库到备份时间点,并且
前滚到tb2删除时间前,那么则丢失tb2表删除时间点后的数据;
第三:归档日志模式下的,表空间恢复+rollforward,但表空间的恢复最小的时间点是系统目录
对表空间或其中表最后一次更新操作时间,也就是表空间或其中表最后的一次DDL语句
(create/alter/delete等)时间,所以上面情况表空间最多只能rollforward到tb2表删除后
的时间点,所以表空间恢复+rollforward不能帮助恢复tb2表。
查看表空间的最小需要前滚时间点:
[test@demo NODE0000]$ db2 "select substr(tablespace_name,1,15) as ts_name,min_recovery_time from table (snapshot_tbs_cfg('TESTDB',-1)) as a"
TS_NAME MIN_RECOVERY_TIME
--------------- --------------------------
SYSCATSPACE -
TEMPSPACE1 -
USERSPACE1 2019-01-06-15.58.23.000000
SYSTOOLSPACE - TS2 2019-01-06-16.05.36.000000
5 record(s) selected.
有没有什么办法可以:恢复了tb2表,并且不影响TS2表空间中的其他表tb1和其他表空间的数据呢?
DB2提供了dropped table recovery来获取误删表的定义和删除之前的数据,如此便可重建该表。
1.新建一个表空间ts2
[test@demo SQL00001]$ db2 "create tablespace ts2 managed by database using (file '/home/test/file' 10M)"
2.在表空间ts2上创建两张表tb1和tb2
db2 "create table tb1(id int,name varchar(10)) in ts2 "