一、归档日志分别存放在本地
备份部分:
对于建立在裸设备上的RAC环境,由于归档不能存放到裸设备上,因此,所有的归档都必须保存在本地的磁盘上。直接通过RMAN备份会导致错误。
首先模仿裸设备的情况,修改原来LOG_ARCHIVE_DEST_1的配置,将每个实例的归档改在本地硬盘:
节点一:
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1 = 'LOCATION=/data1/archivelog' SID = 'testrac1';
节点二:
SQL> ALTER SYSTEM SET LOG_ARCHIVE_DEST_1 = 'LOCATION=/data1/archivelog' SID = 'testrac2';
RMAN> run
2> {
3> allocate channel c1 device type disk format '/data1/backup/%U' connect sys/test@testrac1;
4> allocate channel c2 device type disk format '/data1/backup/%U' connect sys/test@testrac2;
5> backup database plus archivelog delete all input;
6> }
恢复部分:
下面准备通过RMAN进行数据库的恢复。由于RAC的备份是同时备份到两个节点的本地硬盘上,因此恢复的时候也应该两个节点同时进行RESTORE操作。
可以在两个节点上分别启动RMAN,将数据库处于STARTUP MOUNT状态,然后就可以在任意一个节点上执行RESTORE操作:
分别在两个节点上如下操作:
$ rman target /
RMAN> startup mount
在任意节点上恢复数据文件
RMAN> run
2> {
3> allocate channel c1 device type disk format '/data1/backup/%U' connect sys/test@testrac1;
4> allocate channel c2 device type disk format '/data1/backup/%U' connect sys/test@testrac2;
5> restore database;
6> }
下面恢复归档日志:
RMAN> run
2> {
3> allocate channel c1 device type disk format '/data1/backup/%U' connect sys/test@testrac1;
4> allocate channel c2 device type disk format '/data1/backup/%U' connect sys/test@testrac2;
5> restore (archivelog sequence between 179 and 183 thread 1)
6> (archivelog sequence between 99 and 103 thread 2);
7> }
现在面临一个问题,对于还原(RESTORE)操作,可以两个实例同时进行,但是对于恢复(RECOVER)操作,只能一个实例完成。
这就要求一个实例必须能同时看到两个实例的归档日志。可以通过nfs mount等方式来实现,这里采用最简单的方法,将节点2上的归档拷贝到节点1的归档目录下。
首先关闭数据库,然后将两个实例都启动到mount状态,然后通过RMAN进行恢复。
RMAN> host 'rcp 172.25.198.223:/data1/archivelog/* /data1/archivelog'
2> ;
主机命令完成
RMAN> run
2> {
3> allocate channel c1 device type disk format '/data1/backup/%U' connect sys/test@testrac1;
4> allocate channel c2 device type disk format '/data1/backup/%U' connect sys/test@testrac2;
5> recover database;
6> }
二、归档日志在本地放一份,在ASM上放一份
由于日志文件的备份和还原只能通过本地的实例进行,而对于恢复的实例来说,并非所有的归档日志都是可见的。这就要求归档日志在还原完成之后,必须通过手工的方式同步到恢复站点,就不仅增加了恢复的复杂性,而且效率比较低,还要求用户必须清楚的知道需要还原的归档日志有哪些。
解决方法一:将归档日志放到ASM上
如果将归档日志放到ASM上,那么备份和恢复RAC数据库就像备份和恢复一个单实例数据库一样简单了。不过ASM有ASM的缺点,个人感觉ASM目前的bug还相对多一些,也许11g的时候,ASM会更加成熟。因此,把数据文件放到ASM上还是有风险的,不过将归档放到ASM上就相对安全一些了。不过如果ASM出现了故障,仍然会导致无法完成归档使得数据库停止响应。个人认为,最稳妥的方法仍然是将归档设置在本地的磁盘上,同时两个实例设置第二归档目的地:ASM。利用RMAN的归档定位自动FAILOVER功能,来实现归档的备份和恢复。
设置log_archive_dest_2到ASM上:
SQL> alter system set log_archive_dest_2 = 'LOCATION=+DISK/testrac/';
备份部分:
1、先备份一次本地的日志,并删除
RMAN> run
2> {
3> allocate channel c1 device type sbt connect sys/test@testrac1;
4> allocate channel c2 device type sbt connect sys/test@testrac2;
5> backup archivelog all delete all input;
6> }
2、再整库+归档日志备份,因本地日志已找不到,RMAN会找存在于ASM上的归档日志
RMAN> run
2> {
3> allocate channel c1 device type sbt;
4> allocate channel c2 device type sbt;
5> backup database plus archivelog delete all input;
6> }
恢复部分:
$ srvctl stop db -d testrac
$ rman target /
RMAN> startup mount
RMAN> run
2> {
3> allocate channel c1 device type sbt;
4> allocate channel c2 device type sbt;
5> restore database;
6> }
由于设置了ASM,可以不必还原归档,而直接进行恢复:
RMAN> run
2> {
3> allocate channel c1 device type sbt;
4> allocate channel c2 device type sbt;
5> recover database;
6> }
问题:
但是这种备份方式存在问题,BACKUP DATABASE PLUS ARCHIVELOG DELETE ALL INPUT由于只连接一个实例,因此只会清除当前实例上的归档日志和ASM上的归档日志,对应另一个实例上的归档则无法清除。
解决这个问题的最简单的办法是在备份数据库的时候不要使用DELETE语句,在备份完成后,另外分配合适的CHANNEL来删除所有的归档日志。
三、归档日志放在本地,使用NFS解决
Oracle的官方文档给出的方法就是通过NFS MOUNT方式来实现。
准备部分:
采用这个方法需要保证每个节点的归档目的地都是唯一的,并将这个归档目的地以NFS MOUNT方式加载到远端站点。
首先在两个节点上分别建立归档的目的目录:
# su - oracle
Sun Microsystems Inc. SunOS 5.8 Generic Patch October 2001
$ mkdir /data1/archivelog1 /data1/archivelog2
$ exit
# hostname
racnode1
# su - oracle
Sun Microsystems Inc. SunOS 5.8 Generic Patch October 2001
$ mkdir /data1/archivelog1 /data1/archivelog2
$ exit
# hostname
racnode2
在节点一设置目录的共享:
# share -F nfs -o rw=racnode2 /data1/archivelog1
在节点二设置目录的共享:
# share -F nfs -o rw=racnode1 /data1/archivelog2
在节点一加载节点二的目录:
# mount racnode2:/data1/archivelog2 /data1/archivelog2
在节点二加载节点一的目录:
# mount racnode1:/data1/archivelog1 /data1/archivelog1
分别在节点一和节点二上执行 df –k,确保NFS MOUNT已经加载成功。
注意,如果需要配置在系统重启后生效,应该将share命令和mount命令的修改添加到主机的/etc/dfs/dfstab文件和/etc/vfstab。详细内容可以参考:http://yangtingkun.51CTO提醒您,请勿滥发广告!/post/468/284160
如果希望系统重启后自动进行mount,那么在nfs客户端,需要修改/etc/vfstab文件:
racnode2:/data1/archivelog - /archivelog2 nfs - yes -
为了保证nfs的服务器端重启后,share信息不丢失,可以在/etc/dfs/dfstab文件中添加:
share -F nfs -o rw=racnode1 /data1/archivelog
下面修改数据库的初始化参数:
$ sqlplus "/ as sysdba"
SQL> col value format a50
SQL> select inst_id, value from gv$parameter where name = 'log_archive_dest_1';
INST_ID VALUE
---------- --------------------------------------------------
2 LOCATION=/data1/archivelog
1 LOCATION=/data1/archivelog
SQL> alter system set log_archive_dest_1 = 'LOCATION=/data1/archivelog1' sid = 'testrac1';
SQL> alter system set log_archive_dest_1 = 'LOCATION=/data1/archivelog2' sid = 'testrac2';
备份部分:
备份现有归档日志,确保新的设置对以后的备份生效。
RMAN> run
2> {
3> allocate channel c1 device type sbt connect sys/test@testrac1;
4> allocate channel c2 device type sbt connect sys/test@testrac2;
5> backup archivelog all delete all input;
6> }
下面就可以在任意一个节点上进行备份:
RMAN> run
2> {
3> allocate channel c1 device type sbt;
4> allocate channel c2 device type sbt;
5> backup database plus archivelog delete all input;
6> }
恢复部分:
$ srvctl stop db -d testrac
$ rman target /
RMAN> startup mount
RMAN> run
2> {
3> allocate channel c1 device type sbt;
4> allocate channel c2 device type sbt;
5> restore database;
6> recover database;
7> }
问题:
由于在主机上进行了NFS mount,数据库的备份和恢复可以通过一个节点进行。但是这种情况存在着一个比较严重的问题。就是NFS mount在一个节点没有启动的情况下,会极大的影响另一个节点的性能。也就是说,如果RAC一个节点出现故障,导致机器无法正常启动的话,另一个节点不但要承担全部的数据库压力,而且还会受到nfs mount带来的性能负载,基本上导致这个节点无法正常工作。
由于性能上的考虑,使用NFS mount的时候一定要慎重。本文出自 51CTO.COM技术博客
分享到:
相关推荐
Oracle RAC 环境 RMAN 备份与恢复 Oracle RAC 环境中的备份和恢复是非常重要的,特别是在生产环境中。在 RAC 环境中,备份和恢复的操作与普通数据库环境有所不同。本文将详细介绍 RAC 环境中的 RMAN 备份与恢复,...
Oracle 11g R2 的 RMAN (Recovery Manager) 是 Oracle 数据库管理系统中的一个关键工具,主要用于数据库的备份和恢复。RMAN 提供了一种高效且灵活的方式来管理和保护数据库,确保在数据丢失或系统故障时能够快速恢复...
### RAC+RMAN单实例恢复详解 #### 环境背景 本篇文章将详细介绍如何在RAC(Real Application Clusters)环境下通过RMAN(Recovery Manager)进行单实例数据库的恢复过程。恢复的目标是在一个单实例环境中实现,...
本文将以一个具体案例为基础,详细介绍如何通过RMAN将Oracle 19c RAC的备份数据恢复到单实例环境。 #### 准备阶段 1. **环境配置**: - 在目标服务器上配置环境变量,确保与源RAC环境一致。 - 安装相同版本的...
Oracle RAC环境,归档放到本地和放到ASM存储,备份规则是不同的。
本文档旨在提供一个基于 RMAN 备份的 Oracle Data Guard RAC TO RAC 迁移方案,以便帮助 DBA schnell 和可靠地完成数据库迁移任务。该方案适用 Oracle 11g 版本,文档版本为 1.0,发布日期为 2018 年 6 月。 第一章...
RMAN备份原理的理解对于数据库管理员来说至关重要,因为它直接影响到数据的安全性和恢复效率。 RMAN备份数据块的工作机制主要基于备份算法。在开始备份前,RMAN会根据数据库的状态和配置,编译出需要备份的数据文件...
rac之rman备份
超经典RMAN备份恢复——RAC环境数据库的备份(五)
超经典 RMAN备份恢复——RAC环境数据库的备份(六)
超经典 RMAN备份恢复——RAC环境数据库的备份(二)
超经典 RMAN备份恢复——RAC环境数据库的备份(七)
超经典 RMAN备份恢复——RAC环境数据库的备份(九)
超经典 RMAN备份恢复——RAC环境数据库的备份(八)
超经典RMAN备份恢复——RAC环境数据库的备份(四)
超经典 RMAN备份恢复——RAC环境数据库的备份(三)
在Oracle 10g RAC环境下,备份通常采用RMAN的网络备份功能,即在每个节点上执行RMAN备份,然后将备份集复制到一个共享的存储设备或网络位置。在这个例子中,备份文件被打包成tar文件并传输到目标单机环境。 恢复...
超经典 RMAN备份恢复--RAC环境数据库的备份
Oracle 11g rman备份脚本 线上环境,
总结起来,Oracle 11.2.0.3单实例迁移到11gR2 RAC的异机恢复过程是一项技术性强且步骤繁多的任务,涉及到RMAN的备份恢复、新环境的配置、数据库和应用的适应性调整等多个环节。正确执行这些步骤,可以实现平滑迁移,...