文章目录
闪回技术
Flashback 技术在Oracle 10g中提供了更强大的功能。它包括了
-
Flashback Query
闪回查询
查询过去某个时刻或者某个SCN 值时表中数据的快照select* fromhr.employees as of timestamp sysdate-2/24 where employee_id=140
-
Flashback Table
闪回表
将表中数据恢复到过去的某个时刻或者某个SCN值的状态。闪回表与闪回查询不同,闪回查询只是返回过去某个时刻或者某个SCN值中数据的快照,并不修改表的当前状态,而闪回表是将表恢复到之前的某个状态。
flashback table employees to timestamp to_timestamp('2015-5-14 11:23:23'.'yyyy-mm-dd hh24:mi:ss')
-
Flashback Version Query
闪回版本
查询过去某个时间段或者某刻SCN 段内特定表中数据的变化情况select verxions_xi xid,versions_starttime starttime,versions_endtime endtime,versions_operation operation,salary from hr.employees versions between timestamp minvalue and maxvalue where employee_id=140 order by starttim
-
Flashback Transaction Quey
闪回事务
查看某个事务或所有事务在过去的一段时间对数据进行的修改操作select xid ,start_scn,end_scn,commit_scn,operation,logon_user,undo_sql from flashback_transaction_query where xid= HEXTORAW(' XID ');
-
Flashback Drop
闪回删除
可以恢复用drop table语句删除的表(注意:闪回删除只针对Drop命令,对truncate操作无能为力)。是一种意外删除的表恢复机制。
相应的索引,数据库约束也会被还原(除了外键约束)flashback table employees to before drop rename to new_employees;
-
Flashback database。
闪回数据库
将数据库恢复到过去某个时刻或者某个SCN 值时的状态flashback database to scn 3423523;
其中:
-
基于undo data
- Flashback Query 闪回查询
- Flashback Version Query 闪回版本
- Flashback Transaction Quey 闪回事务
需要额外开启的东西:https://blog.csdn.net/rlhua/article/details/13996769
-
基于undo data、row movement
- Flashback Table 闪回表
注意:
- 在sys用户或以sysdba 身份登录的用户不能执行闪回表操作
- 开启 ROE movement 特性
alter table employees enable row movement
- Flashback Table 闪回表
-
基于recycle bin、undo data
- Flashback Drop 闪回删除
首先要看我们的回收站是否开着(当然在11 g 回收站是默认开着的)
show parameter recyclebin NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ recyclebin string on
如果关闭呢 就可以使用
alter system set recyclebin=no
- Flashback Drop 闪回删除
-
基于Flashback logs、Archivelog mode、Flash recovery area
- Flashback database 闪回数据库
闪回数据库不使用撤销数据,闪回数据库是需要:
闪回日志文件
归档重做日志文件
使用闪回数据库你首先要设置好数据库的
快速恢复区
和闪回日志的保留时间,数据库中的恢复写入进程 (RVWR)周期性的将每个数据文件发生改变的数据库的镜像副本写入闪回日志文件中,利用这些数据块的镜像副本可以重建数据文件的内容。
启用快速恢复区
show parameter db_recovery_file NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_recovery_file_dest string /u01/app/oracle/fast_recovery_area db_recovery_file_dest_size big integer 500M
设置 快速恢复区的路径和大小
alter system set db_recover_file=' 路径‘ scope=both; alter sy stem set db_recover_file_dest_size=2G scope=both
配置快速恢复区
- 数据库必须是在归档(
ARCHIVELOG
)的模式下 - 在数据库加载(
mount
)的情况下开启 flashback_on 特性
可以恢复到2天前(2880min前)alter system set db_flashback_retention_target=2880;
- Flashback database 闪回数据库
闪回数据归档
三种闪回技术(闪回数据库、闪回删除和各种形式的闪回查询)很有用,但是它们的闪回能力都很有限。可以配置闪回数据库归档来保证将表闪回到过去任何时间——或许是多年之前的某个时间。它还能保证当数据过期时给予删除。
从体系结构上看,闪回数据归档要求一个或者多个表空间、用于每个受保护的表的各种段以及一个新的后台进程:FBDA进程。DBA必须创建表空间和其内部的归档,为每个归档指定保留期限,并指定由归档保护的表。必须的段会自动创建,并根据要求启动FBDA。
- 就DML来说,用户和应用软件不会意识到任何变化。
- 一些DDL命令会受到影响。
例如,TRUNCATE命令较慢,DROP命令无法执行。
视图:
DBA_FLASHBACK_ARCHIVE
描述配置的归档DBA_FLASHBACK_ARCHIVE_TS
显示每个表空间的每个归档分配的配额DBA_FLASHBACK_ARCHIVE_TABLES
列出启用了归档的表
创建一个提供闪回数据归档使用的表空间
SQL> create tablespace fda datafile 'fda1.dbf' size 10m;
Tablespace created
在表空间创建一个保留时间为1个月的闪回数据归档
SQL> create flashback archive fla1 tablespace fda retention 1 month ;
Done
创建用于此练习的模式,并授予它DBA角色
SQL> grant dba to fdbauser identified by fdbauser;
Grant succeeded
授予用户操作归档的必要权限
SQL> grant flashback archive on fla1 to fdbauser;
Grant succeeded
作为FDBAUSER进行连接。创建一个表并为此表启用闪回数据归档
[oracle@oracle dbs]$ sqlplus fdbauser/fdbauser;
SQL*Plus: Release 12.2.0.1.0 Production on Fri May 7 10:05:49 2021
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Con