前言
今日看了Oracle原厂老师讲的数据库闪回技术的公开课,感觉受益匪浅。整理了一下关于数据库闪回功能的一些知识和相关测试,在此做下分享。
什么是闪回?
Oracle数据库闪回技术是一组独特而丰富的数据恢复解决方案,通过有选择地、有效地消除错误的影响,可以逆转人为错误。
查看数据的过去状态
可沿时间轴向前或向后闪回
协助用户进行错误分析和恢复
简单的命令行操作(或者DBMS_FLASHBACK包)
闪回时间与数据库大小无关
闪回支持不同级别的恢复,包括行、事务、表和整个数据库:
Flashback Database
Flashback Table
Flashback Drop
Flashback Transaction
Flashback Transaction Query
Flashback Query
Flashback Version Query
基于UNDO的闪回:闪回查询、闪回版本查询、闪回表
闪回查询技术
闪回查询某精确时间点
select*from table_name ASOFTIMESTAMP TO_TIMESTAMP('2023-02-23 13:14:00','YYYY-MM-DD HH24:MI:SS');
闪回查询到多久之前(例如 一分钟前)
select*from table_name ASOFTIMESTAMP sysdate-1/24/60;
闪回查询到指定scn
select*from table_name asof scn 55124124;
闪回版本查询技术
查看某一时间段内数据的变化
SELECT versions_startscn,
versions_starttime,
versions_endscn,
versions_endtime,
versions_xid,
versions_operation,
last_name,
salary
FROM employees VERSIONS BETWEEN TIMESTAMPTO_TIMESTAMP('2023-03-08 14:00:00','YYYY-MM-DD HH24:MI:SS')AND TO_TIMESTAMP('2023-03-08 17:00:00','YYYY-MM-DD HH24:MI:SS')WHERE first_name ='John';
字段含义
VERSIONS_STARTSCN:数据版本被创建时的SCN
VERSIONS_STARTTIME:数据版本被创建时的时间戳
VERSIONS_ENDSCN:数据版本消逝时的SCN
VERSIONS_ENDTIME:数据版本消逝时的时间戳
VERSIONS_XID:数据版本被创建时的事务号
VERSIONS_OPERATION: 数据版本创建时的事务类型
闪回表技术
可以将表恢复到过去的指定时间点
开启行移动功能
altertable table_name enablerow movement;
闪回表到指定时间点
flashback table table_name totimestamp to_timestamp('2023-02-23 13:14:00','yyyy-mm-dd hh24:mi:ss');
闪回表到多久之前
flashback table table_name totimestampto sysdate-1/24/60;
闪回表到指定scn号
flashback table table_name to scn 3823947923;
FDA闪回数据归档技术
因为undo有保留时间限制,可以被覆盖,时间久远的数据无法通过undo进行闪回,此时可以利用闪回数据归档技术,根据时间限制将undo数据持久化在其他表空间上,不受undo的时间限制
闪回数据归档步骤:
创建一个供闪回数据库使用的表空间在该表空间
创建闪回数据归档,时间期限自定义
创建一个用户并授予DBA的角色
授予用户操作的必要权限登录
创建一个表启用闪回数据归档
执行查询来确定归档创建的对象
先创建普通表空间 然后在表空间中创建FDA
CREATE FLASHBACK ARCHIVE DEFAULT fla1 TABLESPACE tbs1QUOTA 10G RETENTION 1YEAR;
基于Recyclebin(回收站)的闪回删除技术
闪回删除技术:
针对非system 表空间
适用于通过drop 操作和非purge 的方式删除的对象可以在recyclebin使用闪回删除操作还原删除的对象(包括相关索引,约束,触发器)
回收站(recycle bin)
通过数据字典视图快速查看:USER_RECYCLEBIN 和DBA_RECYCLEBIN。
删除的表在回收站中被重新命名
闪回被删除的表
flashback table table_name to before drop;
基于闪回数据库日志的闪回数据库技术
需开启数据库闪回日志
查看数据库是否开启闪回日志
select flashback_on from v$database;
开启闪回日志之前必须要设置闪回恢复区的路径和大小
show parameter recover
开启闪回日志
alterdatabase flashback on;
闪回数据库:把数据库闪回到过去的时间点,针对逻辑故障,或者对相同数据做循环迭代测试。
flashback databasetotimestamp to_timestamp('2023-03-08 16:18:00','yyyy-mm-dd hh24:mi:ss');
版权归原作者 学无止境的小一 所有, 如有侵权,请联系我们删除。