您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

oracle闪回技术

2025/6/30 20:44:31发布19次查看
在oracle9i中引入了flashback查询,flashbackquery实际上是利用undo信息来获得过去的数据。由于undo空间是循环使用的,事务的前映像不可能永久保存,因此..
       在oracle 9i中引入了flashback查询,flashback query实际上是利用undo信息来获得过去的数据。由于undo空间是循环使用的,事务的前映像不可能永久保存,因此flashback query只能支持过去一段时间内的数据查询,这个时间与undo_retention相关,undo_retention默认设置900s
       下面我们来看下flashback查询恢复数据的例子:
1、创建用户flysql> create user fly identified by fly;user created.sql> grant dba,connect,resource to fly;grant succeeded.2、创建表和索引sql> conn fly/flyconnected.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)----------781933、更改会话时间显示格式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:524、假设误删除删除数据并提交了,如下所示:sql> delete from fly where rownum commit;commit complete.5、可考虑如下方法恢复数据,优先使用flashback5.1 flashback5.2 imp/impdp5.3 rman5.4 logminer6、通过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 fileredo logarchived logbackup pieceimage copyflashback logforeign archived log7 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      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_recoverynametypevalue-----------------------------------------------------------------------------db_recovery_file_deststring/home/oracle/flash_recovery_areadb_recovery_file_dest_sizebig integer 2gsql> 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_recoverynametypevalue-----------------------------------------------------------------------------db_recovery_file_deststring/u01/app/oracle/flash_recovery _areadb_recovery_file_dest_sizebig 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功能缺省是关闭的,要想启用这个功能,就需要做如下配置。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product