Oracle 10G RAC Cross-Instance Archive - 配置问题

来源:互联网 发布:淘宝卖家等级如何提升 编辑:程序博客网 时间:2024/06/06 03:33

最近在看10G RAC的一个归档的方案,测试了一下,有下面2点问题,希望能够求解.

测试环境如下(Oracle 10.2.0.5.0+Linux RHEL4)

1 网络
vmrac1
pub 192.168.119.11/24 (NAT)
vip  192.168.119.13/24 (NAT)
private 10.10.10.11/24 (HOST)

vmrac2
pub 192.168.119.12/24 (NAT)
vip 192.168.119.14/24 (NAT)
private 10.10.10.12/24 (HOST)

2 磁盘
vmrac1
vmrac1.vmdk 20GB 0:0 (OS)
ocr.vmdk      1GB  1:0 (share)
voting.vmdk   1GB  1:1 (share)
data1.vmdk    100GB 1:2 (share)
data2.vmdk    100GB 1:3 (share)
arch1.vmdk    50GB  2:0 (local archive)

vmrac2
vmrac2.vmdk 20GB (OS)
ocr.vmdk      1GB  1:0 (share)
voting.vmdk   1GB  1:1 (share)
data1.vmdk    100GB 1:2 (share)
data2.vmdk    100GB 1:3 (share)
arch2.vmdk    50GB  2:0 (local archive)

3 归档位置
在vmrac1上将磁盘arch1.vmdk挂在/arch下,创建/arch/JTODS1_arch作为节点1实例的本地归档路径;创建/arch/JTODS2_arch作为节点2实例的远端归档.
在vmrac2上将磁盘arch2.vmdk挂在/arch下,创建/arch/JTODS2_arch作为节点2实例的本地归档路径;创建/arch/JTODS1_arch作为节点1实例的远端归档.

4 启用RAC归档(数据库名,实例名为JTODS)RAC状态如下,步骤如下.
[oracle@vmrac1 arch]$ crs_stat -t
Name           Type           Target    State     Host       
------------------------------------------------------------
ora....S1.inst application    ONLINE    ONLINE    vmrac1     
ora....S2.inst application    ONLINE    ONLINE    vmrac2     
ora.JTODS.db   application    ONLINE    ONLINE    vmrac2                
ora....SM1.asm application    ONLINE    ONLINE    vmrac1     
ora....C1.lsnr application    ONLINE    ONLINE    vmrac1     
ora.vmrac1.gsd application    ONLINE    ONLINE    vmrac1     
ora.vmrac1.ons application    ONLINE    ONLINE    vmrac1     
ora.vmrac1.vip application    ONLINE    ONLINE    vmrac1     
ora....SM2.asm application    ONLINE    ONLINE    vmrac2     
ora....C2.lsnr application    ONLINE    ONLINE    vmrac2     
ora.vmrac2.gsd application    ONLINE    ONLINE    vmrac2     
ora.vmrac2.ons application    ONLINE    ONLINE    vmrac2     
ora.vmrac2.vip application    ONLINE    ONLINE    vmrac2

a,oracle用户下关闭RAC数据库实例
[oracle@vmrac1 arch]$srvctl stop database -d JTODS

b,启用2个节点到mount状态
SQL>startup mount

c,在任意1个节点上启用归档并,修改归档参数
SQL> alter database archivelog;
Database altered.
SQL> alter system set log_archive_dest_1='location=/arch/JTODS1_arch' scope=spfile sid='JTODS1';
System altered.
SQL> alter system set log_archive_dest_1='location=/arch/JTODS2_arch' scope=spfile sid='JTODS2';
System altered.
SQL> alter system set log_archive_dest_2='service=JTODS2 db_unique_name=JTODS' scope=spfile sid='JTODS1';System altered.
SQL> alter system set log_archive_dest_2='service=JTODS1 db_unique_name=JTODS' scope=spfile sid='JTODS2';System altered.
SQL> alter system set standby_archive_dest='/arch/JTODS1_arch' scope=spfile sid='JTODS2';
System altered.
SQL> alter system set standby_archive_dest='/arch/JTODS2_arch' scope=spfile sid='JTODS1';
System altered.

d,关闭数据库并重新启动使得归档参数生效
SQL>shutdown immediate
[oracle@vmrac1 arch]$srvctl start database -d JTODS

问题
1,各个节点本地归档正常,但无法传递至远程节点对应的路径下.
该问题初步已经解决,alert日志就不贴出了,主要参考网友jackyhu99的建议增大parameter参数log_archive_max_processes值(默认为2),我改为8,远程归档成功.http://www.itpub.net/thread-1470745-1-1.html

