rac下rman备份

RMAN 备份数据库时,要求目标库必须处于归档模式,因此我们首先简单描述一下RAC环境数据库如何修改归档模式。 
修改归档模式的命令为MOUNT模式下执行ALTER DATABASE ARCHIVELOG/NOARCHIVELOG;命令,和单实例没什么区别。 
不过如果操作的是RAC数据库,那么必须所有实例都处于非OPEN状态,然后在任意一个处于MOUNT状态的实例执行ALTER DATABASE命令,操作成功后,再正常启动其它实例即可。 
是不是和mount/dismount asm磁盘组的操作类似 
要留一个实例进行操作。 
这里需要注意的一点是,RAC数据库由于拥有多个实例,因此需要注意每个实例相关初始化参数:LOG_ARCHIVE_DEST_n的设置 
务必需要确保该参数设置的路径合法有效,归档也能顺利进行。 
下面列举一个启用RAC数据库归档模式的演示: 以sysdba身份连接到ORACLE数据库的任意实例,查询归档状态,以及当前实例的状态: 
SQL > archive log list;
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            /u01/app/oracle/product/10.2.0/db_1/dbs/arch
Oldest online log sequence     21 6
Current log sequence           21 7 
SQL >select inst_id,instance_name,version,archiver,status from gv$instance;
   INST_ID INSTANCE_NAME    VERSION           ARCHIVE STATUS
---------- ---------------- ----------------- ------- ------------
         1 devdb1          10.2.0.4.0        STOPPED MOUNTED
         2 devdb2          10.2.0.4.0        STOPPED MOUNTED 


上述返回的数据中可以获得下列信息: 
未启动归档模式 ; 
10204 版本的双节点数据库并均启动至MOUNT状态 ; 
默认归档路径未修改过 ; 
现在每个服务器上建立归档路径,注意是以oracle用户身份: 
devdb1:
mkdir -p /u01/oradata/devdb1/archivelog
mkdir -p /u01/oradata/devdb2/archivelog
devdb2:
mkdir -p /u01/oradata/devdb1/archivelog
mkdir -p /u01/oradata/devdb2/archivelog


我们启动2个devdb到mount状态: 
首先: 
srvctl stop database -d devdb 
关闭数据库 
然后devdb1进入mount模式,2先关闭: 
修改归档的默认路径 : 
SQL> alter system set log_archive_dest_1="location=/u01/oradata/devdb1/archivelog" sid='devdb1';            
System altered. 
SQL>  alter system set log_archive_dest_1="location=/u01/oradata/devdb2/archivelog" sid='devdb2';
System altered. 
考虑到两个节点的目录结构可能不一致,因此这里分别为节点1和节点2指定适当的路径。 
接下来就可以启动归档模式了,需要注意如果你所操作的环境中 实例状态为OPEN 模式,一定要首先关闭实例 并重新启动到MOUNT状态 
注意关闭的时候是 全部关闭,而启动时只需要启动一个实例即可,其它实例可等归档状态启用后再正常启动 
srvctl stop database -d devdb -o immediate 
这才是正确的,要干净的关闭,不指定-o那就是默认为normal,正式环境里是不太可行的,关不掉的。 
SQL> alter database archivelog;
Database altered. 
SQL>  archive log list;
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /u01/oradata/devdb1/archivelog
Oldest online log sequence     56
Next log sequence to archive   57
Current log sequence           57 


