`
guoyanxi
  • 浏览: 275700 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

db2 恢复误删表

    博客分类:
  • db2
阅读更多
oracle如果误删了表,可以很方便的flash back
最重要的是不会影响业务
但是如果你在DB2中招,就目前来说,你就不那么走运了

--首先设置归档模式
[db2inst2@localhost ~]$ db2 update db cfg using logretain on
DB20000I  The UPDATE DATABASE CONFIGURATION command completed successfully.
SQL1363W  One or more of the parameters submitted for immediate modification 
were not changed dynamically. For these configuration parameters, all 
applications must disconnect from this database before the changes become 
effective.
[db2inst2@localhost ~]$ db2 get db cfg | grep -i logre
 Log retain for recovery enabled             (LOGRETAIN) = RECOVERY
 First log archive method                 (LOGARCHMETH1) = LOGRETAIN


--然后理所当然的full backup一次
[db2inst2@localhost ~]$ db2 connect to sample
SQL1116N  A connection to or activation of database "SAMPLE" cannot be made 
because of BACKUP PENDING.  SQLSTATE=57019
[db2inst2@localhost ~]$ db2 backup db sample

Backup successful. The timestamp for this backup image is : 20110424143713

--然后确认表空间是DROP_RECOVERY的
select TBSPACE, DROP_RECOVERY from SYSCAT.TABLESPACES

TBSPACE                                                                                                                          DROP_RECOVERY
-------------------------------------------------------------------------------------------------------------------------------- -------------
SYSCATSPACE                                                                                                                      N            
TEMPSPACE1                                                                                                                       N            
USERSPACE1                                                                                                                       Y            
SYSTOOLSPACE                                                                                                                     Y            

--否则可以使用以下语句打开:
ALTER TABLESPACE <tablespace-name> DROPPED TABLE RECOVERY ON

--建立测试表
--T3表是准备被模拟误drop,并进行恢复的
--T4表是模拟其他不相关的表,看恢复操作是否有影响
[db2inst2@localhost ~]$ db2 "create table T3 (C1 INT)"
DB20000I  The SQL command completed successfully.
[db2inst2@localhost ~]$ db2 "create table T4 (C1 INT)"
DB20000I  The SQL command completed successfully.
[db2inst2@localhost ~]$ db2 "insert into t3 values (333)"
DB20000I  The SQL command completed successfully.
[db2inst2@localhost ~]$ db2 "select * from t3"

C1         
-----------
        333

--开始模拟误删除
[db2inst2@localhost ~]$ db2 drop table t3
DB20000I  The SQL command completed successfully.
[db2inst2@localhost ~]$ db2 "select * from t3"
SQL0204N  "DB2INST2.T3" is an undefined name.  SQLSTATE=42704

--这时候模拟在发现前,t4表的业务继续
[db2inst2@localhost ~]$ db2 "insert into t4 values (444)"
DB20000I  The SQL command completed successfully.
[db2inst2@localhost ~]$ db2 "select * from t4"

C1         
-----------
        444

  1 record(s) selected.


--使用list history看到刚刚删除的表
[db2inst2@localhost ~]$ db2 list history dropped table all for sample

                    List History File for sample

Number of matching file entries = 1

 Op Obj Timestamp+Sequence Type Dev Earliest Log Current Log  Backup ID
 -- --- ------------------ ---- --- ------------ ------------ --------------
  D  T  20110424193315                                        000000000000521200020014 
 ----------------------------------------------------------------------------
  "DB2INST2"."T3" resides in 1 tablespace(s):

  00001 USERSPACE1                                                            
 ----------------------------------------------------------------------------
    Comment: DROP TABLE                                                       
 Start Time: 20110424193315
   End Time: 20110424193315
     Status: A
 ----------------------------------------------------------------------------
  EID: 33

 DDL: CREATE TABLE "DB2INST2"."T3" ( "C1" INTEGER )  IN "USERSPACE1" ;   
 ----------------------------------------------------------------------------

--记住backup id,稍后有用   000000000000521200020014

--开始恢复
--先restore
[db2inst2@localhost ~]$ db2 restore db sample
SQL2539W  Warning!  Restoring to an existing database that is the same as the 
backup image database.  The database files will be deleted.
Do you want to continue ? (y/n) y
DB20000I  The RESTORE DATABASE command completed successfully.

--开始rollforward,关键的一步
[db2inst2@localhost ~]$ db2 rollforward db sample to end of logs and stop recover dropped table 000000000000521200020014 to /home/db2inst2

                                 Rollforward Status

 Input database alias                   = sample
 Number of nodes have returned status   = 1

 Node number                            = 0
 Rollforward status                     = not pending
 Next log file to be read               =
 Log files processed                    = S0000000.LOG - S0000003.LOG
 Last committed transaction             = 2011-04-24-11.34.03.000000 UTC

DB20000I  The ROLLFORWARD command completed successfully.

--这时候看到指定目录下多了一个以节点为名字的目录,里面有名为data的一个文件
[db2inst2@localhost ~]$ ll NODE0000/
total 4
-rw-r----- 1 db2inst2 db2iadm1 4 Apr 24 19:40 data
[db2inst2@localhost ~]$ pwd
/home/db2inst2

--开始重建表t3
--先建表结构,使用list history里面的DDL
[db2inst2@localhost ~]$ db2 connect to sample

   Database Connection Information

 Database server        = DB2/LINUX 9.7.2
 SQL authorization ID   = DB2INST2
 Local database alias   = SAMPLE

[db2inst2@localhost ~]$ db2 "CREATE TABLE "DB2INST2"."T3" ( "C1" INTEGER )  IN "USERSPACE1""
DB20000I  The SQL command completed successfully.
[db2inst2@localhost ~]$ db2
[db2inst2@localhost ~]$ db2 "select * from t3"

C1         
-----------

  0 record(s) selected.

--看到现在是没有数据的

--然后使用刚才rollforward出来的data import
[db2inst2@localhost ~]$ db2 import from /home/db2inst2/NODE0000/data of del insert into t3
SQL3109N  The utility is beginning to load data from file 
"/home/db2inst2/NODE0000/data".

SQL3110N  The utility has completed processing.  "1" rows were read from the 
input file.

SQL3221W  ...Begin COMMIT WORK. Input Record Count = "1".

SQL3222W  ...COMMIT of any database changes was successful.

SQL3149N  "1" rows were processed from the input file.  "1" rows were 
successfully inserted into the table.  "0" rows were rejected.


Number of rows read         = 1
Number of rows skipped      = 0
Number of rows inserted     = 1
Number of rows updated      = 0
Number of rows rejected     = 0
Number of rows committed    = 1

[db2inst2@localhost ~]$ db2 "select * from t3"

C1         
-----------
        333

  1 record(s) selected.

--看到数据回来了

--因为是end of logs,所以T4的数据应该也是最新的
[db2inst2@localhost ~]$ db2 "select * from t4"

C1         
-----------
        444

  1 record(s) selected.

--完成

分享到:
评论

相关推荐

    DB2恢复删除表学习

    ### DB2恢复删除表学习 #### 一、DB2中删除表恢复机制概述 在IBM DB2数据库管理系统中,为了应对误删表的情况,DB2提供了表空间级别的表恢复功能。这种功能允许用户在一定条件下恢复已被删除的表及其数据。默认...

    DB2误删除表的恢复

    如果确认表确实已被删除,那么下一步是恢复表空间。这一步骤需要数据库管理员的权限,并且需要知道表空间的具体名称以及备份的位置。下面是一个示例命令: ```sql db2 "restore db sample tablespace (userspace1) ...

    DB2表和表空间状态详解

    ### DB2表和表空间状态详解 #### 引言 IBM DB2 Universal Database(DB2 UDB)作为一款先进的数据库管理系统,提供了丰富的功能以确保数据的完整性和安全性。其中一个关键特性便是通过表和表空间的状态控制,实现...

    DB2导出数据库表结构和数据.pdf

    DB2 导出数据库表结构和数据 DB2 是一个关系数据库管理系统,能够高效地存储、管理和检索大量数据。在实际应用中,我们经常需要导出数据库表结构和数据,今天我们将讨论如何使用 DB2 导出数据库表结构和数据。 ...

    db2中有表损坏时最快的恢复方法db2look-move

    表损坏不仅影响数据的可靠性和业务的连续性,还可能导致服务中断,因此,快速恢复表的正常状态成为当务之急。 ### 二、“db2look-move”恢复方法详解 #### 步骤1:准备恢复目录 首先,创建一个用于存放恢复文件的...

    db2表空间不足及处理.doc

    DB2表空间不足及处理 DB2表空间是数据库管理系统中用于存储数据的基本结构单元。DB2表空间不足可能会导致数据库性能下降,甚至崩溃。因此, DB2表空间的检查和处理是数据库管理员的重要任务之一。 一、DB2表空间的...

    db2表空间不足及处理

    "DB2表空间不足及处理" DB2表空间不足是指数据库中可用空间不足,以致影响数据库的正常运行。在本文中,我们将介绍如何检查DB2表空间是否不足,以及如何处理这种情况。 什么是DB2表空间? 在DB2中,表空间是指...

    windows下DB2数据库恢复

    ### Windows 下 DB2 数据库恢复知识点详解 #### 一、DB2 数据库恢复概述 - **DB2**:由IBM开发的一款关系型数据库管理系统(RDBMS),支持多种操作系统如Windows、Linux等。 - **数据库恢复**:指的是将数据库从...

    db2 系统表和视图说明

    db2系统表、视图说明,sysibm.systables,sysibm.syscolumns,syscat.tables,syscat.columns,我们可以通过 LIST TABLES FOR SYSTEM 或 LIST TABLES FOR SCHEMA schemaname 命令查看所有的系统表和相关的视图信息。...

    DB2清空表里所有数据.doc

    - 清空表后,表结构和索引将保留,但所有的数据会被删除且无法通过回滚恢复。 - 在执行这类操作前,务必做好数据备份,以防意外丢失重要数据。 综上所述,DB2 中清空表数据涉及了 DELETE 和 TRUNCATE 两种主要的 ...

    DB2系统临时表空间过大引发的性能问题-contracted.doc

    DB2系统临时表空间过大可能引发严重的...在本案例中,通过分析和优化,最终成功解决了由于临时表空间过大导致的性能问题,使系统恢复正常运行。对于其他面临类似问题的DBA,本文提供的方法和工具具有很高的参考价值。

    db2 Load锁表 后解锁详解

    通过对上述步骤的详细解析,我们可以看到在DB2环境中处理Load操作后的表锁问题时,通过一系列精确的操作,可以有效地解锁表并恢复正常的数据访问。这些步骤包括登录DB2实例、设置表为非日志模式、执行Load操作、检查...

    DB2维护检查表

    DB2维护检查表,便于DB2的日常维护,健康检查等

    DB2解决表死锁

    本文将深入探讨“DB2解决表死锁”这一主题,结合提供的资源“DB2解除表锁.doc”,我们将讨论死锁的基本概念、DB2中的死锁检测、死锁预防以及如何在遇到死锁时进行有效的解决。 首先,我们要理解什么是死锁。死锁是...

    DB2中常用备份,恢复命令和db2move,db2look的使用

    `db2move`是一个强大的工具,用于导出和导入数据库对象,如表、视图、索引等,支持跨平台的数据迁移。 1. **导出数据库对象**: ```sql db2movetfmsexport; createdbtfms; db2movetfms -u &lt;user&gt; -p &lt;password&gt; ...

    DB2导出表结构、表数据小结

    DB2 导出表结构、表数据小结 DB2 是一个关系数据库管理系统,提供了多种方式来导出表结构和表数据。在本文中,我们将介绍如何使用 DB2 命令行工具来导出表结构和表数据。 一、DB2 命令行导出数据库全库表结构 ...

    db2裸设备扩容表空间

    本篇文章将详细介绍如何在AIX操作系统上对DB2的裸设备进行扩容,以及涉及的表空间扩展过程。 首先,我们需要理解表空间在DB2中的作用。表空间是DB2数据库中逻辑存储的容器,用于组织和管理数据库对象如表、索引等。...

    DB2和orcale数据库表分区方法和数据库的备份与恢复

    DB2和Oracle数据库表分区方法和数据库备份与恢复 DB2数据库表分区是指将大型表拆分为多个小的、独立的部分,每个部分称为一个分区。分区的目的是为了提高表的可管理性、可扩展性和查询性能。DB2数据库提供了 RANGE ...

Global site tag (gtag.js) - Google Analytics