闪回内容简介
01 闪回技术讲解
02 表drop闪回恢复
03 闪回表的类型
04 闪回注意事项
一、闪回概述
闪回主要是为快速的恢复数据,查询历史数据提供了很大的便捷方法
二、闪回技术实现的原理
我们先了解一下Oracle的闪回原理,闪回查询主要是根据Undo表空间数据进行多版本查询,针对v$和x$动态性能视图无效,但对DBA_、ALL_、USER_是有效的
闪回表就是对表的数据做回退,回退到之前的某个时间点,其利用的是undo的历史数据,与
undo_retention设置有关,默认是1440分钟(1天),允许用户查询过去某个时间点的数据,用
以重构由于意外删除或更改的数据,数据不会变化。
注:了解一下Oracle在开启闪回的步骤
1、开启归档,数据库需要设置在mount状态
2、设置一个闪回区,用来存放与闪回相关的信息
3、开启flashback功能,alter database flashback on;
4、查看闪回是否已经开启 select flashback_on from v$database;
三、Kingbase数据库开启闪回步骤
1、KES开启闪回必要条件
插件 shared_preload_libraries =‘…kdb_flashback'
编辑 kingbase.conf 配文件
配置 kdb_flashback.db_recyclebin=on
2、检查是否开启闪回
alter system set kdb_flashback.db_recyclebin=on;
select sys_reload_conf();
show kdb_flashback.db_recyclebin ;
打开闪回开关
四、闪回功能测试
1、表drop闪回恢复
1.创建测试表
create table mytest(id int,name text);
2.在表中添加数据
insert into mytest select generate_series(1,1000),md5(random());
3.删除表
drop table mytest ;
4.在回收站查看删除的表
select * from recyclebin;
注:recyclebin是一个视图,基础表是sys_recyclebin,测试可以用drop view recyclebin删除这个视图,误删!!!
5.闪回表
flashback table mytest to before drop;
6.验证数据是否完整
select * from mytest limit 2;
五、闪回表的类型
主要介绍数据库中与表相关的数据库对象,在闪回过程中的一些变化,及注意的一些点
1、测试truncate表,之后不能进行闪回
truncate table mytest ;
注:truncate的实质是在不修改数据块的情况下,通过修改segment header的data_object_id、hwm、extent map等信息来实现清空表的目的
2、恢复索引名称
当我们drop table之后,通过闪回表恢复表数据之后,表上的索引也会跟随恢复,但是需要重新命名index
通过 alter index ... rename to ind_test; 语句重新修改索引名称
3、测试视图
create view mytest_view as select * from mytest; 对基础表的drop影响了视图的查询
4、测试物化视图
drop table mytest cascade; 加上cascade选项删除相关的数据库对象
drop materialized view mytest_view ;
5、重建相关的视图
create view mytest_view as select * from mytest;
create materialized view mv_test as select * from mytest;
6、序列表
create table mytest_seq(id serial,name varchar(200)); 会显示序列信息
7、表的同义词
create public synonym tt100 for mytest; drop表会将表的同义词删除,通过闪回恢复同义词数据
8、分区表
当drop分区表的时候,将删除所有的表分区,通过闪回恢复分区表数据
1.创建分区表
CREATE TABLE ft_q (
d1 int,
d2 char(10),
d3 date
)
PARTITION BY RANGE (d3)
(
PARTITION ft_q VALUES less than(to_date('2022-7-01')) ,
PARTITION ft_q2 VALUES less than(to_date('2022-8-01')) ,
PARTITION ft_q3 VALUES less than(to_date('2022-9-01')));
2.添加数据
insert into ft_q values(1,'aaa','2022-01-02');
insert into ft_q values(1,'bbb','2022-07-02');
insert into ft_q values(1,'ccc','2022-08-02');
3.闪回表恢复分区表数据
drop table ft_q;
flashback table ft_q to before drop; 在回收站中可以看到分区表ft_q所有分区信息
六、回收站
1、清空回收站 recyclebin
使用 purge recyclebin; 可以清空回收站记录的信息,Purge recyclebin 操作之后,不能再继续
闪回需要的表
2、回收站原理
回收站 recyclebin是一个视图
\sv+ recyclebin 可以查看到关联的系统表
3、外部表
只是一个查询连接而已
drop foreign table test_tt; 回收站并没有记录外部表的相关信息
七、闪回注意事项
1、Truncate等DDL操作,新增/删除结构无法做闪回
2、在Purge recyclebin 操作之后,不能再继续闪回需要的表
3、表DROP,对应的物化视图会被彻底删除,物化视图不会存放在recyclebin里
八、闪回常用语句
1、
开启闪回功能
kdb_flashback.db_recyclebin=on
2、
闪回表语句
flashback table mytest to before drop;
3、
修改索引名称
通过 alter index ... rename to ind_test; 语句重新修改索引名称
4、
清空回收站
purge recyclebin;
闪回讲解完成