RAC-DG搭建步骤及一些应用分析

今天的实验内容是RAC-DG的搭建及一些测试,并就在实验中遇到的一些错误进行分析并解决

环境:11.2.0.3+oel5.7

rac1:zlm1 192.168.1.171 zlm1-vip 192.168.1.172 zlm1-priv 172.168.1.192
rac2:zlm2 192.168.1.173 zlm2-vip 192.168.1.174 zlm2-priv 172.168.1.193
scan-ip:zlm-cluseter zlm-cluster-scan 192.168.1.176
dg:zlm3 192.168.1.178


之前已安装并配置RAC和RAC主库,准备好一个装好ORACLE软件的备库,过程略,现在开始进行RAC-DG配置


#先查看一下RAC主库数据文件,临时文件,日志文件存放路径
SQL> set line 200 pages 200
SQL> col file_name for a50
SQL> select tablespace_name,file_name from dba_data_files;


TABLESPACE_NAME                FILE_NAME
------------------------------ --------------------------------------------------
USERS                          +DATA/ora11rac/datafile/users.259.823440065
UNDOTBS1                       +DATA/ora11rac/datafile/undotbs1.258.823440063
SYSAUX                         +DATA/ora11rac/datafile/sysaux.257.823440063
SYSTEM                         +DATA/ora11rac/datafile/system.256.823440061
EXAMPLE                        +DATA/ora11rac/datafile/example.264.823440247
UNDOTBS2                       +DATA/ora11rac/datafile/undotbs2.265.823440549


6 rows selected.


SQL> col name for a50
SQL> select name from v$tempfile;


NAME
--------------------------------------------------
+DATA/ora11rac/tempfile/temp.263.823440229


SQL> select group#,member from v$logfile;


    GROUP# MEMBER
---------- --------------------------------------------------
         2 +DATA/ora11rac/onlinelog/group_2.262.823440213
         2 +BACKUPDG/ora11rac/onlinelog/group_2.258.823440215
         1 +DATA/ora11rac/onlinelog/group_1.261.823440207
         1 +BACKUPDG/ora11rac/onlinelog/group_1.257.823440211
         3 +DATA/ora11rac/onlinelog/group_3.266.823440667
         3 +BACKUPDG/ora11rac/onlinelog/group_3.259.823440669
         4 +DATA/ora11rac/onlinelog/group_4.267.823440669
         4 +BACKUPDG/ora11rac/onlinelog/group_4.260.823440671


8 rows selected.


*********
主库配置:
*********
1.开启force logging
SQL> select inst_id,name,force_logging from gv$database;


   INST_ID NAME      FOR
---------- --------- ---
         1 ORA11RAC  NO
         2 ORA11RAC  NO


SQL> alter database force logging;


Database altered.


SQL> select inst_id,name,force_logging from gv$database;


   INST_ID NAME      FOR
---------- --------- ---
         1 ORA11RAC  YES
         2 ORA11RAC  YES


2.开启归档模式(所有RAC节点实例都必须在mount状态下)
SQL> select open_mode,log_mode from gv$database;


OPEN_MODE            LOG_MODE
-------------------- ------------
MOUNTED              NOARCHIVELOG
MOUNTED              NOARCHIVELOG


SQL> alter database archivelog;


Database altered.


注:之前此处修改归档模式遇到一个ORA-00265: instance recovery required, cannotsetARCHIVELOG mode的错误提示,是由于之前实例非正常关闭,重新shutdown immediate再startup mount再修改就行了


SQL> select name,log_mode,force_logging from gv$database;


NAME      LOG_MODE     FOR
--------- ------------ ---
ORA11RAC  ARCHIVELOG   YES
ORA11RAC  ARCHIVELOG   YES


3.RAC主库用RMAN全备,备份归档,备份standby控制文件
[oracle@zlm1 ~]$ rman target /


Recovery Manager: Release 11.2.0.3.0 - Production on Thu Aug 15 11:49:32 2013


Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.


connected to target database: ORA11RAC (DBID=3500433418, not open)


RMAN> run{
2> allocate channel c1 type disk;
3> allocate channel c2 type disk;
4> backup database format '/rmanbackup/full_%U.bak';
5> release channel c1;
6> release channel c2;
7> }


备份过程中出了点问题,如下
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: failure of backup command on c2 channel at 08/15/2013 11:53:07
ORA-00206: error in writing (block 477, # blocks 35) of control file
ORA-00202: control file: '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_ora11rac1.f'
ORA-27072: File I/O error
Additional information: 4
Additional information: 477
Additional information: 49152


#查看一下磁盘容量,原来是空间不够了
[root@zlm1 rmanbackup]# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                       16G   15G   20M 100% /
/dev/sda1              99M   23M   71M  25% /boot
tmpfs                1002M  677M  325M  68% /dev/shm


腾空一些磁盘空间后重新备份,问题解决


#备份所有归档文件
RMAN> backup archivelog all format '/rmanbackup/arc_%U.bak';


Starting backup at 15-AUG-13
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=37 instance=ora11rac1 device type=DISK
specification does not match any archived log in the repository
backup cancelled because there are no files to backup
Finished backup at 15-AUG-13


由于新建库后没有进行过事务和切换归档等操作,所以这里没有归档可以备份。


#备份主库控制文件,为备库创建standby控制文件
RMAN> backup device type disk format '/rmanbackup/stdctl_%U.ctl' current controlfile for standby;


Starting backup at 15-AUG-13
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including standby control file in backup set
channel ORA_DISK_1: starting piece 1 at 15-AUG-13
channel ORA_DISK_1: finished piece 1 at 15-AUG-13
piece handle=/rmanbackup/stdctl_09ohbtml_1_1.ctl tag=TAG20130815T122349 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 15-AUG-13


4.RAC主库创建PFILE并修改内容
SQL> create pfile='/rmanbackup/initora11dg.ora' from spfile;


File created.


#装完RAC后数据库原有参数
*.audit_file_dest='/u01/app/oracle/admin/ora11rac/adump'
*.audit_trail='db'
*.cluster_database=true
*.compatible='11.2.0.0.0'
*.control_files='+DATA/ora11rac/controlfile/current.260.823440203','+BACKUPDG/ora11rac/controlfile/current.256.823440203'
*.db_block_size=8192
*.db_create_file_dest='+DATA'
*.db_domain=''
*.db_name='ora11rac'
*.db_recovery_file_dest='+BACKUPDG'
*.db_recovery_file_dest_size=4558159872
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=ora11racXDB)'
ora11rac2.instance_number=2
ora11rac1.instance_number=1
*.memory_target=838860800
*.open_cursors=300
*.processes=150
*.remote_listener='zlm-cluster-scan:1521'
*.remote_login_passwordfile='exclusive'
ora11rac2.thread=2
ora11rac1.thread=1
ora11rac2.undo_tablespace='UNDOTBS2'
ora11rac1.undo_tablespace='UNDOTBS1'


