作者:IT邦德
中国DBA联盟(ACDU)成员,目前从事DBA及程序编程
(Web\java\Python)工作,主要服务于生产制造
现拥有 Oracle 11g  OCP/OCM、
Mysql、Oceanbase(OBCA)认证
分布式TBase\TDSQL数据库、国产达梦数据库以及红帽子认证
从业8年DBA工作,在数据库领域有丰富的经验
B站主播Oracle、Mysql、PG实战课程,请搜索:jeames007擅长Oracle数据库运维开发,备份恢复,安装迁移,性能优化、故障应急处理等。

1.闪回查询

原理:用户恢复删除的数据,利用的是undo表空间的数据,闪回查询过去的某一个时间点或SCN的数据信息。SYS@PROD> conn scott/tiger
SCOTT@PROD> create table t_fb_query1 as select * from dept;
SCOTT@PROD> select * from t_fb_query1;DEPTNO DNAME          LOC
---------- -------------- -------------10 ACCOUNTING     NEW YORK20 RESEARCH       DALLAS30 SALES          CHICAGO40 OPERATIONS     BOSTON
SCOTT@PROD> set time on
14:30:49 SCOTT@PROD> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
##也可以更改当前会话的时间格式:
alter session set nls_date_format='yyyy-mm-dd hh24:miss';
select sysdate from dual;
2021-09-11 10:02:15
##查询当前SCN
14:31:58 SYS@PROD> select current_scn from v$database;CURRENT_SCN
-----------1070729模拟删除10号部门的数据
14:33:25 SCOTT@PROD> delete t_fb_query1 where deptno=10;
14:33:53 SCOTT@PROD> select * from t_fb_query1;DEPTNO DNAME          LOC
---------- -------------- -------------20 RESEARCH       DALLAS30 SALES          CHICAGO40 OPERATIONS     BOSTON语法:select * from 表名 as of  timestamp/SCN;select * from t_fb_query1
as of timestamp to_timestamp('2021-09-11 10:02:15','yyyy-mm-dd hh24:mi:ss');DEPTNO DNAME          LOC
---------- -------------- -------------10 ACCOUNTING     NEW YORK20 RESEARCH       DALLAS30 SALES          CHICAGO40 OPERATIONS     BOSTON##利用SCN查询
14:35:31 SCOTT@PROD> select * from t_fb_query1 as of SCN  1070729;DEPTNO DNAME          LOC
---------- -------------- -------------10 ACCOUNTING     NEW YORK20 RESEARCH       DALLAS30 SALES          CHICAGO40 OPERATIONS     BOSTON##插入闪回的数据
insert into scott.t_fb_query1
select * from scott.t_fb_query1
as of timestamp to_timestamp('2021-09-11 10:02:15','yyyy-mm-dd hh24:mi:ss')
minus
select * from scott.t_fb_query1;

2.闪回表

原理:利用的是Undo表空间的undo数据,闪回表到某个时间点或某个SCN
##连接SCOTT用户创建业务表:
conn scott/tiger
create table fb_1 (id number);
insert into fb_1 values(10);
commit;alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
select sysdate from dual;##查看此时的时间或者SCN:
时间:
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
2021-09-11 10:17:27
SCN:conn / as sysdba
select current_scn from v$database;
CURRENT_SCN
-----------1071438##执行数据删除操作:
delete from scott.fb_1;
commit;##闪回表到数据删除之前开启被闪回表的行迁移:
14:42:45 SYS@PROD> alter table scott.fb_1 enable row movement;闪回查询确认数据:
select  * from scott.fb_1 as of scn 1071438;执行闪回,可以执行多次闪回操作:
flashback table scott.fb_1 to scn  1071438;或者
flashback table scott.fb_1
to timestamp to_timestamp('2021-09-11 10:17:27','yyyy-mm-dd hh24:mi:ss');验证数据:
SYS@PROD> select * from scott.fb_1;ID
----------10
##关闭行迁移
SYS@PROD> alter table scott.fb_1 disable row movement;

