1.7 Flash Recovery Area 的备份
备份命令是Flash recovery Area,该命令是Oracle 10g以后才有的。
10g引进了flash recovery area,同时在rman备份中支持对该区域的备份。
在9i中oracle引入flashback查询,依赖于undo表空间存储的信息来闪回查询以前的版本,当然这个受限于undo表空间的大小,以及保留策略。
在10g中oracle又引入了新的flashback功能,使用了flash recovery area来存储flashback 1og等等。
这个区域默认创建在oracle_base目录下。
在其中可以存放备份集、镜像拷贝、归档日志、自动备份的控制文件以及spfile和flashback logs。
存放位置和大小由参数db_recovery_file_dest和db_recovery_file_dest_size决定。
默认情况数据库的flashback database是关闭,可以在mount exclusive状态下打开。
看一下Oracle 官方文档上的几段文字:
To free space in the FRA we could do take a backup of the Flash Recovery Area using the
command BACKUP RECOVERY AREA.This command will take the backup of all the files in the
FRA to tape only. After this the space occupied by the files in the FRA will be
marked as reclaimable。
the larger the fast recovery area, the more useful it is. Ideally, the fast recovery
area should be large enough for copies of the data files, control files, online
redo log files, and archived redo log files needed to recover the database,
and also the copies of these backup files that are kept based on the retention policy.
The Flash Recovery Area is a unified storage location for all recovery-related files
and activities in an Oracle Database. It includes Control File, Archived Log Files,
Flashback Logs, Control File Autobackups, Data Files, and RMAN files.
从上面的几段话,我们可以得到一下信息:
(1) BACKUP RECOVERY AREA 命令只能备份到磁带上。
在磁盘上备份会报如下错误:
RMAN> BACKUP RECOVERY AREA;
启动 backup 于 12-8月 -10
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=15 设备类型=DISK
说明与资料档案库中的任何归档日志都不匹配
说明与资料档案库中的任何数据文件副本都不匹配
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: backup 命令 (在 08/12/2010 13:50:10 上) 失败
RMAN-06603: 必须在磁盘设备上使用 RECOVERY AREA, RECOVERY FILES 或 DB_RECOVERY_FILE_DEST 指定 TO DESTINATION 选项
(2) Flash recovery area 包含内容:控制文件,归档文件,flashback logs, 控制文件,
自动备份的控制文件,数据文件,数据文件拷贝,RMAN 文件(包括备份集,镜像备份)。
(3) BACKUP RECOVERY AREA 将备份所有Flash recovery area中的内容。
2 Flashback Database
2.1 Flashback Database 说明
Flashback Database 功能非常类似与RMAN的不完全恢复, 它可以把整个数据库回退到过去的某个时点的状态, 这个功能依赖于Flashback log 日志。 比RMAN更快速和高效。
因此Flashback Database 可以看作是不完全恢复的替代技术。
但它也有某些限制:
(1)Flashback Database 不能解决Media Failure, 这种错误RMAN恢复仍是唯一选择。
(2)如果删除了数据文件或者利用Shrink技术缩小数据文件大小,这时不能用Flashback Database技术回退到改变之前的状态,这时候就必须先利用RMAN把删除之前或者缩小之前的文件备份restore 出来,然后利用Flashback Database 执行剩下的Flashback Datbase。
(3)如果控制文件是从备份中恢复出来的,或者是重建的控制文件,也不能使用Flashback Database。
(4)使用Flashback Database锁能恢复到的最早的SCN,取决于Flashback Log中记录的最早SCN。
2.2 Flashback Database 架构
Flashback Database 整个架构包括一个进程Recover Writer(RVWR)后台进程,
Flashback Database Log日志 和Flash Recovery Area。
一旦数据库启用了Flashback Database, 则RVWR进程会启动,
该进程会向Flash Recovery Area中写入Flashback Database Log,
这些日志包括的是数据块的 " 前镜像(before image)",
这也是Flashback Database 技术不完全恢复块的原因。
[oracle@rac1 ~]$ ps -ef|grep rvwr
oracle 6326 1 0 10:36 ? 00:00:00 ora_rvwr_orcl1
[oracle@rac2 ~]$ ps -ef|grep rvwr
oracle 6474 1 0 10:36 ? 00:00:00 ora_rvwr_orcl2
2.3 启用Flashback Database 步骤
数据库的Flashback Database功能缺省是关闭的,要想启用这个功能,就需要做如下配置。
2.3.1 配置Flash Recovery Area
这个参考1.1 节的配置。
2.3.2 启动flashback database
默认情况数据库的flashback database是关闭,
可以在mount exclusive状态下打开。在设置了闪回恢复区后,可以启动闪回数据库功能。
SYS@orcl2> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 12
Next log sequence to archive 13
Current log sequence 13
SYS@orcl2> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS@orcl2> startup mount'
SP2-0714: invalid combination of STARTUP options
SYS@orcl2> startup mount;
ORACLE instance started.
Total System Global Area 835104768 bytes
Fixed Size 2257840 bytes
Variable Size 603982928 bytes
Database Buffers 226492416 bytes
Redo Buffers 2371584 bytes
Database mounted.
SQL> alter database flashback on;
数据库已更改。
SYS@orcl2> alter database open;
Database altered.
SYS@orcl2> select flashback_on from v$database;
FLASHBACK_ON
------------------
YES
2.4 Flashback Database操作示例
做操作前先备份数据库:
RMAN> backup database;
2.4.1 检查是否启动了flash recovery area
SQL> show parameter db_recovery_file
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest tring D:/oracle/flash_recovery_area
db_recovery_file_dest_size big integer 1G
2.4.2 检查是否启用了归档
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 USE_DB_RECOVERY_FILE_DEST
最早的联机日志序列 9
下一个存档日志序列 11
当前日志序列 11
2.4.3 检查是否启用了flashback database
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
YES
2.4.4 查询当前的scn
SQL> SELECT CURRENT_SCN FROM V$DATABASE;
CURRENT_SCN
-----------
947921
2.4.5 查询当前的时间
SQL> select to_char(sysdate,'yy-mm-dd hh24:mi:ss') time from dual;
TIME
-----------------
09-10-14 14:37:05
2.4.6 删除表A
SQL> select * from A;
ID NAME
---------- ----------
1 tianlesoftware
2 dave
SQL> drop table A;
表已删除。
SQL> commit;
2.4.7 重启DB 到mount
Flashback Database 实际是对数据库的一个不完全恢复操作,
因为需要关闭数据库重启到mount状态
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount
ORACLE 例程已经启动。
Total System Global Area 209715200 bytes
Fixed Size 1248116 bytes
Variable Size 79692940 bytes
Database Buffers 121634816 bytes
Redo Buffers 7139328 bytes
数据库装载完毕。
2.4.8 执行恢复:分timestamp 或者SCN两种
SQL> Flashback database to timestamp to_timestamp('09-10-14 14:37:05','yy-mm-dd hh24:mi:ss');
闪回完成。
或者:
SQL> Flashback database to scn 947921;
闪回完成。
2.4.9 打开数据库
在执行完flashback database 命令之后,oracle 提供了两种方式让你修复数据库:
1). 直接alter database open resetlogs 打开数据库,当然,指定scn 或者timestamp 时间点之后产生的数据统统丢失。
2). 先执行alter database open read only 命令,以read-only 模式打开数据库, 然后立刻通过逻辑导出的方式将误操作涉及表的数据导出,再执行recover database 命令以重新应用数据库产生的redo,将数据库修复到flashback database 操作前的状态, 然后再通过逻辑导入的方式,将之前误操作的表重新导入,这样的话对现有数据的影响最小,不会有数据丢失。
这里演示,就以resetlogs方式打开:
SQL> alter database open resetlogs;
数据库已更改。
验证数据:
SQL> select * from A;
ID NAME
---------- ----------
1 tianlesoftware
2 dave
2.5 和Flashback Database 相关的3个视图
2.5.1 V$database
这个视图可以查看是否启用了Flashback database功能
SQL> select flashback_on from v$database;
FLASHBACK_ON
------------------
YES
2.5.2 V$flashback_database_log
Flashback Database 所能回退到的最早时间,取决与保留的Flashback Database Log 的多少,
该视图就可以查看许多有用的信息。
Oldest_flashback_scn / Oldest_flashback_time : 这两列用来记录可以恢复���最早的时点
Flashback_size: 记录了当前使用的Flash Recovery Area 空间的大小
Retention_target: 系统定义的策略
Estimated_flashback_size: 根据策略对需要的空间大小的估计值
SQL> select oldest_flashback_scn os, to_char(oldest_flashback_time,'yy-mm-dd hh24:mi:ss') ot, retention_target rt,flashback_size fs, estimated_flashback_size es
from v$flashback_database_log;
OS OT RT FS ES
---------- ----------------- ---------- ---------- ----------
1150657 14-07-01 10:18:39 1440 209715200 0
2.5.3 V$flashback_database_stat
这个视图用来对Flashback log 空间情况进行更细粒度的记录和估计。
这个视图以小时为单位记录单位时间内数据库的活动量:
Flashback_Data 代表Flashback log产生数量,
DB_Date 代表数据改变数量,
Redo_Date代表日志数量,
通过这3个数量可以反映出数据的活动特点,更准确的预计Flash Recovery Area的空间需求
SQL> alter session set nls_date_format='hh24:mi:ss';
会话已更改。
SQL> select *from v$flashback_database_stat;
BEGIN_TI END_TIME FLASHBACK_DATA DB_DATA REDO_DATA ESTIMATED_FLASHBACK_SIZE
-------- -------- -------------- ---------- ---------- ------------------------
14:43:10 15:15:28 6455296 29310976 3898368 0