大家好,欢迎来到IT知识分享网。
文章目录
1. 闪回查询
闪回查询从9i引入,可按照时间点或scn向前查询,获得修改前的数据;
闪回查询依赖于回滚段中存储的数据前镜像,通过设置 undo_retention 参数设置前镜像的保留时间;
查询的语法:
select ... as of scn | timestamp;
如:
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 ;
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
alter database archivelog;
配置归档;
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;
打开数据库只读
被删除的表闪回了
执行命令,闪回数据库之后必须以 resetlogs(重置日志) 的方式启动
alter database open resetlogs;
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/147606.html