truncate恢复方法集合(二)

作者: admin 分类: 公众号存档            2 次浏览 发布时间: 2016-04-24 23:59

【转载声明】本文为转载文章,原作者「李华荣」,版权归原作者所有。 原文链接:https://mp.weixin.qq.com/s/mEcv0Qj-6JWjwsv6mvl7Bw

公众号:杨建荣的学习笔记 · 作者:李华荣 · 发布:2016-04-24 23:59:40 · 原文链接

1.1   实验环境介绍

 项目 db
db 类型 单实例
db version 11.2.0.4.0
db 存储 FS
主机IP地址/hosts配置 192.168.59.129
OS版本及kernel版本 AIX 7.1 64位
归档模式 Archive Mode
ORACLE_SID oralhr

1.2   实验目标

将truncate掉的表数据成功找回。

1.3   实验过程

1.3.1  fy_recover_data包恢复truncate的表

15:52:10SYS@oraESKDB1> create table scott.TB_0321    as SELECT * FROM dba_objects;

Tablecreated.

Elapsed:00:00:00.59

15:53:02SYS@oraESKDB1> SELECT COUNT(1) FROM   scott.TB_0321;

  COUNT(1)

———-

   346604

16:15:25SYS@oraESKDB1> truncate table scott.TB_0321;

Tabletruncated.

16:15:46SYS@oraESKDB1> SELECT COUNT(1) FROM  scott.TB_0321;

  COUNT(1)

———-

         0

Elapsed:00:00:00.01

====》数据已经被truncate掉了,下边我们来恢复

16:15:52SYS@oraESKDB1> @/oracle/FY_Recover_Data.pck

Packagecreated.

Elapsed:00:00:00.06

Packagebody created.

Elapsed:00:00:00.03

16:15:59SYS@oraESKDB1> exec fy_recover_data.recover_truncated_table(‘scott’,’TB_0321′);

16:16:06:Use existing Directory Name: FY_DATA_DIR

16:16:07:Recover Table: SCOTT.TB_0321$

16:16:09:Restore Table: SCOTT.TB_0321$$

16:16:24:Copy file of Recover Tablespace: FY_REC_DATA_COPY.DAT1

16:16:24:begin to recover table SCOTT.TB_0321

16:16:24:Use existing Directory Name: TMP_HF_DIR

16:17:09:Recovering data in datafile +DATA/oraeskdb/datafile/users.351.902678817

16:17:09:Use existing Directory Name: TMP_HF_DIR

16:39:16:4984 truncated data blocks found.

16:39:16:346604 records recovered in backup table SCOTT.TB_0321$$

16:39:17:Total: 4984 truncated data blocks found.

16:39:17: Total: 346604 records recovered in backup tableSCOTT.TB_0321$$

16:39:17:Recovery completed.

16:39:17: Data has been recovered to SCOTT.TB_0321$$

PL/SQLprocedure successfully completed.

Elapsed:00:23:11.59

16:39:17SYS@oraESKDB1> SELECT COUNT(1) FROM   scott.TB_0321$$;

  COUNT(1)

———-

    346604

Elapsed:00:00:01.55

16:40:51SYS@oraESKDB1> alter table scott.TB_0321 nologging;

Tablealtered.

Elapsed:00:00:00.03

16:41:43SYS@oraESKDB1> insert /*+append*/ into scott.TB_0321select * from scott.TB_0321$$;

346604rows created.

Elapsed:00:00:00.86

16:41:52SYS@oraESKDB1> commit;

Commitcomplete.

Elapsed:00:00:00.01

数据成功恢复。

1.3.2  gdul恢复truncate的表

16:00:01SQL> SELECT COUNT(1) FROM   scott.TB_0322_05;  

  COUNT(1)

———-

   1211312

Elapsed:00:00:00.07

16:00:01SQL> 16:00:01 SQL>

D.BYTES/1024/1024

—————–

              136

Elapsed:00:00:00.17

16:00:01SQL> 16:00:01 SQL> 16:00:01 SQL> truncate table  scott.TB_0322_05

Tabletruncated.

16:00:02SQL> SELECT COUNT(1) FROM  scott.TB_0322_05;

  COUNT(1)

———-

         0

Elapsed:00:00:00.00

[oracle@ZFFR4CB1101:/home/oracle/gdul]$./gdul

