oracle闪回

开启闪回必要条件:开启归档日志

SQL> archive log list;
Database log mode	       No Archive Mode
Automatic archival	       Disabled
Archive destination	       /opt/oracle/product/19c/dbhome_1/dbs/arch
Oldest online log sequence     8
Current log sequence	       10

检查是否开启闪回

SQL> select flashback_on from v$database;

FLASHBACK_ON
------------------
NO

开启归档

SQL> alter database archivelog;
alter database archivelog
*
ERROR at line 1:
ORA-01126: database must be mounted in this instance and not open in any
instance

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.

Total System Global Area 1593832664 bytes
Fixed Size		    9135320 bytes
Variable Size		  989855744 bytes
Database Buffers	  587202560 bytes
Redo Buffers		    7639040 bytes
Database mounted.

SQL> alter database archivelog;
Database altered.

SQL> alter database open;
Database altered.

设置闪回区

mkdir -p /data/oracle/fast_recovery_area
chown -R oracle:oinstall fast_recovery_area/

SQL> alter system set db_recovery_file_dest_size=60G scope=both;
System altered.

SQL> alter system set db_flashback_retention_target=4320 scope=both;
System altered.

SQL> alter system set db_recovery_file_dest='/data/oracle/fast_recovery_area' scope=both;
System altered.

开启flashback

SQL> alter database flashback on;
Database altered.

#确定闪回开启
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
YES

SQL> alter database flashback off;
Database altered.
闪回使用
(1)闪回查询

闪回查询主要是根据Undo表空间数据进行多版本查询,针对v 和 x 和x x动态性能视图无效,但对DBA_、ALL_、USER_是有效的

a.闪回查询

允许用户查询过去某个时间点的数据,用以重构由于意外删除或更改的数据,数据不会变化。

SELECT * FROM tab AS OF TIMESTAMP TO_TIMESTAMP('20130506 20:00:00','YYYYMMDD HH24:MI:SS');

create table tab_bak as SELECT * FROM tab AS OF TIMESTAMP TO_TIMESTAMP('20130506 20:00:00','YYYYMMDD HH24:MI:SS');
b.闪回版本查询

用于查询行级数据库随时间变化的方法

c.闪回事务查询

用于提供查看事务级别数据库变化的方法

(2)闪回表(update/insert/delete)

闪回表就是对表的数据做回退,回退到之前的某个时间点,其利用的是undo的历史数据,与undo_retention设置有关,默认是14400分钟(1天)
同样,sys用户表空间不支持闪回表,要想表闪回,需要允许表启动行迁移(row movement)

alter table scott.dept enable row movement;

flashback table scott.dept to timestamp to_timestamp('2017-12-14 16:20:00','yyyy-mm-dd hh24:mi:ss');

alter table scott.dept disable row movement;
(3)闪回DROP(drop table)

当一个表被drop掉,表会被放入recyclebin回收站,可通过回收站做表的闪回。表上的索引、约束等同样会被恢复
不支持sys/system用户表空间对象,可通过alter system set recyclebin=off;关闭回收站功能

show recyclebin;

flashback table t to before drop;
(4)闪回数据库(truncate/多表数据变更)

数据库闪回必须在mounted状态下进行,基于快照的可以再open下进行闪回库
闪回数据库主要是将数据库还原值过去的某个时间点或SCN,用于数据库出现逻辑错误时,需要open database resetlogs

a.全库闪回
truncate table scott.EMP;

shutdown immediate;

flashback database to timestamp to_timestamp('2017-12-14 14:12:46','yyyy-mm-dd HH24:MI:SS');

alter database open resetlogs;
b.快照闪回

针对主库和备库都可以创建闪回快照点,然后恢复到指定的快照点,但主库一旦恢复到快照点,备库的同步则需要重新同步

create restore point before_201712151111 guarantee flashback database;

shutdown immediate;

startup mount;

flashback database to restore point before_201712151111;

alter database open resetlogs;
c.闪回snapshot standby

此功能在11GR2非常实用,可自动创建闪回点、开启闪回日志,可完成线上数据测试后,然后做数据库闪回恢复主备关系

待实践更新
(5)闪回归档

(增加、修改、重命名、删除表的列、truncate表、修改表的约束、以及修改分区表的分区规范)

闪回注意事项
  1. 数据库闪回需要在mounted下进行,并且open时需要使用resetlogs
  2. 闪回DROP只能用于非系统表空间和本地管理的表空间,外键约束无法恢复,对方覆盖、重命名需注意
  3. 表DROP,对应的物化视图会被彻底删除,物化视图不会存放在recyclebin里
  4. 闪回表,如果在做过dml,然后进行了表结构修改、truncate等DDL操作,新增/删除结构无法做闪回
  5. 闪回归档,必须在assm管理tablespace和undo auto管理下进行
  6. 注意闪回区管理,防止磁盘爆满,闪回区空间不足等
  7. 主库做库的闪回,会影响备库,需要重新同步
  8. snapshot standby 不支持最高保护模式
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

四美

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

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

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

打赏作者

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

抵扣说明:

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

余额充值