#以下为配置DG而添加的内容
*.db_unique_name='ora11rac'
*.log_archive_config='dg_config=(ora11rac,ora11dg)'
*.log_archive_dest_1='location=USE_DB_RECOVERY_FILE_DEST valid_for=(all_logfiles,all_roles) db_unique_name=ora11rac'
*.log_archive_dest_2='service=ora11dg valid_for=(online_logfiles,primary_role) db_unique_name=ora11dg'
*.log_archive_dest_state_1=enable
*.log_archive_dest_state_2=enable
*.log_archive_format='arc_%t_%s_%r.arc'


#为switchover或failover而设置的参数
*.fal_server=ora11dg
*.standby_file_management='auto'
*.db_file_name_convert='/u01/app/oracle/oradata/ora11dg/datafile','+DATA/ora11rac/datafile','/u01/app/oracle/oradata/ora11dg/datafile','+DATA/ora11rac/tempfile'
*.log_file_name_convert='/u01/app/oracle/oradata/ora11dg/datafile','+DATA/ora11rac/onlinelog','/u01/app/oracle/oradata/ora11dg/datafile','+BACKUPDG/ora11rac/onlinelog'


在RAC主库节上创建备库口令文件
[oracle@zlm1 ~]$ orapwd file=/rmanbackup/orapwora11rac password=oracle


5.把之前的全备备份集,控制文件传到备库相同位置,把参数文件,口令文件传到备库$ORACLE_HOME/dbs
[oracle@zlm1 rmanbackup]$ ll
total 1187244
-rw-r----- 1 oracle asmadmin 714383360 Aug 15 12:11 full_05ohbsqs_1_1.bak
-rw-r----- 1 oracle asmadmin 462938112 Aug 15 12:11 full_06ohbsqs_1_1.bak
-rw-r----- 1 oracle asmadmin  18546688 Aug 15 12:11 full_07ohbt0b_1_1.bak
-rw-r----- 1 oracle asmadmin     98304 Aug 15 12:11 full_08ohbt0c_1_1.bak
-rw-r--r-- 1 oracle asmadmin      1987 Aug 15 14:03 initora11rac.ora
-rw-r----- 1 oracle oinstall      1536 Aug 15 13:01 orapwora11rac
-rw-r----- 1 oracle asmadmin  18546688 Aug 15 12:23 stdctl_09ohbtml_1_1.ctl


[oracle@zlm1 rmanbackup]$ scp full* stdctl* zlm3:/rmanbackup
oracle@zlm3's password: 
full_05ohbsqs_1_1.bak                                                   100%  681MB   8.0MB/s   01:25    
full_06ohbsqs_1_1.bak                                                   100%  441MB   8.0MB/s   00:55    
full_07ohbt0b_1_1.bak                                                   100%   18MB  17.7MB/s   00:01    
full_08ohbt0c_1_1.bak                                                   100%   96KB  96.0KB/s   00:00    
stdctl_09ohbtml_1_1.ctl                                                 100%   18MB   4.4MB/s   00:04 


[oracle@zlm1 rmanbackup]$ scp initora11dg.ora orapwora11rac zlm3:$ORACLE_HOME/dbs
oracle@zlm3's password: 
orapwora11rac                                                           100% 1536     1.5KB/s   00:00 
initora11rac.ora                                                         100% 1987     1.9KB/s   00:00 


*********
备库配置:
*********
1.在备库创建相应目录
[oracle@ora11dg ~]$ mkdir -p /u01/app/oracle/admin/ora11dg/adump
[oracle@ora11dg ~]$ mkdir -p /u01/app/oracle/oradata/ora11dg/datafile
[oracle@ora11dg ~]$ mkdir -p /u01/app/oracle/fast_recovery_area/ora11dg


2.重命名备库口令文件和参数文件
[oracle@ora11dg dbs]$ mv orapwora11rac orapwora11dg
[oracle@ora11dg dbs]$ mv initora11rac.ora initora11dg.ora 


3.修改备库pfile,参数如下
ora11dg.__db_cache_size=121634816
ora11dg.__java_pool_size=4194304
ora11dg.__large_pool_size=4194304
ora11dg.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
ora11dg.__pga_aggregate_target=176160768
ora11dg.__sga_target=239075328
ora11dg.__shared_io_pool_size=0
ora11dg.__shared_pool_size=100663296
ora11dg.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/ora11dg/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/u01/app/oracle/oradata/ora11dg/control01.ctl','/u01/app/oracle/fast_recovery_area/ora11dg/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='ora11rac'
*.db_unique_name='ora11dg'
*.log_archive_config='dg_config=(ora11rac,ora11dg)'
*.log_archive_dest_1='location=use_db_recovery_file_dest valid_for=(all_logfiles,all_roles) db_unique_name=ora11dg'
*.log_archive_dest_2='service=ora11rac valid_for=(online_logfiles,primary_role) db_unique_name=ora11rac'
*.log_archive_dest_state_1=enable
*.log_archive_dest_state_2=enable
*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
*.db_recovery_file_dest_size=4322230272
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=ora11dgXDB)'
*.log_archive_format='%t_%s_%r.dbf'
*.log_archive_max_processes=30
*.memory_target=415236096
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'


