oracle的闪回技术,oracle闪回技术

在oracle9i中引入了flashback查询,flashbackquery实际上是利用UNDO信息来获得过去的数据。由于UNDO空间是循环使用的,事务的前映像不可能永久保存,因此..

在oracle 9i中引入了flashback查询,flashback query实际上是利用UNDO信息来获得过去的数据。由于UNDO空间是循环使用的,事务的前映像不可能永久保存,因此flashback query只能支持过去一段时间内的数据查询,这个时间与undo_retention相关,undo_retention默认设置900s

下面我们来看下flashback查询恢复数据的例子:1、创建用户fly

SQL> create user fly identified by fly;

User created.

SQL> grant dba,connect,resource to fly;

Grant succeeded.

2、创建表和索引

SQL> conn fly/fly

Connected.

SQL> create table fly as select * from dba_objects;

Table created.

SQL> create index idx_fly on fly(object_id);

Index created.

SQL> select count(1) from fly;

COUNT(1)

----------

78193

3、更改会话时间显示格式

SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

Session altered.

SQL> select sysdate from dual;

SYSDATE

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

2013-12-05 21:19:52

4、假设误删除删除数据并提交了,如下所示:

SQL> delete from fly where rownum<500;

499 rows deleted.

SQL> commit;

Commit complete.

5、可考虑如下方法恢复数据,优先使用flashback

5.1 flashback

5.2 imp/impdp

5.3 rman

5.4 logminer

6、通过flashback技术来闪回查询表被删除前的时间点的数据,并保存为一张临时表

SQL> create table fly_tmp_1205 as select * from fly as of timestamp to_timestamp('2013-12-05 21:19:52','yyyy-mm-dd hh24:mi:ss');

Table created.

SQL> select count(*) from fly_tmp_1205;

COUNT(*)

----------

78193

如果只是大概记得是几分钟前被delete的,假设当前时间数据被删除了11分钟左右的话:

SQL> select count(1) from fly as of timestamp sysdate-11/1440;

COUNT(1)

----------

78193

在Oracle 10g中,增强了闪回查询功能,并且提供了将整个数据库回退到过去某个时刻的能力,这个功能

是通过flashback log实现的。flashback log有点类似redo log,只不过redo log将数据库往前滚,flashback log

则将数据库往后滚。为了保存管理和备份恢复相关的文件,oracle10g提供了一个叫做闪回恢复,这个区域默认创建在ORACLE_BASE目录下。可以将所有恢复相关的文件,比如flashback log,archive log,

backup set等,放到这个区域集中管理。

到了Oracle 11g,闪回又出了一个新特性:Oracle Flashback Data Archive. FDA通过将变化数据存储到另外创建的闪回归档区(Flashback Archive)中,和undo区别开来,这样就可以为闪回归档区单独设置存储策略,也可以闪回到指定时间之前的旧数据而不影响undo策略,就是减少对undo的依赖性。 因为在一个很忙的系统,undo保

存的时间是很有限的。 但通过FDA,我们就要灵活很多了。

Flashback技术可以细分以下4种:

Flashback Database,需要开启闪回功能,默认不开启闪回功能,生产库一般不开启闪回功能

Flashback Drop,需要开启回收站,默认开启

Flashback Query(分Flashback Query, Flashback Version Query, Flashback Transaction Query 三种), 基于undo信息

Flashback Table。 用的不多,其原理也是基于undo信息,一般恢复数据使用flashback query来代替flashback table如何查看闪回恢复区里包含的内容

SQL> select file_type from v$flash_recovery_area_usage;

FILE_TYPE

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

CONTROL FILE

REDO LOG

ARCHIVED LOG

BACKUP PIECE

IMAGE COPY

FLASHBACK LOG

FOREIGN ARCHIVED LOG

7 rows selected.

从Oracle 10g开始,在一些动态性能视图里面,如 V$CONTROLFILE, V$LOGFILE, V$ARCHIVED_LOG, V$DATAFILE_COPY 等都新增加了一列:IS_RECOVERY_DEST_FILE ,指明相关的文件是否在恢复区内。SQL> select recid,is_recovery_dest_file from v$archived_log where recid<=5;

RECID IS_

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

1 YES

2 YES

3 YES

4 YES

5 YES

1、设置flashback recovery area参数

闪回恢复区主要通过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_recovery

NAME

TYPE

VALUE

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

db_recovery_file_dest

string

/home/oracle/flash_recovery_area

db_recovery_file_dest_size

big integer 2G

SQL> alter system set db_recovery_file_dest_size=8G scope=both;

System altered.

SQL> alter system set db_recovery_file_dest='/u01/app/oracle/flash_recovery_area';

System altered.

SQL> show parameter db_recovery

NAME

TYPE

VALUE

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

db_recovery_file_dest

string

/u01/app/oracle/flash_recovery _area

db_recovery_file_dest_size

big integer 8G

说明:

设置闪回恢复区后,如果没有设置过log_archive_dest_n参数,则归档日志默认是保存到该区域的。我们需要

注意闪回恢复区空间的使用率,如果闪回恢复区满了,就没地方放归档了,数据库会hang住,实际上,oracle是通

过隐式的设置log_archive_dest_10='location=USE_DB_RECOVERY_FILE_DEST'来实现的。多个数据库的闪回恢

复区可以指定到同一个位置,但是db_name不能一样,或者db_unique_name不一样。RAC的闪回恢复区必须位于

共享磁盘上,能被所有实例访问。生产环境,一般建议更改归档路径到非闪回恢复区

SQL>alter system set log_archive_dest_1='location=/archivelog';

2、Flashback Database

2.1、如何启用和禁用Flashback Database

数据库的Flashback Database功能缺省是关闭的,要想启用这个功能,就需要做如下配置。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值