这篇主要介绍的是RAC 环境下的RMAN 备份。 关于Oracle 备份与恢复的一些理论知识参考我的Blog:
Oracle 备份 与 恢复 概述
http://blog.csdn.net/tianlesoftware/archive/2010/04/16/5490733.aspx
一. RAC 归档的设置
1.1 相关理论知识
RAC 在运行的时候,每个实例都会产生归档日志,所有实例的归档日志集中在一起,才能完整地代表数据库的操作历史,此外,只有进行介质恢复(Media Recovery)时,才会用到归档日志。 进行介质恢复时,才要求在执行恢复操作的那个节点访问所有实例的归档日志。
正是因为归档日志有这些特点,所以归档位置的设计也有两种方案:
(1)各节点生成的归档放到共享存储上,这样自然可以确保每个节点都能够访问到,比如将归档存放到ORACLE的ASM,或者是第三方提供的集群文件系统中。 对于这种方法,一些集群的配置比较麻烦,而且也增加了ASM的维护,出现问题也不好处理。
(2)各节点除在本地生成归档文件外,另外向其它节点或者说执行备份的节点发送归档日志,以确保执行备份的那台节点能够访问到所有的归档文件。在这种方法中,因为ORACLE 的重做日志发送机制非常灵活,在10g版本中可以同时向10个目标地写入归档(11g增加到了30个),所以利用这种特性,将各节点生成的归档发送到执行备份的节点中,来实现该节点能够访问所需的归档文件。
在第二种方案中,我们可以在每个节点建2个归档目录,分别存放本地和其他节点节点的归档日志,这里假设是2个节点的RAC.
归档位置 |
实例1 |
实例2 |
本地磁盘 |
Mkdir /rac1_arch Mkdir /rac2_arch |
Mkdir /rac1_arch Mkdir /rac2_arch |
Log_archive_dest_1 |
Location=’/rac1_arch’ |
Location=’/rac2_arch’ |
Log_archive_dest_2 |
Service=’rac2’ |
Service=’rac1’ |
Standby_archive_dest |
‘/rac2_arch’ |
‘/rac1_arch’ |
在每个节点上建2个目录: /u02/rac1_arch, /u02/rac2_arch, 并赋予读写的权限:
[root@rac2 /]# mkdir /u02/rac1_arch
[root@rac2 /]# mkdir /u02/rac2_arch
[root@rac2 /]# chown oracle:oinstall /u02/*
[root@rac2 /]# chmod 777 /u02/*
1.2 RAC 设置成归档模式
RAC的归档设置和单实例归档设置差不多。 先将所有实例设置为非OPEN状态,然后在任意一个处于MOUNT状态的实例执行ALTER DATABASE命令,操作成功后,再正常启动其它实例即可。
之前整理的一篇RAC 归档切换的文档,不过和今天这个实验不太匹配,就重新在整理下。
Oracle RAC 归档 与 非归档 切换
http://blog.csdn.net/tianlesoftware/archive/2010/04/20/5501184.aspx
1.2.1 设置归档参数
1.2.1.1 设置实例orcl1的参数:
SQL> alter system set log_archive_dest_1 = 'LOCATION=/u02/rac1_arch' scope=both sid='orcl1';
System altered.
SQL> alter system set log_archive_dest_2 = 'service=orcl2' scope=both sid='orcl1';
System altered.
SQL> alter system set standby_archive_dest = '/u02/rac2_arch' scope=both sid='orcl1';
System altered.
1.2.1.2 设置实例orcl2的参数:
SQL> alter system set log_archive_dest_1 = 'LOCATION=/u02/rac2_arch' scope=both sid='orcl2';
System altered.
SQL> alter system set log_archive_dest_2= 'SERVICE=orcl1' scope=both sid='orcl2';
System altered.
SQL> alter system set standby_archive_dest = '/u02/rac1_arch' scope=both sid='orcl2';
System altered.
1.2.1.3 在2个节点上分别验证参数的状态:
SQL> set wrap off
SQL> col dest_name format a20
SQL> select dest_name,status,error from v$archive_dest;
DEST_NAME STATUS ERROR
-------------------- --------- -------------------------------------------------
LOG_ARCHIVE_DEST_1 VALID
LOG_ARCHIVE_DEST_2 VALID
LOG_ARCHIVE_DEST_3 INACTIVE
LOG_ARCHIVE_DEST_4 INACTIVE
LOG_ARCHIVE_DEST_5 INACTIVE
LOG_ARCHIVE_DEST_6 INACTIVE
LOG_ARCHIVE_DEST_7 INACTIVE
LOG_ARCHIVE_DEST_8 INACTIVE
LOG_ARCHIVE_DEST_9 INACTIVE
LOG_ARCHIVE_DEST_10 INACTIVE
10 rows selected.
1.2.2 将RAC 切换成归档模式
1.2.2.1 修改数据库的归档模式
SQL> alter system set cluster_database=false scope=spfile sid='*';
System altered.
1.2.2.2 关闭所有实例
1.2.2.3 在任意一个实例上将数据库启动到mount状态,修改数据库归档模式
SQL> startup mount
ORACLE instance started.
Total System Global Area 167772160 bytes
Fixed Size 1266392 bytes
Variable Size 117443880 bytes
Database Buffers 46137344 bytes
Redo Buffers 2924544 bytes
Database mounted.
SQL> alter database archivelog;
Database altered.
SQL> alter system set cluster_database=true scope=spfile sid='*';
System altered.
SQL> shutdown immediate
1.2.2.4 重启数据库,确定归档生效
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u02/rac1_arch
Oldest online log sequence 54
Next log sequence to archive 55
Current log sequence 55
SQL> archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /u02/rac2_arch
Oldest online log sequence 26
Next log sequence to archive 27
Current log sequence 27
1.2.2.5 在两个节点分别切换归档日志,并检查对应的目录是否产生归档日志
SQL> alter system switch logfile;
System altered.
SQL> select inst_id,recid,dest_id,name from gv$archived_log ;
INST_ID RECID DEST_ID NAME
---------- ---------- ---------- -----------------------------------------------
2 12 1 /u02/rac1_arch/1_5_730181171.dbf
2 13 2 /u01/rac1_arch1_5_730181171.dbf
2 14 2 /u02/rac2_arch/2_3_730181171.dbf
2 15 1 /u02/rac1_arch/1_6_730181171.dbf
2 16 2 /u02/rac1_arch/1_6_730181171.dbf
2 17 1 /u02/rac1_arch/1_7_730181171.dbf
……
1 12 1 /u02/rac1_arch/1_5_730181171.dbf
1 13 2 /u01/rac1_arch1_5_730181171.dbf
1 14 2 /u02/rac2_arch/2_3_730181171.dbf
1 15 1 /u02/rac1_arch/1_6_730181171.dbf
1 16 2 /u02/rac1_arch/1_6_730181171.dbf
提示:RAC 数据库各实例拥有各自的REDO线程,归档文件名的生成规则由LOG_ARCHIVE_FORMAT初始化参数控制,默认情况下是 %t_%s_%r.dbf ,所以不会导致重复的发生。
注意一个参数:LOG_ARCHIVE_LOCAL_FIRST,用来设置是否首先归档文件到本地,默认为true.
LOG_ARCHIVE_LOCAL_FIRST 这个参数是Oracle 10g 新增的,它主要针对Standby环境退出,在Oracle 10g 以前的Standby中,本地和远程的归档都完成后,联机日志文件才可以被重用,在网络速度慢的环境中,远程归档的配置会很大程度的影响节点的处理能力。而设置LOG_ARCHIVE_LOCAL_FIRST=true,Oracle 会先进行本地归档,本地归档结束后在进行远程传递,同时使联机日志可以重用,从而减少了网络环境对本地的影响。 如果把这个参数设置为FALSE, 则相当于Oracle 10g 之前的方式,这个参数默认是True,如果在应用中遇到找不到归档日志的问题,就可以把这个参数改成FALSE.
二、RAC数据库的RMAN备份