#配置switchover或failover所需参数
*.fal_server=ora11rac
*.standby_file_management=auto
*.db_file_name_convert='+DATA/ora11rac/datafile','/u01/app/oracle/oradata/ora11dg/datafile','+DATA/ora11rac/tempfile','/u01/app/oracle/oradata/ora11dg/datafile'
*.log_file_name_convert='+DATA/ora11rac/onlinelog','/u01/app/oracle/oradata/ora11dg/datafile',+BACKUPDG/ora11rac/onlinelog','/u01/app/oracle/oradata/ora11dg/datafile'


4.配置RAC主库2个节点和备库的tnsnames.ora,以及备库的listener.ora(主库listener.ora不用配置)


#RAC主库tnsnames.ora内容(RAC2个节点内容一样):
ORA11DG =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = zlm3)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ora11dg)
    )
  )


ORA11RAC =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = zlm-cluster-scan)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ora11rac)
    )
  )


#备库的listener.ora内容:
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = ora11dg)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
      (SID_NAME = ora11dg)
    )
  )


LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = zlm3)(PORT = 1521))
    )
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )


ADR_BASE_LISTENER = /u01/app/oracle


5.开始创建备库,在备库执行
[oracle@zlm3 ~]$ env|grep ora
USER=oracle
ORACLE_SID=ora11dg
ORACLE_BASE=/u01/app/oracle
MAIL=/var/spool/mail/oracle
PATH=/u01/app/oracle/product/11.2.0/dbhome_1/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/home/oracle/bin
PWD=/home/oracle
HOME=/home/oracle
LOGNAME=oracle
ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1


#启动备库监听:
[oracle@ora11dg dbs]$ lsnrctl start


LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 17-AUG-2013 14:21:17


Copyright (c) 1991, 2011, Oracle.  All rights reserved.


Starting /u01/app/oracle/product/11.2.0/dbhome_1/bin/tnslsnr: please wait...


TNSLSNR for Linux: Version 11.2.0.3.0 - Production
System parameter file is /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Log messages written to /u01/app/oracle/diag/tnslsnr/ora11dg/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.178)(PORT=1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))


Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=zlm3)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 11.2.0.3.0 - Production
Start Date                17-AUG-2013 14:21:20
Uptime                    0 days 0 hr. 0 min. 24 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/ora11dg/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.1.178)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Services Summary...
Service "ora11dg" has 1 instance(s).
  Instance "ora11dg", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully


#将备库启动到nomount状态:
[oracle@ora11dg dbs]$ sqlplus '/as sysdba'


SQL*Plus: Release 11.2.0.3.0 Production on Sat Aug 17 14:20:47 2013


Copyright (c) 1982, 2011, Oracle.  All rights reserved.


Connected to an idle instance.


SQL> startup nomount
ORACLE instance started.


Total System Global Area  413372416 bytes
Fixed Size                  2228904 bytes
Variable Size             285216088 bytes
Database Buffers          121634816 bytes
Redo Buffers                4292608 bytes
SQL> !
[oracle@ora11dg dbs]$ ps -ef|grep ora_
oracle    3056     1  0 14:22 ?        00:00:00 ora_pmon_ora11dg
oracle    3060     1  0 14:22 ?        00:00:00 ora_psp0_ora11dg
oracle    3064     1  2 14:22 ?        00:00:03 ora_vktm_ora11dg
oracle    3094     1  0 14:22 ?        00:00:00 ora_gen0_ora11dg
oracle    3098     1  0 14:22 ?        00:00:00 ora_diag_ora11dg
oracle    3102     1  0 14:22 ?        00:00:00 ora_dbrm_ora11dg
oracle    3106     1  0 14:22 ?        00:00:00 ora_dia0_ora11dg
oracle    3110     1  0 14:22 ?        00:00:00 ora_mman_ora11dg
oracle    3114     1  0 14:22 ?        00:00:00 ora_dbw0_ora11dg
oracle    3118     1  0 14:22 ?        00:00:00 ora_lgwr_ora11dg
oracle    3122     1  0 14:22 ?        00:00:00 ora_ckpt_ora11dg
oracle    3126     1  0 14:22 ?        00:00:00 ora_smon_ora11dg
oracle    3130     1  0 14:22 ?        00:00:00 ora_reco_ora11dg
oracle    3134     1  0 14:22 ?        00:00:00 ora_mmon_ora11dg
oracle    3138     1  0 14:22 ?        00:00:00 ora_mmnl_ora11dg
oracle    3142     1  0 14:22 ?        00:00:00 ora_d000_ora11dg
oracle    3146     1  0 14:22 ?        00:00:00 ora_s000_ora11dg
oracle    3211  3191  0 14:25 pts/2    00:00:00 grep ora_


6.用RMAN对备库进行一系列恢复
#先用从RAC主库拷贝来的备库控制文件备份集恢复备库控制文件
[oracle@ora11dg dbs]$rman
Recovery Manager: Release 11.2.0.3.0 - Production on Sat Aug 17 14:26:08 2013


Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.


RMAN> restore standby controlfile from '/rmanbackup/stdctl_09ohbtml_1_1.ctl';


Starting restore at 17-AUG-13
using target database control file instead of recovery catalog
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 08/17/2013 14:31:35
RMAN-12010: automatic channel allocation initialization failed
RMAN-06171: not connected to target database


RMAN> connect target /


connected to target database: ORA11RAC (not mounted)
using target database control file instead of recovery catalog


RMAN> restore standby controlfile from '/rmanbackup/stdctl_09ohbtml_1_1.ctl';


Starting restore at 17-AUG-13
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=21 device type=DISK


channel ORA_DISK_1: restoring control file
channel ORA_DISK_1: restore complete, elapsed time: 00:00:08
output file name=/u01/app/oracle/oradata/ora11dg/control01.ctl
output file name=/u01/app/oracle/fast_recovery_area/ora11dg/control02.ctl
Finished restore at 17-AUG-13


RMAN> exit




Recovery Manager complete.
[oracle@ora11dg dbs]$ exit
exit


SQL> alter database mount;


Database altered.


SQL> 


#开始restore备库数据文件
RMAN> run{
2> allocate channel c1 type disk;
3> allocate channel c2 type disk;
4> restore database;
5> release channel c1;
6> release channel c2;
7> }


allocated channel: c1
channel c1: SID=52 device type=DISK