3.闪回数据库

##设置闪回区
conn / as sysdba
show parameter recover
alter system set db_recovery_file_dest_size=4G;
alter system set db_recovery_file_dest='/u01/app/oracle/fast_recovery_area';##开启归档模式
查看归档模式
archive log list;
开归档
conn / as sysdba
shutdown immediate
startup mount
alter database archivelog;
alter database open;##开启闪回及闪回日志保留数据的时间
目的:生成闪回日志
conn / as sysdba验证是否开启了闪回
select flashback_on from v$database;
开启闪回
alter database flashback on;
如果为yes表示开启
闪回日志保留两天的数据,默认是一天(1440)
alter system set db_flashback_retention_target=2880;SYS@PROD> show parameter retention_target##模拟业务及误操作
连接scott用户:
conn scott/tiger
创建业务表:
create table fbdb_scn as select * from emp;
select count(*) from fbdb_scn;COUNT(*)
----------14
反馈回14条记录查询当前的SCN或时间:
conn / as sysdba
SCN:select current_scn from v$database;
CURRENT_SCN
-----------1065436
时间:select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
TO_CHAR(SYSDATE,'YY
-------------------
2021-09-11 07:16:45删除fbdb_scn的信息:
delete from scott.fbdb_scn;
commit;
SYS@PROD> drop user scott cascade;闪回数据库到业务表有14条记录的状态:
关闭数据库:
shutdown immediate
启动到Mount状态:
startup mount
闪回数据库:
SYS@PROD> flashback database to SCN 1065436;
或者
flashback database
to timestamp to_timestamp('2021-09-11 07:16:45','yyyy-mm-dd hh24:mi:ss');以只读方式打开数据库,可以先验证是否是我们想要闪回的状态:
alter database open read only;
conn scott/tiger
select count(*) from fbdb_scn;
如果反馈是14条记录那么说明闪回成功,
如果不是14条记录,那么我们可以继续重复前两个步骤进行闪回,
直到是我们想要的状态。重新关闭数据库:
conn / as sysdba
shutdown immediate
startup mount
alter database open resetlogs;
注:为不可逆操作SYS@PROD> select  GROUP#,SEQUENCE#,MEMBERS,STATUS from v$log;GROUP#  SEQUENCE#    MEMBERS STATUS
---------- ---------- ---------- ----------------1          1          1 CURRENT2          0          1 UNUSED3          0          1 UNUSEDSYS@PROD> alter system switch logfile;


其他闪回技术请参考博客
https://blog.csdn.net/weixin_41645135/article/details/115053035

本文如有错误或不完善的地方请大家多多指正,留言或 QQ 皆可,
您的批评指正是我写作的最大动力!

Oracle备份恢复之闪回技术相关推荐

  1. Oracle数据库的闪回技术

    当 Oracle 数据库发生逻辑损坏时,可以使用闪回技术简单快捷地进行数据库的恢复. 闪回数据库使用闪回日志执行闪回.闪回删除使用回收站.其它所有技术都使用还原数据.并不 是所有闪回功能都会修改数据库 ...

  2. 数据库----Oracle中的闪回(flashback)技术

    目录 前言 正文 Flashback介绍 闪回表数据(Flashback Table) 1.闪回到具体时间点 2. 闪回到10分钟之前 闪回删表(Flashback Drop) 1. 闪回被删掉的sc ...

  3. Oracle 闪回技术详解(flashback)

    文章目录 1 概述 2 实例说明 2.1 闪回查询 2.2 闪回版本查询 2.3 闪回事务查询 2.4 闪回表 2.5 闪回删除 3 扩展 1 概述 为了使 Oracle 数据库从误操作中迅速地恢复, ...

  4. 【转载】oracle闪回技术详解之闪回drop(神奇的flashback)

    写在前面:删库跑路,相信这是绝大多数程序员会经常听到的一个词.俗话说:常在河边走,哪有不湿鞋,作为经常和数据打交道的程序员也好,运维实施也好,有时难免会出现数据误删除,误操作等情况.如果你是一个ora ...

  5. oracle对查询结果求和_Oracle 闪回技术详解

    概述 闪回技术是Oracle强大数据库备份恢复机制的一部分,在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复(多数闪回功能都能在数据库联机状态下完成).需要注意的是,闪回技术旨在快速恢复 ...

  6. Oracle闪回技术详解

    Oracle的闪回技术提供了一组功能,可以访问过去某一时间的数据并从人为错误中恢复.闪回技术是Oracle 数据库独有的,支持任何级别的恢复,包括行.事务.表和数据库范围.使用闪回特性,您可以查询以前 ...

  7. oracle闪回技术详解之闪回drop(神奇的flashback)

    写在前面:删库跑路,相信这是绝大多数程序员会经常听到的一个词.俗话说:常在河边走,哪有不湿鞋,作为经常和数据打交道的程序员也好,运维实施也好,有时难免会出现数据误删除,误操作等情况.如果你是一个ora ...

  8. Oracle 闪回技术详解

    概述 闪回技术是Oracle强大数据库备份恢复机制的一部分,在10g的时候就被推出一直延续到现在.在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复(多数闪回功能都能在数据库联机状态下完成 ...

  9. oracle 回退到某个时间,oracle 闪回技术

    基本闪回查询 SYS@VDEDU> select * from scott.dept as of timestamp to_timestamp ('2018-07-26 13:20:00','y ...

  10. Oracle闪回技术

    Oracle闪回技术   我们都清楚的知道,当我们数据库中的数据删除或者更新之后,数据很难再还原回来,在没有了解闪回技术之前,就觉得是没办法还原了,这样子会付出很大的代价. 现在我来总结一下闪回技术的 ...

最新文章

  1. 杭电2028--Lowest Common Multiple Plus
  2. java 验签_JAVA验签方式转换为PHP代码,求教怎么写
  3. python大神写的代码_初学Python,只会写简单的代码。手头有份Python代码,但是调用C模块生成的.pxd和.pyx文件,运行过程总报错,希望大神指点,调试前该做哪些工作呢?...
  4. 关于Git的几个使用技巧
  5. 从Go、Swift出发:语言的选择需谨慎
  6. 4.24企业数据库应用实践技术沙龙
  7. python画图猪_用Python的turtle画一只小猪乔治【刚学python两天,记念一下】
  8. LeetCode 685. 冗余连接 II(并查集)
  9. 地方商城门户网页模板-商城模板
  10. C#LeetCode刷题-分治算法
  11. 远程重启h3c路由器_梅林路由怎么开启远程访问
  12. 3PAR副总裁谈09年存储虚拟化
  13. utilities(matlab)—— 多元函数的数值梯度
  14. cyhper study
  15. 程序员才懂的 1 首歌和 6 张图
  16. 13. 永无止境:网站的伸缩性架构
  17. 多台电脑之间共享键盘鼠标
  18. 推荐术语:CPM、CPC、CPA、CPI、CTR、CPV、CVR
  19. secureCRT 设置背景色等操作
  20. 银行,金融行业的清分,结算,清算,核算到底是什么含义? 现金需要搬运么?

热门文章

  1. linux 批量ping ip脚本,Linux下批量ping某个网段ip的脚本
  2. 记录Elastic Job服务处于下线状态排查
  3. 后台job批量停用和开启
  4. 【Java】Servlet完全自学手册
  5. 数据集加载--load_digits
  6. 原生android字体,不用Root,国产安卓手机如何把字体切换成安卓原生字体
  7. 利用ajaxSubmit()提交表单后,子窗口关闭,父窗口显示查询页面
  8. 机器人工程师学习计划(计算机相关专业学习计划)
  9. matlab两条曲线方程求交点_matlab中已知两曲线方程,怎样求两曲线交点并标注出?...
  10. 学科竞赛管理系统服务器错误,学科竞赛管理系统.docx