Oracle 原理: 闪回 flashback

2024-02-25 15:08
文章标签 oracle 原理 闪回 flashback

本文主要是介绍Oracle 原理: 闪回 flashback,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、9i中的闪回查询方法

二、10g的闪回版本查询方法

三、10g闪回事物查询方法和恢复数据

四、10g闪回表

五、10g闪回删除

六、10g闪回数据库


一、9i中的闪回查询方法

      可以按照时间点或者SCN(System Change Number)向前查询,获取修改前的数据。闪回查询依赖于回滚段中存储的数据前镜像,通过设置undo_retention参数前镜像保留的时间。

     select ...   as of scn |timestamp

例如现有表中有8行数据:

在回滚段保留时间还生效的情况下,知道想要恢复到的确切时间可以

delete salary_tbl where employer_nm like '雇佣者导入1';
commit ;
select * from salary_tbl  as of timestamp to_date('20200723 22:45:30','yyyymmdd hh24:mi:ss');

检查点查询:需要去估计检查点的值

select current_scn from v$database;  --查询当前检查点
delete salary_tbl where employer_nm like '雇佣者导入1';
commit ;
select * from salary_tbl  as of scn 8681060;

利用闪回查询恢复数据

create table salary_tbl_bak as select * from salary_tbl  as of timestamp to_date('20200723 22:45:30','yyyymmdd hh24:mi:ss');
truncate table salary_tbl;
insert into salary_tbl select * from salary_tbl_bak;
drop table salary_tbl_bak;

二、10g的闪回版本查询方法

10g 提供了闪回版本可以在时间段内不同版本进行查询。

select  ...  from ... versions between 

其中select 可以选择伪劣,查询ID,SCN号等

select versions_startTime,versions_endtime,versions_xid,versions_operation,salary_tbl.employer_nm,salary_tbl.department,salary_tbl.salary,salary_tbl.leader_nm from  salary_tbl  versions between timestamp minvalue and maxvalue

其中 version_xid代表事物Id ,version_operation 可以看见操作类型

三、10g闪回事物查询方法和恢复数据

    alter database add supplemental log data;   ----启用最小附加日志

select * from flashback_transaction_query where TABLE_NAME='SALARY_TBL' order by start_timestamp desc;

这张视图的作用如下

comment on table SYS.FLASHBACK_TRANSACTION_QUERY is 'Description of the flashback transaction query view';
comment on column SYS.FLASHBACK_TRANSACTION_QUERY.XID is 'Transaction identifier';
comment on column SYS.FLASHBACK_TRANSACTION_QUERY.START_SCN is 'Transaction start SCN';
comment on column SYS.FLASHBACK_TRANSACTION_QUERY.START_TIMESTAMP is 'Transaction start timestamp';
comment on column SYS.FLASHBACK_TRANSACTION_QUERY.COMMIT_SCN is 'Transaction commit SCN';
comment on column SYS.FLASHBACK_TRANSACTION_QUERY.COMMIT_TIMESTAMP is 'Transaction commit timestamp';
comment on column SYS.FLASHBACK_TRANSACTION_QUERY.LOGON_USER is 'Logon user for transaction';
comment on column SYS.FLASHBACK_TRANSACTION_QUERY.UNDO_CHANGE# is '1-based undo change number';
comment on column SYS.FLASHBACK_TRANSACTION_QUERY.OPERATION is 'forward operation for this undo';
comment on column SYS.FLASHBACK_TRANSACTION_QUERY.TABLE_NAME is 'table name to which this undo applies';
comment on column SYS.FLASHBACK_TRANSACTION_QUERY.TABLE_OWNER is 'owner of table to which this undo applies';
comment on column SYS.FLASHBACK_TRANSACTION_QUERY.ROW_ID is 'rowid to which this undo applies';
comment on column SYS.FLASHBACK_TRANSACTION_QUERY.UNDO_SQL is 'SQL corresponding to this undo';

特别注意:UNDO_SQL是事物回滚的SQL;只要按照COMMIT_TIMESTAMP 排一个序就能够知道提交事物的历史情况。

想要恢复否个表的数据:首先通过 TABLE_NAME 进行筛选,COMMIT_TIMESTAMP排个序,想要恢复到什么位置上一个个执行UNDO_SQL 就可以

 

四、10g闪回表

 10g可以把表里的数据回退到某个时刻,或者SCN。前提是必须启用行迁移

    alter  table  salary_tbl enable row movement;

然后可以进行表闪回。

flashback table table_name  to timestamp|SCN


flashback table salary_tbl to timestamp timestamp'2020-7-23 22:00:00'

 

五、10g闪回删除

oracle  也有像回收站这样的东西,用来装已经被删除的数据。 启用回收站,回收站只放普通用户的删除表,所以SYS用户,SYSTEM表空间是不会放在这里的;

alter session set recylcebin=on

>>show recyclebin 

flashback table <tablename> to before drop;    --闪回删除