allocated channel: c2
channel c2: SID=53 device type=DISK


Starting restore at 17-AUG-13
Starting implicit crosscheck backup at 17-AUG-13
Crosschecked 4 objects
Crosschecked 3 objects
Finished implicit crosscheck backup at 17-AUG-13


Starting implicit crosscheck copy at 17-AUG-13
Finished implicit crosscheck copy at 17-AUG-13


searching for all files in the recovery area
cataloging files...
no files cataloged




channel c1: starting datafile backup set restore
channel c1: specifying datafile(s) to restore from backup set
channel c1: restoring datafile 00002 to /u01/app/oracle/oradata/ora11dg/datafile/sysaux.257.823440063
channel c1: restoring datafile 00003 to /u01/app/oracle/oradata/ora11dg/datafile/undotbs1.258.823440063
channel c1: restoring datafile 00006 to /u01/app/oracle/oradata/ora11dg/datafile/undotbs2.265.823440549
channel c1: reading from backup piece /rmanbackup/full_06ohbsqs_1_1.bak
channel c2: starting datafile backup set restore
channel c2: specifying datafile(s) to restore from backup set
channel c2: restoring datafile 00001 to /u01/app/oracle/oradata/ora11dg/datafile/system.256.823440061
channel c2: restoring datafile 00004 to /u01/app/oracle/oradata/ora11dg/datafile/users.259.823440065
channel c2: restoring datafile 00005 to /u01/app/oracle/oradata/ora11dg/datafile/example.264.823440247
channel c2: reading from backup piece /rmanbackup/full_05ohbsqs_1_1.bak
channel c1: piece handle=/rmanbackup/full_06ohbsqs_1_1.bak tag=TAG20130815T120900
channel c1: restored backup piece 1
channel c1: restore complete, elapsed time: 00:03:37
channel c2: piece handle=/rmanbackup/full_05ohbsqs_1_1.bak tag=TAG20130815T120900
channel c2: restored backup piece 1
channel c2: restore complete, elapsed time: 00:05:19
Finished restore at 17-AUG-13


released channel: c1


released channel: c2


RMAN> 


#查看备库数据文件,临时文件和日志文件
SQL> select name from v$datafile;


NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/ora11dg/datafile/system.256.823440061
/u01/app/oracle/oradata/ora11dg/datafile/sysaux.257.823440063
/u01/app/oracle/oradata/ora11dg/datafile/undotbs1.258.823440063
/u01/app/oracle/oradata/ora11dg/datafile/users.259.823440065
/u01/app/oracle/oradata/ora11dg/datafile/example.264.823440247
/u01/app/oracle/oradata/ora11dg/datafile/undotbs2.265.823440549


6 rows selected.


SQL> select name from v$tempfile;


NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/ora11dg/datafile/temp.263.823440229


SQL> select member from v$logfile;


MEMBER
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/ora11dg/datafile/group_2.262.823440213
+BACKUPDG/ora11rac/onlinelog/group_2.258.823440215
/u01/app/oracle/oradata/ora11dg/datafile/group_1.261.823440207
+BACKUPDG/ora11rac/onlinelog/group_1.257.823440211
/u01/app/oracle/oradata/ora11dg/datafile/group_3.266.823440667
+BACKUPDG/ora11rac/onlinelog/group_3.259.823440669
/u01/app/oracle/oradata/ora11dg/datafile/group_4.267.823440669
+BACKUPDG/ora11rac/onlinelog/group_4.260.823440671


8 rows selected.


说明RMAN恢复备库很成功,RAC主库全部文件都已传到备库


7.备库启动MRP进程开始应用日志(如果是arch模式,可以直接启用,如果是lgwr方式,必须先创建standby log文件)
SQL> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     0
Next log sequence to archive   0
Current log sequence           0
SQL> alter database recover managed standby database disconnect from session;


Database altered.


#查看RAC主库节点1归档日志序列
SQL> select open_mode from v$database;


OPEN_MODE
--------------------
READ WRITE


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


#切换归档日志并查看
SQL> alter system switch logfile;


System altered.


SQL> select thread#,sequence#,applied from v$archived_log where thread#=1 order by 1,2;


   THREAD#  SEQUENCE# APPLIED
---------- ---------- ---------
         1          9 NO
         1         10 NO
         1         11 NO
         1         12 NO
         1         13 NO
         1         14 NO
         1         15 NO


7 rows selected.


#查看备库是否同步
SQL> select thread#,sequence#,applied from v$archived_log;


no rows selected
检查备库alert日志,发现报了一个tns错误:
***********************************************************************


Fatal NI connect error 12541, connecting to:
 (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=zlm-cluster-scan)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=ora11rac)(CID=(PROGRAM=oracle)(HOST=ora11dg)(USER=oracle))))


  VERSION INFORMATION:
        TNS for Linux: Version 11.2.0.3.0 - Production
        TCP/IP NT Protocol Adapter for Linux: Version 11.2.0.3.0 - Production
  Time: 17-AUG-2013 15:06:44
  Tracing not turned on.
  Tns error struct:
    ns main err code: 12541
    
TNS-12541: TNS:no listener
    ns secondary err code: 12560
    nt main err code: 511
    
TNS-00511: No listener
    nt secondary err code: 111
    nt OS err code: 0
Error 12541 received logging on to the standby
Check whether the listener is up and running.
FAL[client, MRP0]: Error 12541 connecting to ora11rac for fetching gap sequence


以上错误表明监听没有起来,查看主库归档路径归档路径是否有问题:
SQL> set line 200 pages 200
SQL> col dest_name for a30
SQL> col destination for a30
SQL> col error for a20
SQL> select dest_name,destination,error,status from v$archive_dest where dest_id<3;


DEST_NAME                      DESTINATION                    ERROR                STATUS
------------------------------ ------------------------------ -------------------- ---------
LOG_ARCHIVE_DEST_1             USE_DB_RECOVERY_FILE_DEST                           VALID
LOG_ARCHIVE_DEST_2                                                                 INACTIVE


