加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

FLASHBACK恢复技术

发布时间:2020-12-15 18:49:13 所属栏目:百科 来源:网络整理
导读:1、闪回删除:利用回收站 恢复 删除的表 1)创建测试表,并删除 SQL create? table ?t1 (no number); 表已创建。 SQL drop table t1; 表已删除。 2)当表删除后,其实只是将其重名,查看scott用户拥有的表,会发现多出一行 SQL set wrap off; SQL select * f

1、闪回删除:利用回收站恢复删除的表

1)创建测试表,并删除
SQL> create? table?t1 (no number);

表已创建。

SQL> drop table t1;

表已删除。

2)当表删除后,其实只是将其重名,查看scott用户拥有的表,会发现多出一行
SQL> set wrap off;
SQL> select * from tab;
在列 CLUSTERID 前截断 (按要求)


TNAME ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?TABTYPE
------------------------------------------------------------ --------
DEPT ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TABLE
EMP ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?TABLE
BONUS ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?TABLE
SALGRADE ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TABLE
BIN$NQzxLfRlQAKBq7RriSxCrA==$0 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TABLE

3)查看回收站
SQL> show recyclebin;
ORIGINAL NAME ? ?RECYCLEBIN NAME ? ? ? ? ? ? ? ?OBJECT TYPE ?DROP TIME
---------------- ------------------------------ ------------ -------------------

T1 ? ? ? ? ? ? ? BIN$NQzxLfRlQAKBq7RriSxCrA==$0 TABLE ? ? ? ?2011-12-23:20:43:54

4)恢复删除的表t1
SQL> flashback table t1 to before drop;

闪回完成。

SQL> desc t1;
?名称 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?是否为空? 类型
?----------------------------------------- -------- ---------------------

?NO ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? NUMBER

2、闪回查询和闪回表

1)删除emp表一行数据
SQL> select count(*) from emp;

??COUNT(*)
----------
?? ? ? ?14

SQL> delete from emp where empno=7934;

已删除 1 行。

SQL> commit;

提交完成。

SQL> select count(*) from emp;

??COUNT(*)
----------
?? ? ? ?13

2)使用闪回查询,可以查看到指定时间点之前的数据
SQL> select * from emp as of timestamp?
to_timestamp('20111223 20:50:00','yyyy dd hh24:mi:ss');
在列 SAL 前截断 (按要求)

在列 COMM 前截断 (按要求)

在列 DEPTNO 前截断 (按要求)


?? ? EMPNO ENAME ? ? ? ? ? ? ? ?JOB ? ? ? ? ? ? ? ? ? ? ? MGR HIREDATE
---------- -------------------- ------------------ ---------- --------------
?? ? ?7369 SMITH ? ? ? ? ? ? ? ?CLERK ? ? ? ? ? ? ? ? ? ?7902 17-12月-80
?? ? ?7499 ALLEN ? ? ? ? ? ? ? ?SALESMAN ? ? ? ? ? ? ? ? 7698 20-2月 -81
?? ? ?7521 WARD ? ? ? ? ? ? ? ? SALESMAN ? ? ? ? ? ? ? ? 7698 22-2月 -81
?? ? ?7566 JONES ? ? ? ? ? ? ? ?MANAGER ? ? ? ? ? ? ? ? ?7839 02-4月 -81
?? ? ?7654 MARTIN ? ? ? ? ? ? ? SALESMAN ? ? ? ? ? ? ? ? 7698 28-9月 -81
?? ? ?7698 BLAKE ? ? ? ? ? ? ? ?MANAGER ? ? ? ? ? ? ? ? ?7839 01-5月 -81
?? ? ?7782 CLARK ? ? ? ? ? ? ? ?MANAGER ? ? ? ? ? ? ? ? ?7839 09-6月 -81
?? ? ?7788 SCOTT ? ? ? ? ? ? ? ?ANALYST ? ? ? ? ? ? ? ? ?7566 19-4月 -87
?? ? ?7839 KING ? ? ? ? ? ? ? ? PRESIDENT ? ? ? ? ? ? ? ? ? ? 17-11月-81
?? ? ?7844 TURNER ? ? ? ? ? ? ? SALESMAN ? ? ? ? ? ? ? ? 7698 08-9月 -81
?? ? ?7876 ADAMS ? ? ? ? ? ? ? ?CLERK ? ? ? ? ? ? ? ? ? ?7788 23-5月 -87

