暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle Truncate/Drop 表恢复操作指导

IT 邦德 2021-07-20
2997

案例一、Oracle Truncate恢复

       Fy_Recover_Data是利用Oracle表扫描机制、数据稼接机制恢复TRUNCATE或者损坏数据的工具包,由纯PLSQL编写,Oracle内部人员使用,官方未公开。

windows下输入以下网址下载恢复包:

http://www.hellodba.com/Download/FY_Recover_Data.zip

 1.环境(10G RAC)

2.解压FY_Recover_Data.pck包

[oracle@rac1 ~]$ unzip FY_Recover_Data.zip

解压后得到一个文件FY_Recover_Data.pck

3.使用sys用户执行解压后的脚本(我这里解压后的文件在/home/oracle/)

SQL> @/home/oracle/FY_Recover_Data.pck

这个脚本实际是在sys用户下创建了一个名为FY_Recover_Data的package

select a.object_name,a.object_type,a.created From all_objects a

where owner='SYS'

and object_type = 'PACKAGE'

and object_name='FY_RECOVER_DATA'

4.Truncate 表(误操作)

5.执行恢复(sys用户)

exec fy_recover_data.recover_truncated_table('SCOTT','T');

注:执行上的SQL产生2个表空间FY_REC_DATA、FY_RST_DATA

6.使用sys用户把恢复的数据从scott.test$$中插回scott.test表

注:scott.test$$中是scott.test表truncate之前的数据

可以看到被truncate的数据已经恢复。

7.使用sys用户删除恢复时产生的2个表空间及数据文件

SQL> drop tablespace fy_rec_data including contents and datafiles;

Tablespace dropped.

SQL> drop tablespace fy_rst_data including contents and datafiles;

Tablespace dropped.


案例二、Oracle 10G Drop恢复

1.从oracle10g开始删除数据库表的时候并不是真正删除,而是放到了recyclebin中,这个过程类似 windows里面删除的文件会被临时放到回收站中。

2.删除的表系统会自动给他重命名就是你看到的 【BIN$】开头的名字

通过 show recyclebin 命令可以查看被删掉的表的详细信息,或者查询

select * from recyclebin;

3.收回表的命令

flashback table 原表名 to before drop;

4.情况回收站的命令:

purge recyclebin;

5.如果不想删除的表经过回收站

   drop table 表名 purge;

   或者停用数据库的回收战功能

   10.1版本中,修改隐藏参数 _recyclebin

   alter system set "_recyclebin" = false;

   10.2版本中

   alter system set recyclebin = off;

6.清空默认生成的表名,可以通过以下命令

drop table 'BIN$qLechQyAZbzgVAAjfT4Z9Q==$0' purge

闪回:后进先出

7.恢复同一个 schema 下准备闪回的表已有同名的对象存在,闪回 drop 需要重命名.

SQL> flashback table t1 to before drop rename to test_old;

举例说明:

如果一个表上面有索引和约束,drop 后再闪回表,索引和约束还在吗?

create table t (id int,name char(10));

alter table t add constraint pk_t primary key(id);

insert into t values (1,'sohu');

insert into t values (2,'sina');

commit;

SQL> select * from t;


看一眼约束和索引

SQL> select * from user_indexes;

SQL> select * from user_constraints;


再看约束和索引

SQL> select * from user_indexes; 索引回来了,有效(考点),但乱码

SQL> select * from user_constraints; 约束也在,有效(考点),但乱码


分别重命名索引和约束

SQL> alter index "BIN$yF3hbvIbioTgQAB/AQAJlg==$0" rename to pk_t;

SQL> alter table t rename constraint "BIN$yF3hbvIaioTgQAB/AQAJlg==$0" to pk_t;



     


最后修改时间:2021-07-20 14:10:47
文章转载自IT 邦德,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论