oracle 闪回查询,闪回版本查询,闪回事务查询,闪回表,闪回删除,闪回数据库

1. 闪回查询

闪回查询从9i引入,可按照时间点或scn向前查询,获得修改前的数据;

闪回查询依赖于回滚段中存储的数据前镜像,通过设置 undo_retention 参数设置前镜像的保留时间;
在这里插入图片描述

查询的语法:

select  ...  as of scn | timestamp;

注:
说明:如果想让表中的数据回到操作之前,闪回的数据写入另一个表,然后将现在的表删除,将另一表改名 rename ;

如:

1.1. 闪回时间查询

对emp表进行修改,记录一下操作时间:

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
查看不同时间点的数据:

select * from emp  as of timestamp to_date('2022-04-03 22:51:14','yyyy-mm-dd hh24:mi:ss');

在这里插入图片描述

1.2. 闪回scn查询
(1) 获取scn号的方法
 select dbms_flashback.get_system_change_number from dual;

select current_scn from v$database;

在这里插入图片描述

(2) 闪回scn查询命令

命令格式:

select * from emp  as of scn  2086698;

2. 闪回版本查询

select  ...  from ... versions between 

select 后面可选择伪列,来获理事务的开始、结束时间、SCN号、ID号等

如:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

闪回版本查询:

select  versions_starttime ,versions_endtime,versions_xid,versions_operation,EMPNO, ENAME,JOB,MGR,HIREDATE,     SAL ,COMM, DEPTNO  from emp versions between   timestamp minvalue and maxvalue;

versions_xid 表示 事务号
versions_operation 表示 执行的操作类型
在这里插入图片描述

select  versions_starttime ,versions_endtime,versions_xid,versions_operation,EMPNO, ENAME,JOB,MGR,HIREDATE,     SAL ,COMM, DEPTNO  from emp versions between   scn minvalue and maxvalue;

3. 闪回事务查询

oracle10g开始可以进行基于闪回版本查询的恢复,就是闪回事务查询 ,从 flashback_transaction_query 中查询引起数据变化的事务,和撤销事务的 SQL 语句,就是查询 operation 和 undo_dql 列

在这里插入图片描述

select xid,operation,undo_sql from flashback_transaction_query where table_name='EMP' and table_owner='SCOTT' order by start_timestamp desc;

通过执行同一事务下的undo_dql,即可回滚事务;

4. 闪回表

闪回表是把表里的数据回退到以前的某个时刻或者 SCN 上

特点:可以在线操作;自动恢复相关的属性,包括索引、触发器等;

前提:对表启用行迁移

语法:

flashback table <table_name> to timestamp | scn

步骤:

alter table emp enable row movement; 
flashback table emp to timestamp to_date('2022-04-03 22:51:14','yyyy-mm-dd hh24:mi:ss');

在这里插入图片描述

注意:sys 的表不能闪回

5. 闪回删除

可以恢复一个被 drop 的对象,因为进行 drop 时,Oracle 先把它放到回收站中;

 flashback table student to before drop;

在这里插入图片描述

5. 1 查看回收站内的信息
select * from user_recyclebin;

在这里插入图片描述
在这里插入图片描述

select * from "BIN$1Y6FIVerS1eZtaHVmioWRg==$0";

在这里插入图片描述

5. 2 彻底删除
drop table <table_name> purge
5. 3 清空回收点
purge recyclebin;

在这里插入图片描述

5. 4 通过参数 recyclebin 来启用、禁用回收站

必须使用 ststem 用户:

show parameter recycle; 

在这里插入图片描述

alter session set recyclebin=off;   --表示在当前会话中,不再使用回收站

6. 闪回数据库

如果数据库出现逻辑错误,无法采用闪回表的方式进行恢复,或者数据库的结构发生了改变,可以通过闪回数据库的方式把整个数据库回退到出错前的时间点上。

步骤如下:

6. 1 配置数据库为归档模式
sqlplus /nolog
conn / as sysdba 

archive log list; 查询数据库日志模式
在这里插入图片描述

shutdown immediate; 关闭数据库
在这里插入图片描述

startup mount ;打开到 mount 状态
在这里插入图片描述

alter database archivelog; 配置归档;
在这里插入图片描述

alter database open; --打开数据库;
在这里插入图片描述

6. 2 配置闪回恢复区:

show parameter db_rec; 查询恢复区地址;
在这里插入图片描述

show parameter db_flashback_retent; 得到最长的数据库返回时间,一般是 1440 分钟,即可以回到一天前
在这里插入图片描述

6. 3 配置闪回保留时间
6. 4 启用数据库闪回,在数据库 mount 状态时执行
alter database flashback on;

在这里插入图片描述
在闪回目录下自动创建文件
在这里插入图片描述
记录时间,对数据库进行修改,用于测试:
在这里插入图片描述

在这里插入图片描述

6. 5 进行闪回数据库,必须在 mount 状态下执行
flashback database to timestamp | scn

如:

flashback database to timestamp to_date('2022-04-04 00:03:37','yyyy-mm-dd hh24:mi:ss');

在这里插入图片描述

alter database open read only; 打开数据库只读
被删除的表闪回了
在这里插入图片描述

startup force 强制启动报错
在这里插入图片描述

执行命令,闪回数据库之后必须以 resetlogs(重置日志) 的方式启动

alter database open resetlogs;  

在这里插入图片描述

  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

但行益事莫问前程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值