闪回技术的总结

今天我总结了一下,闪回技术。
闪回技术包括:闪回查询、闪回删除、闪回版本查询、闪回事务查询。闪回数据库。闪回表:
接下来我们就一一总结一下它们的概念和语法:
首先我们说一下,ORACLE 数据库的闪回特性,能够完成哪些工作:
  • 查询数据库过去某一时刻的状态。
  • 查询过去一段时间内数据变化情况的元数据。
  • 将表中数据和删除表恢复到过去的某一时刻的状态。
  • 自动跟踪,存档数据变化信息。
  • 回滚事务及其依赖事务的操作。
闪回特性分类:
闪回查询:利用撤销表空间中的回退信息,查询过去某个时刻或者某个SCN 值时表中数据的快照。
闪回版本查询:利用撤销表空间中的回退信息,查询过去某个时间段或者某刻SCN 段内特定表中数据的变化情况;
闪回事务查询;利用撤销表空间中的回退信息,查看某个事务或所有事务在过去的一段时间对数据进行的修改操作
闪回表:利用撤销表空间中的回退信息,将表中数据恢复到过去的某个时刻或者某个SCN值的状态。闪回表与闪回查询不同,闪回查询只是返回过去某个时刻或者某个SCN值中数据的快照,并不修改表的当前状态,而闪回表是将表恢复到之前的某个状态。
闪回数据库:利用存储在快速恢复区的闪回日志信息,将数据库恢复到过去某个时刻或者某个SCN 值时的状态。
闪回数据归档:利用保存在一个或者多个表空间中的数据变化信息,查询过去某个时刻或者某个SCN 值中表数据快照,闪回与闪回查询功能机制类似,但实现机制不同。

一:闪回查询
  1.首先闪回查询是主要利用数据库撤销表空间中存放的回退段信息,
  2.闪回查询是基于数据库的回退信息实现,因此是有闪回查询功能,需要启动数据库撤销表空间来管理回退信息。
      闪回查询我们要查看撤销表空间的相关的数据库参数
      show parameter undo;
  此时有三个参数:
 undo_management              AUTO    
undo_retention                     900      回退信息的保留时间
undo_tablespace                   UNDOTBS1      回退信息储存表空

撤销表空间大小=undo_retention * 每秒产生数据块的数量 * db_block_siaze + 冗余量
ORACLE 建议吧 undo_retention 设置为一天的保留信息。
alter system set undo_retention=86400

由于UNDO_retention 参数无法保证没有过期的回退信息不会被覆盖,所以还需要启用撤销表空间的retention guarantee 特性。
alter tablespace undotbs1 retention guarantee 
  3闪回查询操作
   as  of  字句指定过去的某个时刻或者SCN 
  (1)基于  AS OF TIMESTAMP 闪回的查询 
一下由于时间的原因 我只把语句写上 具体实验可以自己做;说一下大题的思路
   首先设置一下系统的时间格式:
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
打开时间记录
set time on 
更新数据
然后 进行闪回查询 :
select * from hr.employees as of timestamp to_timestamp ('2015-5-14 10:08:23' ,'yyyy-mm-dd hh24:mi:ss') where empliyee_id=140;
或者是前两个小时的
select* fromhr.employees as of timestamp sysdate-2/24 where employee_id=140

