闪回技术概览
1.查看数据的过去状态
2.可沿时间轴向前或者向后闪回
3.协助用户进行错误分析和恢复
4.简单的sql实现闪回(或者DBMS_FLASHBACK包)
5.闪回时间与数据库大小无关(主要是数据库在闪回时间段数据变化有关)
闪回类型
flashback database flashback table flashback drop flashback transaction flashback transaction flashback transaction query flashback query flashback version query(数据库版本的闪回查询)
闪回技术
1.基于undo数据的闪回
1)闪回查询:查询一张表在过去时间的数据状态
2)闪回表:把一张表山回到过去的时间点
3)闪回版本查询:一段时间多个事务操作对应表中数据状态
4)闪回事务查询:查询事务对应的undo sql;闪回数据归档
闪回查询前提
基于undo数据,确实是否可以查询对象或将对象改回到过去的某个时间点。
undo_management=auto
闪回到精确的时间点 select * from sh.test_tab1 as of timestamp to_timestame('2022-12-21 08:45:00','yyyy-nn-dd hh24:mi:ss'); 闪回到多久之前 select * from tab as of timestamp sysdate-1/24; 闪回到指定scn select * from tab2 as of scn 553423;
闪回查询版本技术
具体伪劣有很多
versions_startscn 数据版本被创建时的scn versions_starttime 数据版本被创建时的时间戳 versions_endscn versions_endtime versions_xid 数据版本被创建时的事务号 versions_operation 数据版本创建时事务类型
select versions_xid,salary from employees versions between timestamp <t1> and <t2> where employee_id=200;
另外可以关联 flashback_transaction_query,了解更多的闪回查询,例如undo_sql可以直接给出数据修复需要执行的sql
闪回表技术
限制:只能将闪回到undo所允许的指定时间内
需要开启行迁移(row movement)
alter table table_name enable row movement;
闪回到指定时间点
flushback table table_name to timestamp <time>
闪回到n小时之前
flushback table table_name to timestamp sysdate -1;
闪回到指定scn
flushback table table_name to scn 234;
FDA闪回数据归档技术
基于undo有很多局限性,undo会被覆盖
闪回归档步骤
1)创建一个供闪回数据库使用的表空间
2)在该表空间创建闪回数据归档
3)创建一个用户并授权dba角色
4)登录创建一个表启用闪回数据归档
5)执行查询来确定归档创建的对象
create flushback archive default fal1 tablespace tbs1 quota 10G retention 1 year;
基于recyclebin的闪回删除技术
闪回删除技术:
1)针对非system 表空间
2)适用于通过drop 操作和非purge 的删除对象(包括索引,约束,触发器)
flashback table employees to beforce drop;
基于闪回数据库日志的闪回数据库技术
闪回数据库:把数据库闪回到过去的某一个时间点,针对逻辑故障,或者对相同数据做循环迭代测试。
闪回数据库应用场景
闪回数据库:truncate table,多张表都发生非预期的更改,数据库升级中的回退,循环测试
闪回表:drop table(基于回收站)
闪回表:使用错误的where字句对表进行了更新(基于undo)
闪回表:对比当前的和过去的时间的数据(undo)闪回查询
闪回表:比较指定行数据的不通版本(undo)
table and transaction :事务审计,合规,历史数据保留(指定的表空间)
实验1
闪回查询
select count(*) from testuser.test_tab as of timestamp sysdate -1/24/60;
查看一分钟前的数据行数(闪回就像时间游戏中追溯)
select count(*) from testuser.test_tab as of timestamp to_timestamp('2023-12-01 12:00:00','yyyy-mm-dd hh24:mi:ss')+1*INTERVAL '1' MINUTE;
查看具体时间周围几分钟的数据状态
闪回版本查询
select versions_startscn,versions_starttime,versions_endscn,versions_endtime,versions_xid,versions_operaton,id,name,salary from test_user_tab versions between timestamp <ti> and <t2> wehre id=1;
闪回表
alter table table_name enable row movement;
flushback table test_user.tab to timestamp to_timestamp(略);
同时这个也可以使用
+1*INTERVAL '1' MINUTE;
flushback table test_user.test_tab to before drop;
注意:多租户环境闪回可以只闪回pdb
闪回PDB
开启数据库闪回
- alter system set db_recovery_file_dest_size=20g;
- alter system set db_recovery_file_dest='/home/db/oracle/'
alter session set container=pdb; alter pluggable database pdb close immediate; flashback pluggable database pdb to timestamp to_timestamp();
alter pluggable database pdb open resetlogs;
标签:闪回,versions,timestamp,技术,undo,oracle,table,flashback From: https://www.cnblogs.com/dbahrz/p/17166391.html