至此,发现一个问题,就是之前配置的主库参数并没有在spfile中生效,之前对主库创建完pfile文件,并用pifle启动后,又执行过以下命令:
SQL> create spfile from pfile;
原本目的是用pfile重新创建spfile文件,以使下次用startup命令启动数据库后,spfile会启用新配置的DG参数,其实是疏忽了一件事情,因为RAC环境中spifle是存放在ASM上的,应该要指定一个ASM路径,而不是默认的dbs,此处应该改为:
SQL> create spfile='+DATA/ora11rac/spfileora11rac.ora' from pfile;


#重新用之前修改好的pfile启动
SQL> startup pfile='/rmanbackup/initora11rac.ora' force
ORACLE instance started.


Total System Global Area  835104768 bytes
Fixed Size                  2232960 bytes
Variable Size             578817408 bytes
Database Buffers          251658240 bytes
Redo Buffers                2396160 bytes
Database mounted.
Database opened.
SQL> show parameter spfile


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string
SQL> create spfile='+DATA/ora11rac/spfileora11rac1.ora' from pfile;


File created.
****************************************************************
注意:用pfile启动数据库实例时,RAC中其他节点必须关闭,否则会报ORA-01105和ORA-01677错误:
SQL> startup pfile='/rmanbackup/initora11rac.ora'
ORACLE instance started.


Total System Global Area  835104768 bytes
Fixed Size                  2232960 bytes
Variable Size             578817408 bytes
Database Buffers          251658240 bytes
Redo Buffers                2396160 bytes
ORA-01105: mount is incompatible with mounts by other instances
ORA-01677: standby file name convert parameters differ from other instance
****************************************************************
#用RAC在ASM上的spfile启动
SQL> startup force
ORA-01506: missing or illegal database name


这个错误,按字面理解就是丢失数据库名,就是参数中没有db_name这项内容,或者配置错误,发生这个错误是因为没有之前的创建spfile语句没有指定pfile路径所致,其实和单实例本地路径存放不同,如果pfile不指定路径,默认使用的只是dbs下的initora11rac1.ora去生成spfile,由于在ASM中,此文件是用来指向ASM中spfile文件的存放路径,内容只有一句“+DATA/ora11rac/spfileora11rac.ora”,知道了问题所在,那么把上面那条创建spifle的语句修改如下:create spfile='+DATA/ora11rac/spfileora11rac1.ora' from pfile='/rmanbackup/initora11rac.ora';


SQL> create spfile='+DATA/ora11rac/spfileora11rac.ora' from pfile='/rmanbackup/initora11rac.ora';


File created.
SQL> startup
ORACLE instance started.


Total System Global Area  835104768 bytes
Fixed Size                  2232960 bytes
Variable Size             578817408 bytes
Database Buffers          251658240 bytes
Redo Buffers                2396160 bytes
Database mounted.
Database opened.
SQL> show parameter spfile


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      +DATA/ora11rac/spfileora11rac.
                                                 ora
此时再用spfile启动正常


#继续之前的步骤,在RAC主库查看归档路径
SQL> set line 200 pages 200
SQL> col dest_name for a30
SQL> col destination for a30
SQL> col error for a20
SQL> select dest_name,destination,error,status from v$archive_dest where dest_id<3;


DEST_NAME                      DESTINATION                    ERROR                STATUS
------------------------------ ------------------------------ -------------------- ---------
LOG_ARCHIVE_DEST_1             USE_DB_RECOVERY_FILE_DEST                           VALID
LOG_ARCHIVE_DEST_2             ora11dg                        ORA-16191: Primary   ERROR
                                                              log shipping client
                                                              not logged on
                                                              standby
查看主库alert文件,提示以下内容
Error 1017 received logging on to the standby
------------------------------------------------------------
Check that the primary and standby are using a password file
and remote_login_passwordfile is set to SHARED or EXCLUSIVE, 
and that the SYS password is same in the password files.
      returning error ORA-16191
------------------------------------------------------------
FAL[server, ARC3]: Error 16191 creating remote archivelog file 'ora11dg'
FAL[server, ARC3]: FAL archive failed, see trace file.
ARCH: FAL archive failed. Archiver continuing
ORACLE Instance ora11rac1 - Archival Error. Archiver continuing.
Sat Aug 17 05:53:06 2013
Error 1017 received logging on to the standby
------------------------------------------------------------
Check that the primary and standby are using a password file
and remote_login_passwordfile is set to SHARED or EXCLUSIVE, 
and that the SYS password is same in the password files.
      returning error ORA-16191
------------------------------------------------------------
PING[ARC2]: Heartbeat failed to connect to standby 'ora11dg'. Error is 16191.


#根据错误提示,可以判断可能主备库之间密码文件没有同步,故重新复制主库密码文件至备库
SQL> !
[oracle@zlm1 ~]$ scp /u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapwora11rac1 zlm3:$ORACLE_HOME/dbs
oracle@zlm3's password: 
orapwora11rac1                                                          100% 1536     1.5KB/s   00:00    
[oracle@zlm1 ~]$ 


然后在备库把密码文件改成备库相应的名字orapw[sid],windows是pw[sid].ora(windows不区分大小写),此处对应的orapwora11rac1


[oracle@ora11dg ~]$ cd $ORACLE_HOME/dbs
[oracle@ora11dg dbs]$ ll
total 24
-rw-rw---- 1 oracle oinstall 1544 Aug 17 15:06 hc_ora11dg.dat
-rw-r--r-- 1 oracle oinstall 2851 May 15  2009 init.ora
-rw-r--r-- 1 oracle oinstall 1761 Aug 17 14:11 initora11dg.ora
-rw-r----- 1 oracle oinstall   24 Aug 17 14:34 lkORA11DG
-rw-r----- 1 oracle oinstall 1536 Aug 16 01:20 orapwora11dg
-rw-r----- 1 oracle oinstall 1536 Aug 17 18:02 orapwora11rac1
[oracle@ora11dg dbs]$ rm orapwora11dg 
[oracle@ora11dg dbs]$ mv orapwora11rac1 orapwora11dg


此时再重新查看RAC主库归档路径
SQL> select dest_name,destination,error,status from v$archive_dest where dest_id<3;


DEST_NAME                      DESTINATION                    ERROR                STATUS
------------------------------ ------------------------------ -------------------- ---------
LOG_ARCHIVE_DEST_1             USE_DB_RECOVERY_FILE_DEST                           VALID
LOG_ARCHIVE_DEST_2             ora11dg                                             VALID


