闪回种类及其使用资源:
闪回查询(UNDO)。
闪回删除(UNDO)。
闪回数据(UNDO)。
闪回版本查询(UNDO)。
闪回事物(UNDO)。
闪回数据库(闪回日志)。
一,
闪回查询:基于
SCN
或者
timestamp
,查询当时的数据状态。
模拟步骤。
–
alter system set
undo_retention
= 1800;
–
alter
tablespace
undotbs1 retention guarantee;
–
delete from tbl1
;
–
Commit
;
–
insert into tbl1 values(100);
–
select
to_char
(
sysdate,‘yyyy-mm-dd
hh24:mi:ss’) from dual
;
记录时间
–
Delete from
tbl1;
–
Commit;
–
select * from tbl1 as of timestamp
to_timestamp
(‘
记录时间
',
' yyyy-mm-dd hh24:mi:ss');
' yyyy-mm-dd hh24:mi:ss');
二,闪回删除:闪回
drop
之后的表。注意
sys
用户不支持。
–
create table
test_drop
(id number)
;
insert into test_drop values(100) ;
select * from test_drop ;
drop table test_drop ;
flashback table test_drop to before drop ;
select * from test_drop ;
insert into test_drop values(100) ;
select * from test_drop ;
drop table test_drop ;
flashback table test_drop to before drop ;
select * from test_drop ;
闪回顺序:
–
create table t(id number);
–
insert into t values(100);
–
drop table t
;
–
create table t(id number);
–
insert into t values(200);
–
drop table t
;
–
create table t(id number);
–
insert into t values(300);
–
drop table t
;
flashback table
t
to before drop
;
三,闪回数据:
•
00:38:20 SQL> create table t(id number);
•
00:38:26 SQL> insert into t values(100);
•
00:38:32 SQL> insert into t values(200);
•
00:38:36 SQL> commit;
•
00:38:39 SQL>
•
00:38:39 SQL> insert into t values(300);
•
00:38:46 SQL> commit;
•
00:38:47 SQL> delete from t;
•
00:38:57 SQL> commit;
第一次闪回
•
00:40:01 SQL> alter table t enable row movement;
•
00:38:59 SQL> flashback table t to timestamp
to_timestamp
('2012-03-15 00:38:38','yyyy-mm-dd hh24:mi:ss')
•
flashback table t as of timestamp
to_timestamp
('2012-03-15 00:38:38','yyyy-mm-dd hh24:mi:ss')
•
00:40:38 SQL> select * from t;
第二次闪回
•
00:40:42 SQL> flashback table t to timestamp
to_timestamp
('2012-03-15 00:38:47','yyyy-mm-dd hh24:mi:ss');
•
00:41:30 SQL> select * from t;
四,闪回版本查询:
–
Create table T(id number);
–
Insert into t values(100);
–
Insert into t values(200);
–
Update t set id=300 where id=100;
–
Update t set id=400 where id=200;
–
Update t set id=500 where id=300;
–
Update t set id=600 where id=400;
–
select
versions_startscn
,
versions_endscn ,
versions_xid ,
versions_operation ,
id
from t
versions between scn (timestamp) minvalue and maxvalue ;
versions_endscn ,
versions_xid ,
versions_operation ,
id
from t
versions between scn (timestamp) minvalue and maxvalue ;
五,闪回事务:
•
select * from
flashback_transaction_query
where
table_name
='T‘;
•
Commit_scn
=
versions_endscn
;
六,数据库闪回:
把数据库回滚到过去的时间点,在没有闪回技术之前,大多数情况我们通过的是不完全恢复的方法,遵循恢复和还原的步骤执行的,之后再用resetlogs 打开数据库,这时候
DBA应该对数据库做全库冷备比较安全。补充一点:恢复过程中会用到日志(online的或者archive log)这里面记录的是数据库里面的变化。而闪回技术用的不是常规的
日志,是闪回日志,这里面记录的是数据库变化的逆操作。相当于UNDO里面的内容。但是闪回之后的数据库依然需要resetlogs才能打开。
七,相关语句:
•
FLASHBACK DATABASE TO TIMESTAMP(SYSDATE-1/24);
•
FLASHBACK DATABASE TO SCN 53943;
•
相关参数:
•
db_recovery_file_dest
:闪回区位置。
•
db_recovery_file_dest_size
:闪回区大小。
•
相关查询:
•
SELECT
estimated_flashback_size,flashback_size
FROM V$FLASHBACK_DATABASE_LOG;
查看闪回日志大小,决定是否需要增加闪回区。
•
SELECT
oldest_flashback_scn
,
oldest_flashback_time
FROM V$FLASHBACK_DATABASE_LOG;
查看最早能闪回到哪个
SCN
。
•
select * from
v$flashback_database_stat
;
查询一段时间内的信息。
select * from
v$flash_recovery_area_usage
;查询闪回去使用情况