闪回概述:
闪回数据库就是当出现逻辑错误时,能够将整个数据库回退到出错前的那个时间点上。实现闪回数据库的基础就是闪回日志。只要我们配置了闪回数据库,就会自动创建闪回日志。这时只要数据库里的数据发生了变化,Oracle就会将数据被修改前的旧值保存在闪回日志里。当我们需要闪回数据库时,ORACLE就会读取闪回日志里的记录,并应用到数据库上,从而将数据库回退到历史上的某个时间点的状态上。
闪回日志与联机重做日志一样,都是循环使用的,但它们还是有不少的差异,当事务修改了buffer_cache里的数据时,会将改变前的值和改变后的值都以重做记录的形式保存在log_buffer中,然后通过LGWR进程将这些重做记录写入到联机日志文件中。但是在记录闪回日志时,只会将改变前的值保存在flash buffer中,再由RVWR进程写入到闪回日志文件中。
闪回分为如下几种:
a)闪回数据库
b)闪回删除
c)闪回表
d)闪回版本查询(flashback version query)
e)闪回事物查询(flashback transaction query)
f)闪回查询(flashback query)
注:上述六种闪回,只有闪回数据库和Flash Recovery Area有关系,闪回数据库的闪回日志(Flashback log)只能放在闪回恢复区中。而其它的闪回功能,都和闪回恢复区没有任何联系。也就是说,使用闪回数据库功能时必须使用闪回恢复区,而10G的其它闪回功能中,闪回恢复区不是必须的。
闪回数据库:
启用闪回数据库,必须按如下四个步聚进行;
1.将数据库开启为归档模式
-
sql> archive log list; #查看是不是归档方式
-
sql> alter system set log_archive_start=true scope=spfile; #启用主动归档
-
sql> alter system set log_archive_dest=''location=/oracle/ora9/oradata/arch'' scope=spfile;#设置归档路径
-
#如果归档到两个位置,则可以通过上边方法实现
-
sql> alter system set log_archive_format=''arch_%d_%t_%r_%s.log'' #设置归档日记款式
-
sql> shutdown immediate;
-
sql> startup mount; #打开控制文件,不打开数据文件
-
sql> alter database archivelog; #将数据库切换为归档模式
-
sql> alter database open; #将数据文件打开
-
sql> archive log list; #查看此时是否处于归档模式
-
查询以确定数据库位于archivelog模式中且归档过程正在运行
-
sql> select log_mode from v$database;
-
sql> select archiver from v$instance;
2.配置闪回恢复区
-
sql> alter system set db_recovery_file_dest='/arch01/flash_recovery_area' scope=both;
-
sql> alter system set db_recovery_file_dest_size='10g' scope=both sid='oyy3a';
3.配置闪回保留时间
-
sql> alter system set db_flashback_retention_target=2880 scope=spfile; ----该参数以分钟为单位,默认为1440分钟,也就是24小时。
4.启用闪回数据库
-
sql> startup mount;
-
sql>alter databaase flashback on;
5.关闭闪回数据库
注:一旦关闭闪回数据库,则闪回恢复区的闪回日志都被自动删除
-
sql> startup mount;
-
sql>alter databaase flashback off;
6.闪回数据库
在配置完闪回数据库以后,如果确实需要进行闪回数据库操作的话,可以通过RMAN进行,也可以通过SQL*PLUS进行。
-
sql> shutdown immediate;
-
sql> startup mount exclusive;
-
sql> flashback database to timestamp to_date('2005-10-01 15:32:00','yyyy-mm-dd hh24:mi:ss');
-
sql> alter database open read only; ----先以只读模式打开,来确认闪回的数据是否正常,如查数据正确,则需要关闭数据库,并以resetlogs方式打开。
-
sql> alter database open resetlogs;
-
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29446986/viewspace-1248695/
,如需转载,请注明出处,否则将追究法律责任。