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

相关文章

oracle DBMS_SQL.PARSE的使用方法和示例

《oracleDBMS_SQL.PARSE的使用方法和示例》DBMS_SQL是Oracle数据库中的一个强大包,用于动态构建和执行SQL语句,DBMS_SQL.PARSE过程解析SQL语句或PL/S... 目录语法示例注意事项DBMS_SQL 是 oracle 数据库中的一个强大包,它允许动态地构建和执行

PLsql Oracle 下载安装图文过程详解

《PLsqlOracle下载安装图文过程详解》PL/SQLDeveloper是一款用于开发Oracle数据库的集成开发环境,可以通过官网下载安装配置,并通过配置tnsnames.ora文件及环境变... 目录一、PL/SQL Developer 简介二、PL/SQL Developer 安装及配置详解1.下

MySQL中的MVCC底层原理解读

《MySQL中的MVCC底层原理解读》本文详细介绍了MySQL中的多版本并发控制(MVCC)机制,包括版本链、ReadView以及在不同事务隔离级别下MVCC的工作原理,通过一个具体的示例演示了在可重... 目录简介ReadView版本链演示过程总结简介MVCC(Multi-Version Concurr

oracle如何连接登陆SYS账号

《oracle如何连接登陆SYS账号》在Navicat12中连接Oracle11g的SYS用户时,如果设置了新密码但连接失败,可能是因为需要以SYSDBA或SYSOPER角色连接,解决方法是确保在连接... 目录oracle连接登陆NmOtMSYS账号工具问题解决SYS用户总结oracle连接登陆SYS账号

Oracle数据库如何切换登录用户(system和sys)

《Oracle数据库如何切换登录用户(system和sys)》文章介绍了如何使用SQL*Plus工具登录Oracle数据库的system用户,包括打开登录入口、输入用户名和口令、以及切换到sys用户的... 目录打开登录入口登录system用户总结打开登录入口win+R打开运行对话框,输php入:sqlp

查询Oracle数据库表是否被锁的实现方式

《查询Oracle数据库表是否被锁的实现方式》本文介绍了查询Oracle数据库表是否被锁的方法,包括查询锁表的会话、人员信息,根据object_id查询表名,以及根据会话ID查询和停止本地进程,同时,... 目录查询oracle数据库表是否被锁1、查询锁表的会话、人员等信息2、根据 object_id查询被

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

数据库oracle用户密码过期查询及解决方案

《数据库oracle用户密码过期查询及解决方案》:本文主要介绍如何处理ORACLE数据库用户密码过期和修改密码期限的问题,包括创建用户、赋予权限、修改密码、解锁用户和设置密码期限,文中通过代码介绍... 目录前言一、创建用户、赋予权限、修改密码、解锁用户和设置期限二、查询用户密码期限和过期后的修改1.查询用

Oracle数据库使用 listagg去重删除重复数据的方法汇总

《Oracle数据库使用listagg去重删除重复数据的方法汇总》文章介绍了在Oracle数据库中使用LISTAGG和XMLAGG函数进行字符串聚合并去重的方法,包括去重聚合、使用XML解析和CLO... 目录案例表第一种:使用wm_concat() + distinct去重聚合第二种:使用listagg,

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制