2,当其中一个节点正常关闭时,剩下的节点会启用归档,此时该节点无法归档到远端(因为已关闭);而当关闭的那个节点正常开启时,也无法获取先前尚未传送过来的归档日志.
例如:当关闭vmrac2时,vmrac1会进行自动归档,此时vmrac1只会在其本地/arch/JTODS1_arch留下归档日志;立马启动vmrac2,此时发现vmrac2中的/arch/JTODS1_arch并不能接收到vmrac1先前一次归档产生的日志.验证过程如下.
a,vmrac2关闭前2个节点的归档日志状态(为完全一样)
[oracle@vmrac1 arch]$  ll JTODS1_arch/ JTODS2_arch/
JTODS1_arch/:
total 5984
-rw-r-----  1 oracle dba   66048 Jan  1 13:37 1_3_771381498.dbf
-rw-r-----  1 oracle dba  155136 Jan  1 13:44 1_4_771381498.dbf
-rw-r-----  1 oracle dba   20480 Jan  1 13:46 1_5_771381498.dbf

JTODS2_arch/:
total 39528
-rw-rw----  1 oracle dba 34940416 Jan  1 13:32 1_2_771381498.dbf
-rw-rw----  1 oracle dba  2054656 Jan  1 13:44 2_1_771381498.dbf
-rw-rw----  1 oracle dba    12288 Jan  1 13:46 2_2_771381498.dbf

[oracle@vmrac2 arch]$  ll JTODS1_arch/ JTODS2_arch/
JTODS1_arch/:
total 5984
-rw-r-----  1 oracle dba   66048 Jan  1 13:37 1_3_771381498.dbf
-rw-r-----  1 oracle dba  155136 Jan  1 13:44 1_4_771381498.dbf
-rw-r-----  1 oracle dba   20480 Jan  1 13:46 1_5_771381498.dbf

JTODS2_arch/:
total 39528
-rw-rw----  1 oracle dba 34940416 Jan  1 13:32 1_2_771381498.dbf
-rw-rw----  1 oracle dba  2054656 Jan  1 13:44 2_1_771381498.dbf
-rw-rw----  1 oracle dba    12288 Jan  1 13:46 2_2_771381498.dbf

b,vmrac2关闭后,并再开启后的状态为
[oracle@vmrac1 arch]#  ll JTODS1_arch/ JTODS2_arch/
JTODS1_arch/:
total 5984
-rw-rw----  1 oracle dba   66048 Jan  1 13:37 1_3_771381498.dbf
-rw-r-----  1 oracle dba  155136 Jan  1 13:44 1_4_771381498.dbf
-rw-rw----  1 oracle dba   20480 Jan  1 13:46 1_5_771381498.dbf
-rw-rw----  1 oracle dba 1567744 Jan  1 14:11 2_3_771381498.dbf

JTODS2_arch/:
total 36528
-rw-r-----  1 oracle dba 34940416 Jan  1 13:35 1_2_771381498.dbf
-rw-r-----  1 oracle dba  2054656 Jan  1 13:44 2_1_771381498.dbf
-rw-r-----  1 oracle dba    12288 Jan  1 13:46 2_2_771381498.dbf

[oracle@vmrac2 arch]$  ll JTODS1_arch/ JTODS2_arch/
JTODS1_arch/:
total 5984
-rw-r-----  1 oracle dba   66048 Jan  1 13:37 1_3_771381498.dbf
-rw-r-----  1 oracle dba  155136 Jan  1 13:44 1_4_771381498.dbf
-rw-r-----  1 oracle dba   20480 Jan  1 13:46 1_5_771381498.dbf

JTODS2_arch/:
total 39528
-rw-rw----  1 oracle dba 34940416 Jan  1 13:32 1_2_771381498.dbf
-rw-rw----  1 oracle dba  2054656 Jan  1 13:44 2_1_771381498.dbf
-rw-rw----  1 oracle dba    12288 Jan  1 13:46 2_2_771381498.dbf

c,可以看见vmrac1的/arch/JTODS1_arch多出了这个日志文件,而vmrac2的/arch/JTODS1_arch缺失这个日志.
  -rw-rw----  1 oracle dba 1567744 Jan  1 14:11 2_3_771381498.dbf

d,导致的问题
描述:vmrac2在RMAN下进行crosscheck archivelog all时,上述缺失的日志会提示失败的信息.这样RMAN在vmrac2上进行备份时会报错.而将缺失的日志从 vmrac1拷贝到vmrac2的/arch/JTODS1_arch,备份可以完成通过;但当进行select name,thread#,sequence# from v$archived_log仍然无法显示拷贝过去的那个日志,所以其实control file中并没有注册这个日志文件.请问使用什么方法可以保证control file也能够同步当前的归档日志信息?

验证:我在vmrac2上使用alter database regester logfile '/arch/JTODS1_arch/2_3_771381498.dbf'会报错,如下:
SQL> alter database regester logfile '/arch/JTODS1_arch/2_3_771381498.dbf';
alter database regester logfile '/arch/JTODS1_arch/2_3_771381498.dbf'                        *
ERROR at line 1:
ORA-16225: Missing LogMiner session name for Streams


