Oracle 10g闪回技术

一、Flashback Database

1、 架构及实现原理

Flashback DatabaseRVWR进程和Flashback Database日志组成。当Flashback Database被启用时,RVWR进程会将数据库的修改写入Flashback Database log中,恢复时读取Flashback Database logs中信息进行恢复。

Flashback Database使用RMAN CONFIGURE RETENTION POLICY命令设置Flashback Database logs的保存策略。当flash recovery area空间使用了90%95%时数据库会向alter.log文件中写入warning。到使用90%的空间时,Oracle会自动删除flash recovery area中的文件。

2、 限制条件

n Media failure不能使用Flashback Database

n datafile被大小改变或这被shrink后,不能使用Flashback Database进行还原

n control file被重建或restore后,不能进行flashback database

n 删除一个表空间后,不能使用restlogs

3、 启用方法

把数据库置为ARCHIVE LOG模式

SQL> connect / as sysdba

SQL> startup mount

SQL> alter db_flashback_retention_target=4320;----设置可以进行多久的闪回(分钟)

SQL> alter database flashback on;

SQL> alter database open;

4、 配置闪回区域

SQL> alter system set db_recovery_file_dest_size=10M scope=both;

SQL> alter system set db_recovery_file_dest=’ C:\oracle\flash_recovery_area\ora101t’;

5、 备份Flashback Recovery Area

RMAN> backup recovery area;

RMAN> backup recovery files;

6、 相关视图

V$FLASHBACK_DATABASE_LOG:可以用来查询OLDEST_FLASHBACK_SCN

V$FLASHBACK_DATABASE_STAT:查询每次闪回操作的信息

二、其他闪回功能

包括Flashback Drop, Flashback Versions Query, Flashback Transaction Query,

Flashback Table,这些都是利用Undo data进行闪回的

a) Flashback Drop

Oracle 10g中,删除一个table后,会将数据放在Recycle Bin中,而不是直接删除。

n 语法

FLASHBACK TABLE table_name TO BEFORE DROP

b) Recycle Bin

n show recyclebin:显示回收站中的内容

n 内容查询

SQL> select object_name as recycle_name, original_name, object_name from recyclebin;

n 对闪回表进行重命名

SQL> flashback table "BIN$0ZVR8eDEQbK4s8G2Csf2kg==$0" to before drop

rename to t2;

n 彻底删除

PURGE TABLE original_table_name;

PURGE TABLE recycle_bin_object_name;

n 彻底删除回收站中特定表空间中的特定用户创建的对象

PURGE TABLESPACE tablespace USER user

SQL> purge tablespace users user test;

n 清空回收站

PURGE RECYCLEBIN;

PURGE DBA_RECYCLEBIN;

c) Flashback Versions Query

n 只能查询已经提交的数据

SQL> select salary from t1

2 versions between

3 scn minvalue and maxvalue

4 where employee = 'JONES';

SQL> select salary from t1

2 versions between timestamp

3 to_timestamp('2004-10-26 11:37:01','YYYY-MM-DD HH:MI:SS') and

4 to_timestamp('2004-10-26 11:43:01','YYYY-MM-DD HH:MI:SS')

5 where employee = 'JONES';

n 伪列

VERSIONS_STARTTIME

VERSIONS_STARTSCN

VERSIONS_ENDTIME

VERSIONS_ENDSCN

VERSIONS_XID

VERSIONS_OPERATION

select to_char(versions_starttime,'DD-MON HH:MI') "START DATE",

to_char (versions_endtime, 'DD-MON HH:MI') "END DATE",

versions_xid,

versions_operation,

employee,

salary

from test.t1

versions between scn

minvalue and maxvalue

where employee = 'JONES'

d) Flashback Transaction Query

可以查询已提交和未提交的数据

SQL> select table_name, operation, undo_sql

2 from flashback_transaction_query

3 where start_timestamp >= to_timestamp ('2004-10-26 06:45:00',

'YYYY-MM-DDHH:MI:SS')

4 and table_owner = 'TEST';

e) Flashback Table

SQL> alter table t1 enable row movement;

SQL> flashback table t1 to scn 771511;

闪回的同时,启用被删除的trigger

SQL> flashback table table_name to scn 771551 enable triggers;

你可能感兴趣的:(oracle,sql,C++,c,Flash)