*********************************************************************

  GDUL for ORACLE DB.

  Version 3.5.0.1, build date: 2016.03.07.

  Copyright (c) 2007, 2016. Andy Geng.  ALL RIGHTS RESERVED.

  Email: gengyonghui@aliyun.com

  QQ group: 235019291, WeChat Official Account:dbtool

*********************************************************************

GDUL>bootstrap

Bootstrapfinish.

GDUL>desc scott.TB_0322_05

object_id:78302, dataobj#: 78303, cluster tab#: 0

segmentheader: (ts#: 4, rfile#: 4, block#: 682))

SegColumn#  Column#    Name                 Null?           Type     

———————- ——————– ————— ————–

1            1          OWNER                                VARCHAR2(30)

2            2          OBJECT_NAME                          VARCHAR2(128)

3            3          SUBOBJECT_NAME                       VARCHAR2(30)

4            4          OBJECT_ID                            NUMBER   

5            5          DATA_OBJECT_ID                       NUMBER   

6            6          OBJECT_TYPE                          VARCHAR2(19)

7            7          CREATED                              DATE     

8            8          LAST_DDL_TIME                        DATE     

9            9          TIMESTAMP                            VARCHAR2(19)

10           10         STATUS                               VARCHAR2(7)

11           11         TEMPORARY                            VARCHAR2(1)

12           12         GENERATED                            VARCHAR2(1)

13           13         SECONDARY                            VARCHAR2(1)

14           14         NAMESPACE                            NUMBER   

15           15         EDITION_NAME                         VARCHAR2(30)

GDUL>unload table  scott.TB_0322_05

2016-03-2216:01:54…unloaded “SCOTT”.”TB_0322_05″   0 rows

GDUL>scan tablespace 4

startscan tablespace 4…

scantablespace completed.

GDUL>untrunc table  scott.TB_0322_05

2016-03-2216:04:29…untruncating table TB_0322_05 1211312 rows unloaded.

GDUL>

16:02:35SQL> select * from dba_directories where directoy_name=’DATA_PUMP_DIR’;

OWNER                          DIRECTORY_NAME                 DIRECTORY_PATH

———————————————————————————————————————————–

           /u01/app/oracle/product/11.2.0/dbhome_1/demo/schema/sales_history/

SYS                            DATA_PUMP_DIR                 /u01/app/oracle/product/11.2.0/dbhome_1/rdbms/log/

SYS                            ORACLE_OCM_CONFIG_DIR         /u01/app/oracle/product/11.2.0/dbhome_1/ccr/state

[oracle@ZFFR4CB1101:/home/oracle/gdul/dump]$impdp  scott/tigerdirectory=DATA_PUMP_DIR dumpfile=SCOTT_TB_0322_05.dmpLOGFILE=SCOTT_TB_0322_05.log TABLES=TB_0322_05

Mastertable “SCOTT”.”SYS_IMPORT_TABLE_01″ successfullyloaded/unloaded

Starting”SCOTT”.”SYS_IMPORT_TABLE_01″:  scott/******** directory=DATA_PUMP_DIRdumpfile=SCOTT_TB_0322_05.dmp LOGFILE=SCOTT_TB_0322_05.log TABLES=TB_0322_05

Processingobject type TABLE_EXPORT/TABLE/TABLE_DATA

. . imported”SCOTT”.”TB_0322_05″                        117.1 MB 1211312 rows

Job”SCOTT”.”SYS_IMPORT_TABLE_01″ successfully completed at16:16:59

 [oracle@ZFFR4CB2101:/home/oracle]$ sqlplus /as sysdba

SQL>SELECT COUNT(1) FROM  scott.TB_0322_05;

  COUNT(1)

———-

  1211312

数据成功恢复。

1.4   实验总结

总体而言用fy_recover_data包或GDUL工具都是非常好的,fy_recover_data可以恢复truncate的数据,但不能恢复drop的数据,而GDUL工具就比较全面了,具体可以参考前边的简介或下载文档来看,小麦苗的共享云盘里也有比较全的文档。

本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用

ITPUB BLOG:http://blog.itpub.net/26736162

admin

杨建荣,《Oracle DBA工作笔记》《MySQL DBA工作笔记》作者,dbaplus社群发起人之一,腾讯云TVP,现任竞技世界系统部经理,拥有十多年数据库开发和运维经验,目前专注于开源技术、运维自动化和性能调优

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注