问题解决了,以下是alert中记录的最新记录的信息:
Sat Aug 17 06:01:15 2013
Thread 1 advanced to log sequence 28 (LGWR switch)
  Current log# 2 seq# 28 mem# 0: +DATA/ora11rac/onlinelog/group_2.262.823440213
  Current log# 2 seq# 28 mem# 1: +BACKUPDG/ora11rac/onlinelog/group_2.258.823440215
Sat Aug 17 06:01:16 2013
******************************************************************
LGWR: Setting 'active' archival for destination LOG_ARCHIVE_DEST_2
******************************************************************
Sat Aug 17 06:01:20 2013
Archived Log entry 45 added for thread 1 sequence 27 ID 0xd0a41306 dest 1:


此时主库序列就已经到达27,因为之前解决故障的时候来回重启了好几次,之间归档日志时会递增的
SQL> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     27
Next log sequence to archive   28
Current log sequence           28


切换一次日志
SQL> alter system switch logfile;


System altered.


SQL> select thread#,sequence#,applied from v$archived_log where thread#=1 and sequence#>25 order by 1,2;


   THREAD#  SEQUENCE# APPLIED
---------- ---------- ---------
         1         25 NO
         1         25 YES
         1         26 NO
         1         26 YES
         1         27 NO
         1         27 NO
         1         28 NO
         1         28 NO


8 rows selected.


备库之前已经启动了MRP进程,已经进行了REDO APPLY
SQL> select open_mode from v$database;


OPEN_MODE
--------------------
READ ONLY WITH APPLY


SQL> select thread#,sequence#,archived,applied from v$archived_log where thread#=1 and  sequence#>25 order by 1,2 where;


   THREAD#  SEQUENCE# ARC APPLIED
---------- ---------- --- ---------
         1         25 YES YES
         1         26 YES YES
         1         27 YES NO
         1         28 YES NO


由于使用的是默认的arch方式传送归档,所以这里并没有同步归档主库的日志文件
查看备库alert文件:


Sat Aug 17 18:11:35 2013
Archived Log entry 31 added for thread 1 sequence 28 rlc 823440206 ID 0xd0a41306 dest 2:
RFS[8]: No standby redo logfiles created


很明显,提示没有创建standby redo logfiles,这样可以满足在maximum performance保护模式下,做为DG主备库之间的归档日志传输方式,这也是orace DG默认的一种方式


主库再切换一次归档
SQL> alter system switch logfile;


System altered.


SQL> select thread#,sequence#,applied from v$archived_log where thread#=1 and sequence#>25 order by 1,2;


   THREAD#  SEQUENCE# APPLIED
---------- ---------- ---------
         1         25 NO
         1         25 YES
         1         26 NO
         1         26 YES
         1         27 NO
         1         27 NO
         1         28 NO
         1         28 NO
         1         29 NO
         1         29 NO


10 rows selected.


继续查看备库的归档情况
SQL> select thread#,sequence#,archived,applied from v$archived_log where thread#=1 and sequence#>25 order by 1,2;


   THREAD#  SEQUENCE# ARC APPLIED
---------- ---------- --- ---------
         1         25 YES YES
         1         26 YES YES
         1         27 YES YES
         1         28 YES YES
         1         29 YES YES


发现虽然是arch异步(arch默认就是async)模式归档,又切换了一次日志以后,目前从主库传来的日志已经全部APPLY了


此时可以再查看一下备库的alert文件,看看与之前的不同
RFS[8]: Opened log for thread 1 sequence 29 dbid -794533878 branch 823440206
Sat Aug 17 18:26:37 2013
Archived Log entry 32 added for thread 1 sequence 29 rlc 823440206 ID 0xd0a41306 dest 2:
RFS[8]: No standby redo logfiles created
RFS[8]: Opened log for thread 1 sequence 30 dbid -794533878 branch 823440206
Sat Aug 17 18:26:38 2013
Archived Log entry 33 added for thread 2 sequence 15 rlc 823440206 ID 0xd0a41306 dest 2:
RFS[4]: No standby redo logfiles created
RFS[4]: Opened log for thread 2 sequence 16 dbid -794533878 branch 823440206
Sat Aug 17 18:26:42 2013
Media Recovery Log /u01/app/oracle/fast_recovery_area/ORA11DG/archivelog/2013_08_17/o1_mf_2_15_90ylvxv6_.arc
Media Recovery Log /u01/app/oracle/fast_recovery_area/ORA11DG/archivelog/2013_08_17/o1_mf_1_28_90ylwdgf_.arc
Media Recovery Log /u01/app/oracle/fast_recovery_area/ORA11DG/archivelog/2013_08_17/o1_mf_1_29_90ym2qkz_.arc
Media Recovery Waiting for thread 1 sequence 30 (in transit)


同样还是未创建standby redo logfile的提示,在主库又一次切换归档后,生成了2个归档文件,序列28,29,并且被备库应用,另外有一个序列15是从RAC节点2中传递过来的,可以知道RAC节点2目前在备库应用到序列15


至此,整个RAC-DG环境搭建完毕。
********************************
为了能够使DG用在maximum available和maximum protection保护模式下,必须在备库创建standby redo logfiles,同时,必须在主库log_archive_dest_n中加上lgwr,sync,affirm参数


8.创建备库standby log文件
SQL> select * from v$standby_log;


no rows selected


SQL> alter database add standby logfile group 


SQL> select thread#,group#,bytes/1024/1024 M from v$log;


   THREAD#     GROUP#          M
---------- ---------- ----------
         1          1         50
         1          2         50
         2          3         50
         2          4         50


从上面的结果看出, RAC 有两个Redo Thread,每个Thread 有两个日志组,每个日志文件大小有50MB,所以要针对每个thread 需要创建3组 Standby Redo Log,大小为50MB。


SQL> Alter database add standby logfile thread 1 group 5 '/u01/app/oracle/oradata/ora11dg/datafile/redostd05.log' size 50m;
Alter database add standby logfile thread 1 group 5 '/u01/app/oracle/oradata/ora11dg/datafile/redostd05.log' size 50m
*
ERROR at line 1:
ORA-01156: recovery or flashback in progress may need access to files


