flashback 数据库

来源:互联网 发布:皇室战争卡牌升级数据 编辑:程序博客网 时间:2024/06/15 03:44

1. 检查是否启动了flash recovery area? 

SQL> show parameter db_recovery_file 

NAME                    TYPE        VALUE 

------------------------------------  ----------- ------------------------------ 

db_recovery_file_dest       tring       D:\oracle/flash_recovery_area 

db_recovery_file_dest_size  big integer 1G 

 


启用Flash Recovery Area: 

SQL>ALTER SYSTEM SET DB_RECOVERY_FILE_DEST_SIZE=20G SCOPE=BOTH; 

SQL>ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='/DBA/FB' SCOPE=BOTH; 

 

禁用Flash Recovery Area: 

SQL>ALTER SYSTEM SET DB_RECOVERY_FILE_DEST='' ; 


设置保留时间默认1440分钟

SQL>alter system set db_flashback_retention_target=1440 scope=both;

2. 检查是否启用了归档? 

SQL> archive log list; 

数据库日志模式      存档模式 

自动存档            启用 

存档终点            USE_DB_RECOVERY_FILE_DEST 

最早的联机日志序列  9 

下一个存档日志序列  11 

当前日志序列        11 

 

如果没有启动

SQL> alter database archivelog;


3. 检查是否启用了flashback database  

SQL> select flashback_on from v$database; 

FLASHBACK_ON      

 ------------------  

YES           

如果没有启动     

SQL> alter database flashback on;

4. 查询当前的scn? 

SQL> SELECT CURRENT_SCN FROM V$DATABASE; 

 

CURRENT_SCN 

----------- 

947921 

 

5. 查询当前的时间 

SQL> select to_char(sysdate,'yy-mm-dd hh24:mi:ss') time from dual; 

 

TIME 

----------------- 

09-10-14 14:37:05 

 

6. 删除表A 

SQL> select * from A; 

 

ID  NAME 

---------- ---------- 

1  tianle 

2  dave 

 

SQL> drop table A; 

表已删除。 

SQL> commit; 

 

7. Flashback Database 实际是对数据库的一个不完全恢复操作,因为需要关闭数据库重启到mount状态。 

SQL> shutdown immediate 

数据库已经关闭。 

已经卸载数据库。 

ORACLE 例程已经关闭。 

SQL> startup mount 

ORACLE 例程已经启动。 

 

Total System Global Area  209715200 bytes 

Fixed Size                  1248116 bytes 

Variable Size              79692940 bytes 

Database Buffers          121634816 bytes 

Redo Buffers                7139328 bytes 

数据库装载完毕。 

 

8. 执行恢复:分timestamp 或者SCN两种 

 

SQL> Flashback database to timestamp to_timestamp('09-10-14 14:37:05','yy-mm-dd hh24:mi:ss'); 

闪回完成。 

 

或者: 

SQL> Flashback database to scn 947921; 

闪回完成。 

 

9. 打开数据库: 

在执行完flashback database 命令之后,oracle 提供了两种方式让你修复数据库: 

1). 直接alter database open resetlogs 打开数据库,当然,指定scn 或者timestamp 时间点之后产生的数据统统丢失。 

2). 先执行alter database open read only 命令以read-only 模式打开数据库,然后立刻通过逻辑导出的方式将误操作涉及表的数据导出(经过测试不能用expdb,只能用额exp),再执行recover database 命令以重新应用数据库产生的redo,将数据库修复到flashback database 操作前的状态,然后再通过逻辑导入的方式,将之前误操作的表重新导入,这样的话对现有数据的影响最小,不会有数据丢失。 

 

这里演示,就以resetlogs方式打开: 

SQL> alter database open resetlogs; 

数据库已更改。 

 

验证数据: 

SQL> select * from A; 

 

        ID NAME 

---------- ---------- 

         1 tianle 

         2 dave 

 

 

 

 

 

 

和Flashback Database 相关的比较重要的视图: 


1. V$flashback_database_log 

 Flashback Database 所能回退到的最早时间,取决与保留的Flashback Database Log 的多少, 该视图就可以查看许多有用的信息。 

Oldest_flashback_scn / Oldest_flashback_time : 这两列用来记录可以恢复到最早的时点 

Flashback_size: 记录了当前使用的Flash Recovery Area 空间的大小 

Retention_target: 系统定义的策略 

Estimated_flashback_size: 根据策略对需要的空间大小的估计值 

 

查看能恢复到的最早的时间,scn

SQL>select oldest_flashback_scn os, to_char(oldest_flashback_time,'yy-mm-dd hh24:mi:ss') ot, retention_target rt,flashback_size fs, estimated_flashback_size es from v$flashback_database_log; 

 

OS       OT             RT      FS        ES 

----------  -----------------     ----------  ----------    ---------- 

946088  09-10-14 13:49:59  1440     16384000  350920704 

 

2. V$flashback_database_stat 

这个视图用来对Flashback log 空间情况进行更细粒度的记录和估计。 这个视图以小时为单位记录单位时间内数据库的活动量,Flashback_Data 代表Flashback log产生数量,DB_Date 代表数据改变数量,Redo_Date代表日志数量,通过这3个数量可以反映出数据的活动特点,更准确的预计Flash Recovery Area的空间需求 

 

SQL> alter session set nls_date_format='hh24:mi:ss'; 

 

会话已更改。 

 

SQL> select *from v$flashback_database_stat; 

 

BEGIN_TI END_TIME FLASHBACK_DATA DB_DATA REDO_DATA ESTIMATED_FLASHBACK_SIZE 

-------- -------- -------------- ---------- ---------- ------------------------ 

14:43:10 15:15:28        6455296   29310976    3898368              0 


0 0