?? ? EMPNO ENAME ? ? ? ? ? ? ? ?JOB ? ? ? ? ? ? ? ? ? ? ? MGR HIREDATE
---------- -------------------- ------------------ ---------- --------------
?? ? ?7900 JAMES ? ? ? ? ? ? ? ?CLERK ? ? ? ? ? ? ? ? ? ?7698 03-12月-81
?? ? ?7902 FORD ? ? ? ? ? ? ? ? ANALYST ? ? ? ? ? ? ? ? ?7566 03-12月-81
?? ? ?7934 MILLER ? ? ? ? ? ? ? CLERK ? ? ? ? ? ? ? ? ? ?7782 23-1月 -82

已选择14行。

3)利用闪回查询的结果,把数据插入回表
SQL> insert into emp select * from emp as of timestamp to_timestamp('20111223 20
:50:00','yyyymmdd hh24:mi:ss') where empno=7934;

已创建 1 行。

SQL> commit;

提交完成。

4)也可以使用闪回表的方式
启动行移动功能
SQL> alter table emp enable row movement;

表已更改。

SQL>? flashback table emp to timestamp to_timestamp('20111223 20:50:00','yyyymmdd
?hh24:mi:ss');

闪回完成。


注意:
??FLASHBACK TABLE 命令可作为单个事务处理执行,以获取DML 互斥锁。
? 不闪回统计信息。
? 保留当前索引和相关对象。
? 闪回表操作:
?? ? ? – 不能对系统表执行
?? ? ? – 不能跨多个DDL 操作
?? ? ? – 会生成还原和重做数据


3、闪回数据库

1)关机并启动flashback功能

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE?例程已经关闭。
SQL> startup mount;
ORACLE 例程已经启动。

Total System Global Area ?612368384 bytes
Fixed Size ? ? ? ? ? ? ? ? ?1250428 bytes
Variable Size ? ? ? ? ? ? 197135236 bytes
Database Buffers ? ? ? ? ?406847488 bytes
Redo Buffers ? ? ? ? ? ? ? ?7135232 bytes
数据库装载完毕。
SQL> alter database flashback on;

数据库已更改。

SQL> alter database open;

数据库已更改。

2)查看当前scn
SQL> select current_scn from v$database;

CURRENT_SCN
-----------
?? ? 653354

3)删除表t1,并进行数据库闪回恢复

删除表t1
SQL> truncate table t1;

表被截断。

闪回数据库
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。

Total System Global Area ?612368384 bytes
Fixed Size ? ? ? ? ? ? ? ? ?1250428 bytes
Variable Size ? ? ? ? ? ? 201329540 bytes
Database Buffers ? ? ? ? ?402653184 bytes
Redo Buffers ? ? ? ? ? ? ? ?7135232 bytes
数据库装载完毕。
SQL>
SQL> flashback database to scn 653354;

闪回完成。

使用resetlogs打开数据库,并查看恢复数据
SQL> alter database open resetlogs;

数据库已更改。

SQL> select count(*) from t1;

??COUNT(*)
----------
?? ? 50318

注意:
在执行完flashback database 命令之后,oracle 提供了两种方式让你修复数据库:?
1). 直接alter database open resetlogs 打开数据库,当然,指定scn 或者timestamp 时间点之后产生的数据统统丢失。?
2). 先执行alter database open read only 命令以read-only 模式打开数据库,然后立刻通过逻辑导出的方式将误操作涉及表的数据导出,再执行recover database 命令以重新应用数据库产生的redo,将数据库修复到flashback database 操作前的状态,然后再通过逻辑导入的方式,将之前误操作的表重新导入,这样的话对现有数据的影响最小,不会有数据丢失。?

参考文献:
http://wallimn.iteye.com/category/55615?page=2&show_full=true

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读