欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

Oracle数据库的闪回恢复区及多归档路径的设置

程序员文章站 2022-04-26 15:17:10
...

Oracle9i开始提供闪回查询,以便能在需要的时候查到过去某个时刻的一致性数据,这是通过Undo实现的。这个功能有很大的限制,就是

Oracle9i开始提供闪回查询,以便能在需要的时候查到过去某个时刻的一致性数据,这是通过Undo实现的。这个功能有很大的限制,就是相关事务的undo不能被覆盖,否则就无力回天了。oracle10g大大的增强了闪回查询的功能,并且提供了将整个数据库回退到过去某个时刻的能力,这是通过引入一种新的flashback log实现的。flashback log有点类似redo log,只不过redo log将数据库往前滚,flashback log则将数据库往后滚。为了保存管理和备份恢复相关的文件,oracle10g提供了一个叫做闪回恢复区(Flashback recovery area)的新特性,可以将所有恢复相关的文件,比如flashback log,archive log,backup set等,放到这个区域集中管理。

1.设置闪回恢复区
闪回恢复区主要通过3个初始化参数来设置和管理
db_recovery_file_dest:指定闪回恢复区的位置
db_recovery_file_dest_size:指定闪回恢复区的可用空间大小
db_flashback_retention_target:指定数据库可以回退的时间,单位为分钟,默认1440分钟,也就是一天。当然,实际上可回退的时间还决定于闪回恢复区的大小,因为里面保存了回退所需要的 flash log。所以这个参数要和db_recovery_file_dest_size配合修改。

2.启动flashback database
设置了闪回恢复区后,可以启动闪回数据库功能。

首先,数据库必须已经处于归档模式

那么如何设置归档呢?很简单的步骤
1.关闭数据库
SQL> shutdown immediate;
2.启动数据库为mount模式
SQL> startup mount
3.显示和修改归档模式
SQL> archive log list
SQL> alter database archivelog;
SQL> alter database open
4.设置归档日志的格式
SQL>alter system set log_archive_format='ARC%s%t%r.log' scope=spfile;
5.设置归档日志的存放路径
SQL>alter system set log_archive_dest='+data/arcl' scope=spfile;
SQL>shutdown immediate
SQL>startup
6.强制切换归档日至
SQL>alter system switch logfile;
7.取消归档
SQL>alter database noarchivelog;

参数
1.格式参数
%s 日志序列号
%S 日志序列号(带前导的0)
%t 重做线程编号
%a 活动的ID号
%d 数据库ID号
%r RESELOGS的iD值

SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 156
Next log sequence to archive 158
Current log sequence 158

然后,启动数据库到mount状态
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup mount
ORACLE instance started.

Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 75499088 bytes
Database Buffers 205520896 bytes
Redo Buffers 2973696 bytes
Database mounted.

SQL>alter database flashback on;
数据库已更改。
SQL> alter database open;
数据库已更改。
SQL>selectFLASHBACK_ONfrom v$database;
FLASHBACK_ON
------------------------------------
YES

3.取消闪回恢复区
将db_recovery_file_dest参数设置为空,可以停用闪回恢复区。
如果已经启用flashback database,则不能取消闪回恢复区。
SQL> alter system set db_recovery_file_dest='';
alter system set db_recovery_file_dest=''
*
第 1 行出现错误:
ORA-02097: 无法修改参数, 因为指定的值无效
ORA-38775: 无法禁用快速恢复区 - 闪回数据库已启用

所以,,必须先禁用flashback database,才能取消闪回恢复区

SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。

SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 142606336 bytes
Fixed Size 1247732 bytes
Variable Size 83887628 bytes
Database Buffers 50331648 bytes
Redo Buffers 7139328 bytes
数据库装载完毕。

SQL>alter database flashback off;
数据库已更改。

SQL> alter database open;
数据库已更改。

SQL> alter system set db_recovery_file_dest='';
系统已更改。

4.闪回恢复区的内容
所有和恢复相关的文件都可以存放到闪回恢复区
SQL>select file_type from v$flash_recovery_area_usage;
FILE_TYPE
------------------------
CONTROLFILE
ONLINELOG
ARCHIVELOG
BACKUPPIECE
IMAGECOPY
FLASHBACKLOG
已选择6行。

上面的视图中可以看出,包括controfile,online redo logfile,archive logfile,rman backup
piece,rman image copy, flashback log等,都可以利用闪回恢复区来存放、管理。

5.闪回恢复区的一些限制
如果设置了闪回恢复区,则log_archive_dest和log_archive_duplex_dest将不可用

alter system set log_archive_dest='e:/'
*
第 1 行出现错误:
ORA-02097: 无法修改参数, 因为指定的值无效
ORA-16018: 无法将 LOG_ARCHIVE_DEST 与 LOG_ARCHIVE_DEST_n 或
DB_RECOVERY_FILE_DEST 一起使用

SQL> alter system set log_archive_duplex_dest='e:/';
alter system set log_archive_duplex_dest='e:/'
*
第 1 行出现错误:
ORA-02097: 无法修改参数, 因为指定的值无效
ORA-16018: 无法将 LOG_ARCHIVE_DUPLEX_DEST 与 LOG_ARCHIVE_DEST_n 或
DB_RECOVERY_FILE_DEST 一起使用

Oracle数据库的闪回恢复区及多归档路径的设置