当前归档模式已经启动,接下来就可以正常启动其它的实例了。 
在devdb2上还需要开启归档吗? 
不需要了 
直接: 
srvctl start database -d devdb 
数据归档就配置好了 
首先要明确一点,通过RMAN创建备份集时,必须保证连接到的实例能够访问所有节点所生成的归档日志,否则会导致备份失败(除非不备份归档文件) 
对于单实例当然不存在这样的问题,因为单实例数据库的归档通常是放在本地,必然能够访问 
不过对于多实例的RAC数据库这就可能会成为一个问题, 如何保证RMAN能够访问到所有节点生成的归档文件呢 ? 
两种方案: 
1、各节点生成的归档放到共享存储上,这样自然可以确保每个节点都能够访问到,比如将归档存放到ORACLE的ASM,或者是第三方提供的集群文件系统中; 
2、各节点除在本地生成归档文件外,另外向其它节点或者说执行备份的节点发送归档日志,以确保执行备份的那台节点能够访问到所有的归档文件。 
我们采用第一种方法。 
从RMAN易用的角度来说,将归档放置于共享存储上无疑是最方便的,不过第三方集群件的配置又会带来一些其它额外的管理成本; 
ASM倒是简单,但是我们的个人看法是这样,ASM确实好用效率也不错,不过由于ASM对DBA来说就像个黑匣子 
使用上了之后就得求天保佑千万不要出现问题,一旦出现问题很有可能都不知该从何处着手处理 
因此,这里我们决定采用另外的方案。 
这里考虑使用NFS的自动挂载方式。 


2.1配置NFS
devdb1上root身份: 
vi /etc/exports 
内容: 
/u01/oradata/devdb1/archivelog *(rw) 
service portmap start 
 service nfs start 
这个是看状态的,正常会这样。 
showmount -e localhost 
显示nfs的信息。 
重新挂载exports文件内容(防止重启) 
exportfs -arv
节点1好了,其他节点也类似配置。 
然后在devdb2上以root身份: 
showmount -e devdb1
umount /u01/oradata/devdb1/archivelog
mount -t nfs -o nosuid,noexec,nodev,rw devdb1:/u01/oradata/devdb1/archivelog /u01/oradata/devdb1/archivelog
ls /u01/oradata/devdb1/archivelog 
devdb2设置nfs: 
vi /etc/exports 
内容: 
/u01/oradata/devdb2/archivelog *(rw) 
启动服务 
service portmap start
service nfs start
/etc/init.d/nfslock start 
然后修改启动级别
chkconfig portmap on
chkconfig nfs on
chkconfig nfslock on 
tail /var/log/messages
netstat -tulnp| grep -E '(rpc|nfs)'
rpcinfo -t localhost nfs
showmount -e localhost
tail /var/lib/nfs/etab 
以上步骤是我们编辑nfs启动映射文件的过程 
devdb1上root身份: 
vi /root/nfsdevdb1.sh 
内容: 
#!/bin/bash
umount /u01/oradata/devdb2/archivelog
mount -t nfs -o nosuid,noexec,nodev,rw devdb2:/u01/oradata/devdb2/archivelog /u01/oradata/devdb2/archivelog
存盘退出: 
chmod 777 nfsdevdb1.sh
./nfsdevdb1.sh
ls /u01/oradata/devdb2/archivelog
检查下有没有问题。 
devdb2上root身份: 
vi /root/nfsdevdb2.sh 
内容: 
#!/bin/bash
umount /u01/oradata/devdb1/archivelog
mount -t nfs -o nosuid,noexec,nodev,rw devdb1:/u01/oradata/devdb1/archivelog /u01/oradata/devdb1/archivelog
存盘退出: 
chmod 777 nfsdevdb2.sh
./nfsdevdb2.sh
ls /u01/oradata/devdb1/archivelog
为了验证可以手动做个归档:alter system switch logfile;
都可以看到了,到此设置完毕 
nfs的内容大家可以下去研究一下,特别是linux的 
第二种方法 
ORACLE 的重做日志发送机制非常灵活,在10g版本中可以同时向10个目标地写入归档(11g增加到了30个),这里我们准备利用这种特性 
将各节点生成的归档发送到执行备份的节点中,来实现该节点能够访问所需的归档文件 
操作非常简单,其实上就是给LOG_ARCHIVE_DEST_n初始化参数设置适当的值 2
例如当下的测试环境中,我们经过慎重考虑,决定将备份操作放在节点2端执行 
因此,只需要在节点1中,设置发送节点1生成的归档文件到节点2即可,操作如下: 
SQL> alter system set log_archive_dest_2=¨service=devdb2¨ sid=¨devdb1¨;
System altered. 
命令中设置的devdb2是指tnsnames.ora文件中配置的连接节点2的网络服务名 
除此之外呢,还有一个初始化参数LOG_ARCHIVE_LOCAL_FIRST,用来设置是否首先归档文件到本地 
默认为true,将其改为false,同样只修改节点1的设置即可,操作如下: 
SQL> alter system set log_archive_local_first=false sid=¨devdb1¨;
System altered. 
测试一下效果,尝试手动触发归档操作,然后查看是否成功归档至各节点的适当位置: 
SQL> alter system switch logfile;
System altered. 
SQL> select inst_id,recid,dest_id,name from gv$archived_log where sequence#=219;
   INST_ID RECID DEST_ID NAME