drop table <tablename> purge;  --------彻底删除

purge recyclebin ;---------清空回收站

-----查询原来的表名和回收站情况
select * from tab where TABTYPE='TABLE';
select * from recyclebin;
--------删除一张表------------
create table salary_tbl_bak as select * from salary_tbl;
drop table  salary_tbl_bak;
------闪回----------
flashback table salary_tbl_bak to before drop;

在Oracle 中如果重复删除相同的表,那么闪回的表就是最近删除的表 或者可以直接select <"在recyclebin中的表名">   双引号

 

六、10g闪回数据库

如果数据库出现物理错误,如硬盘损坏,那么闪回数据库在此处不适用。如果数据库出现逻辑错误,那么可以通过闪回数据库进行恢复回退。之前的闪回都是利用回滚段闪回,而闪回数据库是利用日志进行返回。

1.数据库需为归档模式

  >>shutdown immediate;

  >>startup mount

 >>alter database archivelog

 >> alter database open

2.配置闪回恢复区

   show parameter DB_RECOVE

3.配置闪回保留时间(单位:分钟)

show parameter db_flashback_reten

4.在mount状态,启用数据库闪回 alter database flashback on ;

此时你可以在db_recovery_file_dest参数值下的目录中看见闪回需要用到的文件;

5.在mount状态下闪回数据库

 flashback database  to timestamp | scn

现有一张表,此时的时间是 select systimestamp from dual; ---- 26-7月 -20 03.14.24.153000 下午 +08:00

执行drop table salary_tbl;

这篇关于Oracle 原理: 闪回 flashback的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/745849

相关文章

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

hdu4407(容斥原理)

题意:给一串数字1,2,......n,两个操作:1、修改第k个数字,2、查询区间[l,r]中与n互质的数之和。 解题思路:咱一看,像线段树,但是如果用线段树做,那么每个区间一定要记录所有的素因子,这样会超内存。然后我就做不来了。后来看了题解,原来是用容斥原理来做的。还记得这道题目吗?求区间[1,r]中与p互质的数的个数,如果不会的话就先去做那题吧。现在这题是求区间[l,r]中与n互质的数的和

hdu4407容斥原理

题意: 有一个元素为 1~n 的数列{An},有2种操作(1000次): 1、求某段区间 [a,b] 中与 p 互质的数的和。 2、将数列中某个位置元素的值改变。 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.Inpu

hdu4059容斥原理

求1-n中与n互质的数的4次方之和 import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.PrintWrit

Oracle type (自定义类型的使用)

oracle - type   type定义: oracle中自定义数据类型 oracle中有基本的数据类型,如number,varchar2,date,numeric,float....但有时候我们需要特殊的格式, 如将name定义为(firstname,lastname)的形式,我们想把这个作为一个表的一列看待,这时候就要我们自己定义一个数据类型 格式 :create or repla

ORACLE 11g 创建数据库时 Enterprise Manager配置失败的解决办法 无法打开OEM的解决办法

在win7 64位系统下安装oracle11g,在使用Database configuration Assistant创建数据库时,在创建到85%的时候报错,错误如下: 解决办法: 在listener.ora中增加对BlueAeri-PC或ip地址的侦听,具体步骤如下: 1.启动Net Manager,在“监听程序”--Listener下添加一个地址,主机名写计

Oracle Start With关键字

Oracle Start With关键字 前言 旨在记录一些Oracle使用中遇到的各种各样的问题. 同时希望能帮到和我遇到同样问题的人. Start With (树查询) 问题描述: 在数据库中, 有一种比较常见得 设计模式, 层级结构 设计模式, 具体到 Oracle table中, 字段特点如下: ID, DSC, PID; 三个字段, 分别表示 当前标识的 ID(主键), DSC 当

寻迹模块TCRT5000的应用原理和功能实现(基于STM32)

目录 概述 1 认识TCRT5000 1.1 模块介绍 1.2 电气特性 2 系统应用 2.1 系统架构 2.2 STM32Cube创建工程 3 功能实现 3.1 代码实现 3.2 源代码文件 4 功能测试 4.1 检测黑线状态 4.2 未检测黑线状态 概述 本文主要介绍TCRT5000模块的使用原理,包括该模块的硬件实现方式,电路实现原理,还使用STM32类

oracle分页和mysql分页

mysql 分页 --查前5 数据select * from table_name limit 0,5 select * from table_name limit 5 --limit关键字的用法:LIMIT [offset,] rows--offset指定要返回的第一行的偏移量,rows第二个指定返回行的最大数目。初始行的偏移量是0(不是1)。   oracle 分页 --查前1-9

TL-Tomcat中长连接的底层源码原理实现

长连接:浏览器告诉tomcat不要将请求关掉。  如果不是长连接,tomcat响应后会告诉浏览器把这个连接关掉。    tomcat中有一个缓冲区  如果发送大批量数据后 又不处理  那么会堆积缓冲区 后面的请求会越来越慢。