同时使用physical注册,可以成功运行,但显示的结果仍然只有vmrac1上/arch/JTODS1_arch/2_3_771381498.dbf'
SQL> ALTER DATABASE REGISTERPHYSICALLOGFILE '/arch/JTODS1_arch/2_3_771381498.dbf';
Database altered.
SQL> select name,thread#,sequence# from v$archived_log where SEQUENCE#<=5;
NAME                                THREAD#  SEQUENCE#
---------------------------------------------- ----------    
/arch/JTODS2_arch/1_2_771381498.dbf 1          2
/arch/JTODS2_arch/1_2_771381498.dbf 1          2
/arch/JTODS1_arch/1_3_771381498.dbf 1          3
/arch/JTODS1_arch/1_3_771381498.dbf 1          3
/arch/JTODS1_arch/1_4_771381498.dbf 1          4
/arch/JTODS1_arch/1_4_771381498.dbf 1          4
/arch/JTODS2_arch/2_1_771381498.dbf 2          1
/arch/JTODS2_arch/2_1_771381498.dbf 2          1
/arch/JTODS2_arch/2_2_771381498.dbf 2          2
/arch/JTODS1_arch/1_5_771381498.dbf 1          5
/arch/JTODS2_arch/2_2_771381498.dbf 2          2
/arch/JTODS1_arch/1_5_771381498.dbf 1          5
                                    2          3
/arch/JTODS1_arch/2_3_771381498.dbf 2          3

这样的话在RMAN备份,归档日志删除管理等都会有一系列不一致的状况发生,10G上这个问题求解?
另外:据说11G中这个问题得到了修正,我看了yangtingkun的博客,有提到这个问题,Oracle11g RAC在实例关闭后自动在启动实例上归
档,http://yangtingkun.itpub.net/post/468/484535.


关于此时RMAN备份的测试
这里以丢失的归档日志文件为例/arch/JTODS2_arch/2_3_771542827.dbf
(1)当数据库第一次进行全备时,如果归档日志缺失,RMAN不会报错.
Starting backup at 03-JAN-12
current log archived
using channel ORA_DISK_1
channel ORA_DISK_1: starting archive log backupset
channel ORA_DISK_1: specifying archive log(s) in backup set
input archive log thread=1 sequence=5 recid=3 stamp=771611144
input archive log thread=1 sequence=6 recid=4 stamp=771611625
这里其实已经缺失了thread=2 sequence=3的/arch/JTODS2_arch/2_3_771542827.dbf
input archive log thread=2 sequence=4 recid=5 stamp=771611626
channel ORA_DISK_1: starting piece 1 at 03-JAN-12
channel ORA_DISK_1: finished piece 1 at 03-JAN-12
piece handle=+RECOVERY/jtods/backupset/2012_01_03/annnf0_tag20120103t163346_0.261.771611629 tag=TAG20120103T163346 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:08
Finished backup at 03-JAN-12


Starting backup at 03-JAN-12
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00001 name=+DATA/jtods/system01.dbf
input datafile fno=00003 name=+DATA/jtods/sysaux01.dbf
input datafile fno=00002 name=+DATA/jtods/undotbs01.dbf
input datafile fno=00005 name=+DATA/jtods/undotbs02.dbf
input datafile fno=00004 name=+DATA/jtods/users01.dbf
channel ORA_DISK_1: starting piece 1 at 03-JAN-12
channel ORA_DISK_1: finished piece 1 at 03-JAN-12
piece handle=+RECOVERY/jtods/backupset/2012_01_03/nnndf0_tag20120103t163356_0.262.771611641 tag=TAG20120103T163356 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:01:06
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
including current control file in backupset
including current SPFILE in backupset
channel ORA_DISK_1: starting piece 1 at 03-JAN-12
channel ORA_DISK_1: finished piece 1 at 03-JAN-12
piece handle=+RECOVERY/jtods/backupset/2012_01_03/ncsnf0_tag20120103t163356_0.263.771611711 tag=TAG20120103T163356 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:15


(2)当进行第二次及以后的备份,如果备份节点上的归档日志不全,备份(仅指全备份,单独备份归档)均会报错.
RMAN> backup archivelog all;
Starting backup at 03-JAN-12
current log archived
using channel ORA_DISK_1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of backup command at 01/03/2012 17:35:12
RMAN-06059: expected archived log not found, lost of archived log compromises recoverability
ORA-19625: error identifying file /arch/JTODS2_arch/2_3_771542827.dbf
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3


RMAN> backup database plus archivelog;
Starting backup at 03-JAN-12
current log archived
using channel ORA_DISK_1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of backup plus archivelog command at 01/03/2012 17:42:23
RMAN-06059: expected archived log not found, lost of archived log compromises recoverability
ORA-19625: error identifying file /arch/JTODS2_arch/2_3_771542827.dbf
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3

(3)拷贝回去后可以正常备份.





原创粉丝点击