---------- ----- ------- ------------------------------------------------------------
         1     8       2 /u01/oradata/devdb2/archivelog/1_219_703671669.dbf
         1     9       1 /u01/oradata/devdb1/archivelog/1_219_703671669.dbf
         2     8       2 /u01/oradata/devdb2/archivelog/1_219_703671669.dbf
         2     9       1 /u01/oradata/devdb1/archivelog/1_219_703671669.dbf 
归档文件成功生成并发送到节点2端 
提示: 
RAC 数据库各实例拥有各自的REDO线程 
因此还需要考虑各节点生成的归档文件名称规则的问题,不要因为文件名生成规则不合适造成文件名重复,导致归档失败 
归档文件名的生成规则由LOG_ARCHIVE_FORMAT初始化参数控制,还好默认情况下是 %t_%s_%r.dbf,不会导致重复的发生。 
下面我们来考虑一个问题 
丢失了几个归档怎么办? 
比如说由于山崩地裂洪水海啸等等这些最近几年我们耳熟能详的事件原因导致节点1的某几个归档没能成功发送至节点2 
结果节点2执行备份时报错(一般是提示找不到归档文件),那么手工复制缺少的几个归档到节点2的适当路径下就好了 
用什么复制呢? 
方式很多,如果文件数目不多的话,直接用scp命令吧 
比如说这里我们复制seq为218的归档文件到节点2,操作如下 
首先是找到要复制的文件详细路径,最简单的方式就是从v$archived_log视图中查找: 
SQL> select sequence#,name from v$archived_log where sequence#=218;
NAME
------------------------------------------------------------
/u01/oradata/devdb1/archivelog/1_218_703671669.dbf 
接下来通过scp命令来复制文件,scp可以在任意节点上操作,语法也比较简单,就是指明源路径和目标路径就好,例如: 
[oracle@devdb1 ~]$ scp /u01/oradata/devdb1/archivelog/1_218_703671669.dbf devdb2:/u01/oradata/devdb2/archivelog/1_218_703671669.dbf
1_218_703671669.dbf                                                                               100%   34MB  17.1MB/s   00:02 
然后在节点2注册该归档文件,操作如下: 
SQL>alter database register physical logfile ¨/u01/oradata/devdb2/archivelog/1_218_703671669.dbf¨;
Database altered. 
再次查询gv$archived_log,确定归档文件已被注册: 
SQL>select inst_id,recid,dest_id,name from gv$archived_log where sequence#=218;
   INST_ID RECID DEST_ID NAME
---------- ----- ------- ------------------------------------------------------------
         2     7       1 /u01/oradata/devdb1/archivelog/1_218_703671669.dbf
         2    10       1 /u01/oradata/devdb2/archivelog/1_218_703671669.dbf
         1     7       1 /u01/oradata/devdb1/archivelog/1_218_703671669.dbf
         1    10       1 /u01/oradata/devdb2/archivelog/1_218_703671669.dbf 


3、执行rac数据库备份:
rac rman备份核心脚本
RMAN> run{
2> allocate channel c0 device type disk format "/u01/backup/%U";
3> backup database plus archivelog;
4> release channel c0;
5> }


allocated channel: c0
channel c0: sid=132 instance=racdb1 devtype=DISK




Starting backup at 25-MAR-15
current log archived
channel c0: starting archive log backupset
channel c0: specifying archive log(s) in backup set
input archive log thread=1 sequence=48 recid=2 stamp=875275353
input archive log thread=1 sequence=49 recid=3 stamp=875283961
input archive log thread=2 sequence=6 recid=1 stamp=865947333
input archive log thread=2 sequence=7 recid=4 stamp=875283974
channel c0: starting piece 1 at 25-MAR-15
channel c0: finished piece 1 at 25-MAR-15
piece handle=/u01/backup/01q2nhg7_1_1 tag=TAG20150325T142614 comment=NONE
channel c0: backup set complete, elapsed time: 00:00:36
Finished backup at 25-MAR-15


