Flashback 恢复技术

1.Flashback
    在oracle 9i中引入flashback查询,以便能在需要的时候查到过去某个时刻的一致性数据,依赖于undo表空间存储的信息来闪回查询以前的版本,当然这个受限于undo表空间的大小,以及保留策略。如果undo 被覆盖了就不能进行查询。oracle10g中增强了闪回查询的功能,并且提供了将整个数据库回退到过去某个时刻的能力,这是通过引入一种新的flashback log实现的。flashback log有点类似redo log,只不过redo log将数据库往前滚,flashback log则将数据库往后滚。为了保存管理和备份恢复相关的文件,oracle10g提供了一个叫做闪回恢复区(Flashback recovery area),这个区域默认创建在oracle_base目录下。可以将所有恢复相关的文件,比如flashbacklog,archive log,backup set等,放到这个区域集中管理。
1.1 查看数据库flashback是否打开(select t.FLASHBACK_ON  from v$database t)

要打开flashback技术,数据库必须处于归档模式(archivelog:alter database archivelog),否则数据库会出现一下错误:

SQL> alter database flashback on;
alter database flashback on
*
第 1 行出现错误:
ORA-38706: 无法启用 FLASHBACK DATABASE 事件记录。
ORA-38707: 尚未启用介质恢复。

1.1.2.查看oracle是否处于归档模式:archive log list

SQL> archive log list;
数据库日志模式            存档模式
自动存档            
启用
存档终点            USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列     13
下一个存档日志序列   15
当前日志序列           15

1.2 更改数据库为mount状态,alter database mount;

打开flashback:

SQL> alter database flashback on;

1.3.闪回恢复区

            db_recovery_file_dest指定闪回恢复区的位置
            db_recovery_file_dest_size指定闪回恢复区的可用空间大小

            db_flashback_retention_target:指定数据库可以回退的时间,单位为分钟,默认1440分钟,也就是一天。当然,实际上可回退的时间还决定于闪回恢复区的大小,因为里面保存了回退所需要的flash log。所以这个参数要和db_recovery_file_dest_size配合修改。

SQL> show parameter db_recover

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest                string      C:\oracle\product\10.2.0/flash_recovery_area
db_recovery_file_dest_size           big integer 2G

SQL> show parameter db_flash

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_flashback_retention_target        integer     1440

           我们看到db_flashback_retention_target 默认是1440分钟,即24 小时,需要注意的是该参数虽然未直接指定flash recovery area大小,但却受其制约,举个例子假如数据库每天有10%左右的数据变动的话,如果该初始化参数值设置为1440,则flash recovery area 的大小至少要是当前数据库实际容量的10%,如果该初始化参数设置为2880,则flash recovery area 的大小就至少是数据库所占容量的20%。

1.4.检查恢复区的使用情况

SQL> select * from v$flash_recovery_area_usage;

FILE_TYPE    PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
------------ ------------------ ------------------------- ---------------
CONTROLFILE                   0                         0               0
ONLINELOG                     0                         0               0
ARCHIVELOG                    0                         0               0
BACKUPPIECE                   0                         0               0
IMAGECOPY                     0                         0               0
FLASHBACKLOG                .57                       .38               2

已选择6行。

1.5.数据库的恢复(Flashback Database:数据库必须处于归档模式并且flashback必须打开)

flashback技术可以以两种模式恢复,timestamp 或者SCN

Flashback Database操作示例 :

1.5.1.查看当前scn

 

SQL> SELECT CURRENT_SCN FROM V$DATABASE;

CURRENT_SCN
-----------
    1005205

1.5.2.查看当前时间

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

TIME
-----------------
12-07-30 14:10:33

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

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。

SQL> startup mount;
ORACLE 例程已经启动。

Total System Global Area  293601280 bytes
Fixed Size                  1248600 bytes
Variable Size              96469672 bytes
Database Buffers          188743680 bytes
Redo Buffers                7139328 bytes
数据库装载完毕。

 

1.5.4执行恢复(timestamp)

SQL> Flashback database to timestamp to_timestamp('12-07-30 14:10:33','yy-mm-dd
hh24:mi:ss');

闪回完成。

或则

Flashback database to scn 1005205;

1.5.5.打开数据库

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

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

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

 

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

1.5.6.打开数据库

SQL> alter database open resetlogs;

数据库已更改。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值