Oracle备份恢复之闪回技术
作者: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备份恢复之闪回技术相关推荐
- Oracle数据库的闪回技术
当 Oracle 数据库发生逻辑损坏时,可以使用闪回技术简单快捷地进行数据库的恢复. 闪回数据库使用闪回日志执行闪回.闪回删除使用回收站.其它所有技术都使用还原数据.并不 是所有闪回功能都会修改数据库 ...
- 数据库----Oracle中的闪回(flashback)技术
目录 前言 正文 Flashback介绍 闪回表数据(Flashback Table) 1.闪回到具体时间点 2. 闪回到10分钟之前 闪回删表(Flashback Drop) 1. 闪回被删掉的sc ...
- Oracle 闪回技术详解(flashback)
文章目录 1 概述 2 实例说明 2.1 闪回查询 2.2 闪回版本查询 2.3 闪回事务查询 2.4 闪回表 2.5 闪回删除 3 扩展 1 概述 为了使 Oracle 数据库从误操作中迅速地恢复, ...
- 【转载】oracle闪回技术详解之闪回drop(神奇的flashback)
写在前面:删库跑路,相信这是绝大多数程序员会经常听到的一个词.俗话说:常在河边走,哪有不湿鞋,作为经常和数据打交道的程序员也好,运维实施也好,有时难免会出现数据误删除,误操作等情况.如果你是一个ora ...
- oracle对查询结果求和_Oracle 闪回技术详解
概述 闪回技术是Oracle强大数据库备份恢复机制的一部分,在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复(多数闪回功能都能在数据库联机状态下完成).需要注意的是,闪回技术旨在快速恢复 ...
- Oracle闪回技术详解
Oracle的闪回技术提供了一组功能,可以访问过去某一时间的数据并从人为错误中恢复.闪回技术是Oracle 数据库独有的,支持任何级别的恢复,包括行.事务.表和数据库范围.使用闪回特性,您可以查询以前 ...
- oracle闪回技术详解之闪回drop(神奇的flashback)
写在前面:删库跑路,相信这是绝大多数程序员会经常听到的一个词.俗话说:常在河边走,哪有不湿鞋,作为经常和数据打交道的程序员也好,运维实施也好,有时难免会出现数据误删除,误操作等情况.如果你是一个ora ...
- Oracle 闪回技术详解
概述 闪回技术是Oracle强大数据库备份恢复机制的一部分,在10g的时候就被推出一直延续到现在.在数据库发生逻辑错误的时候,闪回技术能提供快速且最小损失的恢复(多数闪回功能都能在数据库联机状态下完成 ...
- oracle 回退到某个时间,oracle 闪回技术
基本闪回查询 SYS@VDEDU> select * from scott.dept as of timestamp to_timestamp ('2018-07-26 13:20:00','y ...
- Oracle闪回技术
Oracle闪回技术 我们都清楚的知道,当我们数据库中的数据删除或者更新之后,数据很难再还原回来,在没有了解闪回技术之前,就觉得是没办法还原了,这样子会付出很大的代价. 现在我来总结一下闪回技术的 ...
最新文章
- 杭电2028--Lowest Common Multiple Plus
- java 验签_JAVA验签方式转换为PHP代码,求教怎么写
- python大神写的代码_初学Python,只会写简单的代码。手头有份Python代码,但是调用C模块生成的.pxd和.pyx文件,运行过程总报错,希望大神指点,调试前该做哪些工作呢?...
- 关于Git的几个使用技巧
- 从Go、Swift出发:语言的选择需谨慎
- 4.24企业数据库应用实践技术沙龙
- python画图猪_用Python的turtle画一只小猪乔治【刚学python两天,记念一下】
- LeetCode 685. 冗余连接 II(并查集)
- 地方商城门户网页模板-商城模板
- C#LeetCode刷题-分治算法
- 远程重启h3c路由器_梅林路由怎么开启远程访问
- 3PAR副总裁谈09年存储虚拟化
- utilities(matlab)—— 多元函数的数值梯度
- cyhper study
- 程序员才懂的 1 首歌和 6 张图
- 13. 永无止境:网站的伸缩性架构
- 多台电脑之间共享键盘鼠标
- 推荐术语:CPM、CPC、CPA、CPI、CTR、CPV、CVR
- secureCRT 设置背景色等操作
- 银行,金融行业的清分,结算,清算,核算到底是什么含义? 现金需要搬运么?
热门文章
- linux 批量ping ip脚本,Linux下批量ping某个网段ip的脚本
- 记录Elastic Job服务处于下线状态排查
- 后台job批量停用和开启
- 【Java】Servlet完全自学手册
- 数据集加载--load_digits
- 原生android字体,不用Root,国产安卓手机如何把字体切换成安卓原生字体
- 利用ajaxSubmit()提交表单后,子窗口关闭,父窗口显示查询页面
- 机器人工程师学习计划(计算机相关专业学习计划)
- matlab两条曲线方程求交点_matlab中已知两曲线方程,怎样求两曲线交点并标注出?...
- 学科竞赛管理系统服务器错误,学科竞赛管理系统.docx