Starting backup at 25-MAR-15
channel c0: starting full datafile backupset
channel c0: specifying datafile(s) in backupset
input datafile fno=00001 name=+DATA/racdb/datafile/system.262.862924783
input datafile fno=00005 name=+DATA/racdb/datafile/users.267.862924915
input datafile fno=00002 name=+DATA/racdb/datafile/undotbs1.263.862924831
input datafile fno=00004 name=+DATA/racdb/datafile/undotbs2.266.862924893
input datafile fno=00003 name=+DATA/racdb/datafile/sysaux.264.862924853
channel c0: starting piece 1 at 25-MAR-15
channel c0: finished piece 1 at 25-MAR-15
piece handle=/u01/backup/02q2nhhf_1_1 tag=TAG20150325T142654 comment=NONE
channel c0: backup set complete, elapsed time: 00:04:47
channel c0: starting full datafile backupset
channel c0: specifying datafile(s) in backupset
including current control file in backupset
including current SPFILE in backupset
channel c0: starting piece 1 at 25-MAR-15
channel c0: finished piece 1 at 25-MAR-15
piece handle=/u01/backup/03q2nhqe_1_1 tag=TAG20150325T142654 comment=NONE
channel c0: backup set complete, elapsed time: 00:00:11
Finished backup at 25-MAR-15


Starting backup at 25-MAR-15
current log archived
channel c0: starting archive log backupset
channel c0: specifying archive log(s) in backup set
input archive log thread=1 sequence=50 recid=6 stamp=875284317
input archive log thread=2 sequence=8 recid=5 stamp=875284315
channel c0: starting piece 1 at 25-MAR-15
channel c0: finished piece 1 at 25-MAR-15
piece handle=/u01/backup/04q2nhqu_1_1 tag=TAG20150325T143158 comment=NONE
channel c0: backup set complete, elapsed time: 00:00:02
Finished backup at 25-MAR-15


released channel: c0


删除已经备份过的归档日志
RMAN> delete noprompt archivelog all backed up 1 times to device type disk;


using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=148 instance=racdb1 devtype=DISK
allocated channel: ORA_DISK_2
channel ORA_DISK_2: sid=145 instance=racdb1 devtype=DISK


List of Archived Log Copies
Key     Thrd Seq     S Low Time  Name
------- ---- ------- - --------- ----
2       1    48      A 10-DEC-14 /u01/oradata/racdb1/archivelog/1_48_862924734.dbf
3       1    49      A 25-MAR-15 /u01/oradata/racdb1/archivelog/1_49_862924734.dbf
6       1    50      A 25-MAR-15 /u01/oradata/racdb1/archivelog/1_50_862924734.dbf
1       2    6       A 09-DEC-14 /u01/oradata/racdb2/archivelog/2_6_862924734.dbf
4       2    7       A 10-DEC-14 /u01/oradata/racdb1/archivelog/2_7_862924734.dbf
5       2    8       A 25-MAR-15 /u01/oradata/racdb2/archivelog/2_8_862924734.dbf
deleted archive log
archive log filename=/u01/oradata/racdb1/archivelog/1_48_862924734.dbf recid=2 stamp=875275353
deleted archive log
archive log filename=/u01/oradata/racdb1/archivelog/1_49_862924734.dbf recid=3 stamp=875283961
deleted archive log
archive log filename=/u01/oradata/racdb1/archivelog/1_50_862924734.dbf recid=6 stamp=875284317
deleted archive log
archive log filename=/u01/oradata/racdb2/archivelog/2_6_862924734.dbf recid=1 stamp=865947333
deleted archive log
archive log filename=/u01/oradata/racdb1/archivelog/2_7_862924734.dbf recid=4 stamp=875283974
deleted archive log
archive log filename=/u01/oradata/racdb2/archivelog/2_8_862924734.dbf recid=5 stamp=875284315
Deleted 6 objects





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值