说明必须先停止redo apply才可以创建


SQL> alter database recover managed standby database disconnect;
alter database recover managed standby database disconnect
*
ERROR at line 1:
ORA-01153: an incompatible media recovery is active


SQL> alter database recover managed standby database cancel;


Database altered.


SQL> Alter database add standby logfile thread 1 group 5 '/u01/app/oracle/oradata/ora11dg/datafile/redostd05.log' size 50m;


Database altered.


SQL> Alter database add standby logfile thread 1 group 6 '/u01/app/oracle/oradata/ora11dg/datafile/redostd06.log' size 50m;


Database altered.


SQL> Alter database add standby logfile thread 1 group 7 '/u01/app/oracle/oradata/ora11dg/datafile/redostd07.log' size 50m;


Database altered.


SQL> Alter database add standby logfile thread 2 group 8 '/u01/app/oracle/oradata/ora11dg/datafile/redostd08.log' size 50m;


Database altered.


SQL> Alter database add standby logfile thread 2 group 9 '/u01/app/oracle/oradata/ora11dg/datafile/redostd09.log' size 50m;


Database altered.


SQL> Alter database add standby logfile thread 2 group 10 '/u01/app/oracle/oradata/ora11dg/datafile/redostd10.log' size 50m;


Database altered.


SQL> select group#,type,member from v$logfile where type='STANDBY';


    GROUP# TYPE    MEMBER
---------- ------- ------------------------------------------------------------
         5 STANDBY /u01/app/oracle/oradata/ora11dg/datafile/redostd05.log
         6 STANDBY /u01/app/oracle/oradata/ora11dg/datafile/redostd06.log
         7 STANDBY /u01/app/oracle/oradata/ora11dg/datafile/redostd07.log
         8 STANDBY /u01/app/oracle/oradata/ora11dg/datafile/redostd08.log
         9 STANDBY /u01/app/oracle/oradata/ora11dg/datafile/redostd09.log
        10 STANDBY /u01/app/oracle/oradata/ora11dg/datafile/redostd10.log


6 rows selected.


修改主库使用lgwr方式传送redo log
SQL> alter system set log_archive_dest_2='service=ora11dg lgwr valid_for=(online_logfiles,primary_role) db_unique_name=ora11dg';


System altered.
SQL> show parameter log_archive_dest_2


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
log_archive_dest_2                   string      service=ora11dg lgwr valid_for
                                                 =(online_logfiles,primary_role
                                                 ) db_unique_name=ora11dg
log_archive_dest_20                  string
log_archive_dest_21                  string
log_archive_dest_22                  string
log_archive_dest_23                  string
log_archive_dest_24                  string
log_archive_dest_25                  string
log_archive_dest_26                  string
log_archive_dest_27                  string
log_archive_dest_28                  string
log_archive_dest_29                  string


#主库切换日志后,查看RAC主库alert文件内容:
******************************************************************
LGWR: Setting 'active' archival for destination LOG_ARCHIVE_DEST_2
******************************************************************
LGWR: Standby redo logfile selected for thread 1 sequence 32 for destination LOG_ARCHIVE_DEST_2
Thread 1 advanced to log sequence 32 (LGWR switch)
  Current log# 2 seq# 32 mem# 0: +DATA/ora11rac/onlinelog/group_2.262.823440213
  Current log# 2 seq# 32 mem# 1: +BACKUPDG/ora11rac/onlinelog/group_2.258.823440215
Sat Aug 17 07:31:09 2013
Archived Log entry 70 added for thread 1 sequence 31 ID 0xd0a41306 dest 1:


表示已经使用了备库的standby redo logfile


#切换RAC主库的保护模式
SQL> alter database set standby database to maximize protection;
alter database set standby database to maximize protection
*
ERROR at line 1:
ORA-01126: database must be mounted in this instance and not open in any instance


说明数据库必须在mount状态下,并且所有节点不能是open状态
将2个节点都启动到mount状态


RAC1->startup mount force
ORACLE instance started.


Total System Global Area  835104768 bytes
Fixed Size                  2232960 bytes
Variable Size             578817408 bytes
Database Buffers          251658240 bytes
Redo Buffers                2396160 bytes
Database mounted.


RAC2-> startup mount force
ORACLE instance started.


Total System Global Area  835104768 bytes
Fixed Size                  2232960 bytes
Variable Size             583011712 bytes
Database Buffers          247463936 bytes
Redo Buffers                2396160 bytes
Database mounted.
SQL> set sqlprompt 'RAC2->'


继续修改RAC主库保护模式:
RAC1->select open_mode,database_role,protection_mode,protection_level from v$database;


OPEN_MODE            DATABASE_ROLE    PROTECTION_MODE      PROTECTION_LEVEL
-------------------- ---------------- -------------------- --------------------
MOUNTED              PRIMARY          MAXIMUM PROTECTION   UNPROTECTED


查看备库保护模式:
SQL> select open_mode,database_role,protection_mode,protection_level from v$database;


OPEN_MODE            DATABASE_ROLE    PROTECTION_MODE      PROTECTION_LEVEL
-------------------- ---------------- -------------------- --------------------
READ ONLY WITH APPLY PHYSICAL STANDBY MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE


由于此时RAC数据库是mount状态,所以PROTECTION_LEVEL状态为UNPROTECTED,备库也并未把模式转换为MAXIMUM PROTECTION


重启数据库到open模式:
RAC1->startup force
ORACLE instance started.


Total System Global Area  835104768 bytes
Fixed Size                  2232960 bytes
Variable Size             578817408 bytes
Database Buffers          251658240 bytes
Redo Buffers                2396160 bytes
Database mounted.
Database opened.
RAC1->select open_mode,database_role,protection_mode,protection_level from v$database;


OPEN_MODE            DATABASE_ROLE    PROTECTION_MODE      PROTECTION_LEVEL
-------------------- ---------------- -------------------- --------------------
READ WRITE           PRIMARY          MAXIMUM PROTECTION   MAXIMUM PROTECTION