如果需要将数据恢复过去某个时刻的状态那就可以执行下面的语句
update hr.employees set=(select * from hr.employees as of timestamp sysdate-2/24 {或者:to_timestamp('2015-5-15 10:15:23’,'yyyy-mm-dd hh24:mi:ss'} where employee_id=140) where employee_id=140;
 (2)  AS OF SCN 的闪回查询
 首先你要知道你要查询的是SCN 
select current_scn from v$database;
在系统时间与scn 之间的对应关系可以通过查询SYS 模式下的smon_scn _time 表来获得
如果你现在不知道你想查询的那个时候的scn 值 
你可以查询  smon_scn_time
select scn,to_char(time_dp,'2015-5-15 10;34;34','yyyy-mm-dd hh24:mi:ss') time_dp from smon_scn_time 
然后查询
select * from hr.employees
as of scn 444444
where hr.employees

二,闪回版本查询
闪回版本查询可以跟踪一条记录在一段时间的变化情况,既一条记录提交的多个版本。在闪回版本查询中,返回的数据中可以包括与提交事务相关的伪列 ,通过这些伪列可以了解数据库中的哪个事务在何时(when) 对数据进行那种情况。  
基于 versions between timestamp 的闪回版本查询
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

基于versions between scn 的闪回版本查询
select versions_xid,versions_startscn  startscn,versions_endscn endscn,versions_operation opertion,salary 
from hr.employees
versions between scn minvalue and maxvalue
where employee_id=140
orader by startscn;

可以将versions between 与 as oftimestamp to_timestamp('2015-5-14 11:23:23'.'yyyy-mm-dd hh24:mi:ss')   
select versions_xid xid,versions_starttime starttime,versions_endtime endtime,verstions_operation operation,salary
from hr.employees
versions between timestamp minvalue and maxvalue
as of timestamp to_timestamp ('2015-5-14 11:23:23'.'yyyy-mm-dd hh24:mi:ss') 
where employees
order by starttime;

与  as  of  scn   
select versions_xid xid,versions_staratscn startscn,versions_endscn endscn,versions_operation operation,salary
from hr.employees
versions between scn minvalue and maxvalue
as of scn 
where employee_id=140
order by startscn;

三. 闪回事务查询
    1.闪回事务的查询可以返回在一个特定事务中行的历史及与事务相关的元数据
在11g 中为了记录事务操作的详细信息,需要启动数据库的日志追加功能
开启数据库的日志追加功能
alter database add supplemental log data 
关闭数据库的日志追加功能
alter database drop supplemental data;
闪回事务查询 静态字典视图 flashback_transaction_query 
desc flashback_transaction_query Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
XID                                                RAW(8)
START_SCN                                          NUMBER
START_TIMESTAMP                                    DATE
COMMIT_SCN                                         NUMBER
COMMIT_TIMESTAMP                                   DATE
LOGON_USER                                         VARCHAR2(30)
UNDO_CHANGE#                                       NUMBER
OPERATION                                          VARCHAR2(32)
TABLE_NAME                                         VARCHAR2(256)
TABLE_OWNER                                        VARCHAR2(32)
ROW_ID                                             VARCHAR2(19)
UNDO_SQL                                           VARCHAR2(4000)


   2. 闪回事务查询操作
小明 误删除emp表中一条数据
下面我们进行分析 找回数据
 首先你要确定你在哪一步删除的数据
select versions_xid xid,versions_startscn startscn,versions_endscn endscn,versions_operation operation,empname,salary
from emp
versions between scn minvalue and maxcalue
where empno = 111;
版本查询结果是按照事务开始的时间降序排序。
select xid ,start_scn,end_scn,commit_scn,operation,logon_user,undo_sql
from flashback_transaction_query
where xid= HEXTORAW('  XID  ');
如果要撤销删除错误的误操作,就可以执行相应的UNDO_SQL.

四 闪回表查询 
  1.闪回表是将表恢复到过去某个时刻的状态 
为了使用 flashback table 语句 首先你要拥有以下权限 
用户必须有 flashback any table 系统权限
用户要有相应表 的  select insert delete alter 权限 
更重要的一点是 必须保证恢复表到目标时刻或者scn 值时的状态在  撤销表空间里面 
  2. 闪回表操作
在sys用户或以sysdba 身份登录的用户不能执行闪回表操作 
开启 ROE movement 特性
alter table employees enable row movement 
闪回表到以前的某一时刻
flashback table employees to timestamp to_timestamp  ('2015-5-14 11:23:23'.'yyyy-mm-dd hh24:mi:ss') 
flashback table employees to scn 342453524 ;

五闪回删除
1.闪回删除可以用drop table 语句删除的表 是一种意外删除的表恢复机制
闪回删除是基于回收站的;
所以我们首先要看我们的回收站是否开着 
当然在11 g 回收站是默认开着的 
show parameter recyclebin 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
recyclebin                           string      on
如果关闭呢 就可以使用
alter system set recyclebin=no 
2.查看回收站的信息 
desc user_recyclebin 
select * from user_recyclebin 
select object_name,original_name,type from user_recyclebin
3闪回删除
flashback table employees to before drop rename to new_employees;

六 闪回数据库
1.闪回数据库是将数据库快速恢复到过去的某一止咳和SCN 值状态 ,闪回数据库是需要闪回日志文件和归档重做日志文件。使用闪回数据库你首先要设置好数据库的快速恢复区 和闪回日志的保留时间 ,数据库中的恢复写入进程 (RVWR)周期性的将每个数据文件发生改变的数据库的镜像副本写入闪回日志文件中,利用这些数据块的镜像副本可以重建数据文件的内容。
2.闪回数据库的限制
 因为闪回数据库是在现有的数据库基础上进行的回滚操作,
 数据文件不能损坏或者丢失等介质故障不讷讷个使用闪回数据库的进行恢复。闪回数据库之能基于当前正在运行的数据文件。
数据库控制文件重建或利用备份恢复控制文件就不可以闪回数据库
不能数据文件收缩操作;
不能恢复到闪回日志中不存在的SCN 值
3.启用快速恢复区
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
4.禁用快速恢复区
 (1)要启用了闪回数据库的特性需要 首先禁用闪回数据库的特性
alter database flashback off;
 (2)把归档的地址设置为快速恢复区的路径 修改为其他路径;
alter system set log_archive_dest_1='路径’
 (3)将db_recover_file_dest 设置为空
alter system set db_recover_file_dest='';

5 闪回数据库的配置
首先配置快速恢复区
数据库必须是在归档的模式下
在数据库加载的情况下开启 flashback_on 特性
alter的system set db_flashback_retention_target=2880;

6 闪回数据库操作
(1)查询一下闪回日志中最早的SCN 
select * from v$flashback_database_log;
(2)查询一下当前的 scn 值
select current_scn from v$database;
(3)查看一下数据库系统当前的时间。
select sysdate from dual;
 (4) 进行数据库恢复 将数据库恢复到创建表之前的状态
flashback database to timestamp(to_timestamp('2015-5-14 13:31:24','yyy-mm-dd hh24:mi:ss'));
 根据scn 值进行闪回数据库的操作
flashback database to scn 3423523; 

七 闪回数据库归档
1.闪回数据归档是 oracle 11 g 数据库中引入的闪回特性;
首先闪回数据归档采用 了不同的实现机制,不适用撤销表空间中的回退信息 ,而是将制定表的数据变化信息存储到专门创建的闪回数据归档区中。为闪回数据归档区单独设置存储策略可以使用闪回数据归档中的信息实现对表的闪回查询,与回退信息无关;在闪回数据归档中保存的不是整个数据库的变化信息,而只是指定表的数据变化信息,因此是对象保护。
闪回数据归档区由一个或者多个表空间组成,
使用闪回数据归档必须满足一下的要求
用户在表使用的闪回数据归档区上具有 flashback archive 的对象权限;
表不能是嵌套表 聚簇表 临时表  远程表 和外部表
表不能包含long 类型列和嵌套表类型列。
2.闪回数据归档区的管理 
(1)创建数据归档区
; create flashback archive default fbae-1
tablespace users quota 2G retention 1year ;
 create flashback archive fbae_2
tablesapce users quota 2G retention 10 day
(2)修改闪回数据归档区
alter flashback archive f_1 set default
alter flashback archive f_2 add tablespace tbs2 quota 100m,;
alter flashback archive f_3 modify tablespace tbs3 quota 200m
alter flashback archive f_4 modify tablespace retention 2 year;
alter flashback archive f_5 remove tablespace tbs4
alter flashback archive f_6 purge all;
alter flashback archive f_7 purge scn 34241245;
alter flashback archive f_8 purge before timestamp(sysdate-interval '1' day);
 (3)删除闪回数据归档区
drop flashback archive  f_1
(4)查询闪回数据归档信息
dba_flashback _archive
user_flashback_archive
dba_flashback_archive_table
user_flashback_archive_table
dba_flashback_archive_ts
3 启用或禁用表的闪回数据归档
  create table t (t_name varcher2(5),id  number(5)) flashback archive f_t;
或者
将表添加到闪回数据归档区
alter table t flashback archive;
alter table t flashback archive f_t;
禁用闪回数据归档
alter table t NO flashback archive;
4 闪回数据归档操作示例
创建一个闪回数据归档区
create flashback archive t_1 tablespace usera quota 100m retention 10 day;
创建俩表一个使用闪回数据归档一个不使用
create   table  T ( x int ) flashback archive t-1;
create table B (x int);
插入数据:
delete 数据
然后惊醒闪回查询
select * from T as of timestamp(to_timestamp( '2015-5-14 14:23:32 ','yyyy-mm-dd hh24:mi:ss'));
 select * from B as of timestamp(to_timestamp( '2015-5-14 14:13:32 ','yyyy-mm-dd hh24:mi:ss'));
闪回前面的数据
5 删除原来所使用的撤销表空间 
alter system set undo_tablespace=UNDOTBS2
DROP TABLESPACE UNDOTBS1
6重新查询
第二张表报错
B 表未使用闪回数据归档区 ,使用的是撤销表空间中的回退信息,我们删除撤销空间,回退信息变丢失,所以回退信息无法使用,表B 就无法闪回查询。

以上呢就是我此次的总结,因为时间的原因很多语句写试验结果,请见谅。请自行测试。
新手DBA 如果那里写的错误或者不和您胃口的 请您勿喷谢谢 ! 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/30176559/viewspace-1654347/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/30176559/viewspace-1654347/

你可能感兴趣的:(数据库)