日期:2014-05-16  浏览次数:20454 次

10g闪回总结
转http://litterbaby.itpub.net/post/16841/276210
Oracle从9i就有了闪回这个新功能,在Oracle 10g中这个功能被大大增强。在Oracle 9i中只是以闪回查询的形式查看某一时间点上的数据,就是某一时刻的数据的快照,而不是在两个时间点之间的被更改数据的运行状态的表示,在Oracle 10g中就提供了这样的功能。


优点


闪回应该说是一个技术革新,比传统意义上的恢复更快更加简单方便。传统意义上的恢复需要还原数据库和数据文件,而这些数据文件则是在前一阶段备份而来的。然后在通过数据库日值在数据文件上的前滚来实现数据的每一次改变。这样的过程相对而言是比较慢的。而闪回通过事务或者行的改变来构架闪回,只有数据的改变的前像和后像被存储。


闪回技术应用的范围


闪回技术恢复在Oracle 10g上提供了三个级别的恢复。我们可以根据不同的应用来实现不同的级别的数据库恢复实现。

数据库级

n Drop user (Flashback Database)

n Truncate table (Flashback Database)

n Batch job : partial change (Flashback Database)


表级

n Drop table (flashback drop)

n Update with wrong where clause (Flashback table)

n Compare current data against the data at some time in the past (Flashback Query)


事务级

Batch job runs twice, but you are unsure of the objects affected (Flashback Query)


需要的权限


由于需要使用不同的闪回版本则是需要不同的权限:

n Flashback Database:

– SYSDBA database connection

n Flashback Table or Flashback Versions Query:

– FLASHBACK ANY TABLE

– Appropriate object privileges

n Flashback Transaction Query:

– SELECT ANY TRANSACTION


闪回数据库


这个功能是非常强大的,在上面也介绍了,当发生错误使用drop user,删除用户这样的错误的时候,是必须使用数据库闪回来进行恢复的,这项功能能够使得快速将你的数据库返回到以前某个时间点上的状态,从而恢复你的数据库。能够使用这个功能实现逻辑数据实效的错误,在这里需要解释的是,在闪回恢复和通常的日志恢复的不同。

闪回恢复是将你现在的数据库回退到以前的某个时间点,主要目的是为了解决数据库上人为的逻辑错误,注意这是逻辑错误,意义就是说,是由于人为的错误,而发现的相对比较早,在闪回恢复的时间期限内。

而日志恢复则是将数据库还原到以前的某个时间点(实在你需要恢复的时间点之前的时间点),这里的根据你恢复的不同而还原,如果是只是恢复数据文件,只是需要还原这个数据文件。使用归档和联机日志文件将你的数据库应用到当前或者以前的某个时间点。主要目的是为了恢复物理上的错误。

闪回恢复数据库之所以说要比普通意义上的恢复快的原因就是因为,在闪回恢复数据库是没有还原这一说的。

闪回数据库也是通过应用日志来恢复数据库,只不过不是使用重做日志,而是使用的是闪回日志。


机制


由图上可以看到,闪回数据库使用的是一个新的日志:闪回数据库日志,Oracle数据库服务器定期在闪回数据库日志数据块的前像写入到日志文件中去。当进行闪回数据库恢复的时候,日志上的前像将被回滚应用在数据库的数据文件中。闪回数据库日志是被自动管理和添加到恢复区域的。当闪回数据库被开启的时候,会有一个新的恢复写进程RVWR被开启。


启动配置闪回数据库


1、 配置flash 恢复区域

2、 设置参数db_flashback_retention_target


这个参数的单位是分钟。指定的是一个数据库可以使用闪回恢复的时间,这个时间越长,需要的闪回恢复区域就月大。

引用

SQL> show parameter flashback

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

3、使用ALTER DATABASE FLASHBACK ON;将数据库启动为闪回数据库状态。

引用

ALTER DATABASE FLASHBACK ON;

这里需要注意的是数据库需要是在archivelog模式之下启动闪回数据库,并使用MOUNT EXCLUSIVE模式下运行的。

开启闪回数据库以后可以通过查询视图v$database的列flashback_on来查看闪回数据库是否开启。
引用

SQL> select flashback_on from v$database;

FLA
---
YES

实例:
引用

SQL> startup mount

ORACLE 例程已经启动。


Total System Global Area 83886080 bytes

Fixed Size 1247420 bytes

Variable Size 67110724 bytes

Database Buffers 12582912 bytes

Redo Buffers 2945024 bytes

数据库装载完毕。

SQL> alter database flashback on;


数据库已更改。


SQL> select flashback_on from v$database;


FLASHBACK_ON

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

YES


SQL> alter database open;


数据库已更改。


SQL>