备库查看保护模式:
DG-> select open_mode,database_role,protection_mode,protection_level from v$database;


OPEN_MODE            DATABASE_ROLE    PROTECTION_MODE      PROTECTION_LEVEL
-------------------- ---------------- -------------------- --------------------
READ ONLY WITH APPLY PHYSICAL STANDBY MAXIMUM PROTECTION   MAXIMUM PROTECTION


此时保护模式已经正常传递到备库,官方文档第5章【Data Guard Protection Modes】阐述了关于保护模式转换,其中提到,当需要转换到MAXIMUM AVAILABLILITY和MAXIMUM PROTECTION保护模式时必须满足LGWR,AFFIRM,DB_UNIQUE_NAME,LGWR模式默认是采用SYNC模式传输的,所以SYNC可以不需要指定,另外,在11g,在启用LGWR模式的情况下,如果AFFIRM不指定,则默认采用AFFIRM。而在10g,默认是NOAFFIRM的,指点需要格外注意。除此以外,备库也是必须要有standby redo logfiles的,否则保护模式无法切换成功。


分别从RAC的两个节点切换日志,让归档传到standby,分析在standby上如何应用来自两个节点的归档日志

先启动RAC两个节点
主库:
RAC1->select open_mode from v$database;


OPEN_MODE
--------------------
READ WRITE


备库:
RAC2->select open_mode from v$database;


OPEN_MODE
--------------------
MOUNTED


RAC2->alter database open;


Database altered.


RAC1->alter system switch logfile;


System altered.


#RAC主库切换日志后查看进程
RAC1->select process,status,sequence#,thread# from v$managed_standby;


PROCESS   STATUS        SEQUENCE#    THREAD#
--------- ------------ ---------- ----------
ARCH      OPENING              43          1
ARCH      CLOSING              42          1
ARCH      CONNECTED             0          0
ARCH      CLOSING              42          1
LGWR      CLOSING              36          1
LNS       WRITING              44          1


6 rows selected.


#备库切换日志后查看进程
RAC2->alter system switch logfile;


System altered.


RAC2->select process,status,sequence#,thread# from v$managed_standby;


PROCESS   STATUS        SEQUENCE#    THREAD#
--------- ------------ ---------- ----------
ARCH      CLOSING              37          2
ARCH      CONNECTED             0          0
ARCH      CLOSING              36          2
ARCH      CLOSING              36          2
LNS       WRITING              38          2


由于采用log_archive_dest_2的value值是service=ora11dg valid_for=(online_logfiles,primary_role) db_unique_name=ora11dg并未指定lgwr,默认采用arch方式,此处可以看到切换日志后最新序列44对应的进程是LNS,即log-write network-server,如果是采用lgwr方式,可以在此看到LGWR进程


RAC1->select thread#,max(sequence#) from v$archived_log group by thread#;


   THREAD# MAX(SEQUENCE#)
---------- --------------
         1             43
         2             37


查看备库日志应用情况
DG->select thread#,sequence#,archived,applied from v$archived_log where sequence#>35 order by 1,2;


   THREAD#  SEQUENCE# ARC APPLIED
---------- ---------- --- ---------
         1         36 YES YES
         1         37 YES YES
         1         38 YES YES
         1         39 YES YES
         1         40 YES YES
         1         41 YES YES
         1         42 YES YES
         1         43 YES YES
         2         36 YES YES
         2         37 YES NO


10 rows selected.


#主库切换一次日志并查看
RAC1->alter system switch logfile;


System altered.


RAC1->select thread#,max(sequence#) from v$archived_log group by thread#;


   THREAD# MAX(SEQUENCE#)
---------- --------------
         1             44
         2             37


RAC1->select process,status,sequence#,thread# from v$managed_standby;


PROCESS   STATUS        SEQUENCE#    THREAD#
--------- ------------ ---------- ----------
ARCH      CLOSING              43          1
ARCH      CLOSING              44          1
ARCH      CONNECTED             0          0
ARCH      CLOSING              42          1
LGWR      CLOSING              36          1
LNS       WRITING              45          1


6 rows selected.


#备库查看日志应用
DG->select thread#,sequence#,archived,applied from v$archived_log where sequence#>35 order by 1,2;


   THREAD#  SEQUENCE# ARC APPLIED
---------- ---------- --- ---------
         1         36 YES YES
         1         37 YES YES
         1         38 YES YES
         1         39 YES YES
         1         40 YES YES
         1         41 YES YES
         1         42 YES YES
         1         43 YES YES
         1         44 YES NO
         2         36 YES YES
         2         37 YES YES


11 rows selected.


#备库切换一次日志并查看
RAC2->alter system switch logfile;


System altered.


RAC2->select process,status,sequence#,thread# from v$managed_standby;


PROCESS   STATUS        SEQUENCE#    THREAD#
--------- ------------ ---------- ----------
ARCH      CLOSING              37          2
ARCH      CONNECTED             0          0
ARCH      CLOSING              38          2
ARCH      CLOSING              36          2
LNS       WRITING              39          2


RAC2->select thread#,max(sequence#) from v$archived_log group by thread#;


   THREAD# MAX(SEQUENCE#)
---------- --------------
         1             44
         2             38


#备库查看日志应用
DG->select thread#,sequence#,archived,applied from v$archived_log where sequence#>35 order by 1,2;


   THREAD#  SEQUENCE# ARC APPLIED
---------- ---------- --- ---------
         1         36 YES YES
         1         37 YES YES
         1         38 YES YES
         1         39 YES YES
         1         40 YES YES
         1         41 YES YES
         1         42 YES YES
         1         43 YES YES
         1         44 YES YES
         2         36 YES YES
         2         37 YES YES
         2         38 YES NO


12 rows selected.


根据以上规律得出结论:在arch模式下,在每个节点上做日志切换时,备库单独应用每个节点线程(thread)的归档,并且在应用另一个节点thread前,如果当前thread有未应用的日志,则先应用

--------------------------------------------------------------------------------------------------------

By aaron8219 Chinaunix Blog:http://blog.chinaunix.net/uid/24612962.html

原创文章,转载请注明链接,谢谢!

http://blog.csdn.net/aaron8219/article/details/10035325

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值