1,rac 环境信息如下

#public

192.168.19.10 rac1

192.168.19.20 rac2


#private

192.168.10.10 rac1

192.168.10.20 rac2


#vip

192.168.19.30 rac1-vip

192.168.19.40 rac2-vip


实例名:

rac1: orcl1

rac2: orcl2

db_name: orcl


2,standby信息

ip: 192.168.19.15

实例名: standby

standby 磁盘为ASM


3,配置监听


配置rac的tnsnames.ora ,连个节点相同配置

[oracle@rac1 admin]$ cat tnsnames.ora

# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/network/admin/tnsnames.ora

# Generated by Oracle configuration tools.



orcl1 =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.19.30)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = orcl)

)

)

orcl2 =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.19.40)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = orcl)

)

)


standby =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.19.15)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = standby)

)

)


配置standby的tnsnames.ora


[oracle@localhost admin]$ cat tnsnames.ora

# tnsnames.ora Network Configuration File: /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora

# Generated by Oracle configuration tools.

orcl1 =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.19.30)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = orcl)

)

)

orcl2 =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.19.40)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = orcl)

)

)



standby =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.19.15)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = standby)

)

)


[grid@localhost admin]$ cat listener.ora

# listener.ora Network Configuration File: /u01/app/grid/product/11.2.0/grid/network/admin/listener.ora

# Generated by Oracle configuration tools.


SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(GLOBAL_DBNAME = orcl)

(ORACLE_HOME = /u01/app/grid/product/11.2.0/grid)

(SID_NAME = orcl)

)

)


LISTENER =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.19.15)(PORT = 1521))

)


ADR_BASE_LISTENER = /u01/app/grid


ENABLE_GLOBAL_DYNAMIC_ENDPOINT_LISTENER = ON


4,配置standby的密码文件

5,配置standby和primary参数文件

rac的参数文件:

[oracle@rac2 tmp]$ cat init.ora

orcl1.__db_cache_size=113246208

orcl2.__db_cache_size=130023424

orcl1.__java_pool_size=4194304

orcl2.__java_pool_size=4194304

orcl1.__large_pool_size=8388608

orcl2.__large_pool_size=8388608

orcl2.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment

orcl1.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment

orcl1.__pga_aggregate_target=109051904

orcl2.__pga_aggregate_target=109051904

orcl1.__sga_target=318767104

orcl2.__sga_target=318767104

orcl1.__shared_io_pool_size=0

orcl2.__shared_io_pool_size=0

orcl1.__shared_pool_size=184549376

orcl2.__shared_pool_size=167772160

orcl1.__streams_pool_size=0

orcl2.__streams_pool_size=0

*.audit_file_dest='/u01/app/oracle/admin/orcl/adump'

*.audit_trail='db'

*.cluster_database=true

*.compatible='11.2.0.0.0'

*.control_files='+DATA/orcl/controlfile/current.260.825676713','+FRA/orcl/controlfile/current.256.825676731'

*.db_block_size=8192

*.db_create_file_dest='+DATA'

*.db_domain=''

*.DB_FILE_NAME_CONVERT='orcl','standby'

*.db_name='orcl'

*.db_recovery_file_dest='+FRA'

*.db_recovery_file_dest_size=4070572032

*.diagnostic_dest='/u01/app/oracle'

*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'

*.FAL_SERVER='standby'

orcl2.instance_number=2

orcl1.instance_number=1

*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(orc1,standby)'

*.LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/arch1/orcl VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl'

*.LOG_ARCHIVE_DEST_2='SERVICE=standby ARCH VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby'

*.LOG_FILE_NAME_CONVERT='/u01/arch1/app/orcl','/u01/app/arch1/standby'

*.open_cursors=300

*.pga_aggregate_target=105906176

*.processes=150

*.remote_listener='racdb-scan.grid.orcl.com:1521'

*.remote_login_passwordfile='exclusive'

*.sga_target=317718528

*.STANDBY_FILE_MANAGEMENT='AUTO'

orcl2.thread=2

orcl1.thread=1

orcl2.undo_tablespace='UNDOTBS2'

orcl1.undo_tablespace='UNDOTBS1'

orcl1.fal_client=orcl1

orcl2.fal_client=orcl2


standby的参数文件如下

*.audit_file_dest='/u01/app/oracle/admin/standby/adump'

*.audit_trail='db'

*.compatible='11.2.0.0.0'

*.control_files='+DATA/orcl/controlfile/cont01.ctl','+FRA/orcl/controlfile/cont02.ctl'

*.db_block_size=8192

*.db_create_file_dest='+DATA'

*.db_domain=''

*.db_name='orcl'

*.db_recovery_file_dest='+FRA'

*.db_recovery_file_dest_size=4070572032

*.diagnostic_dest='/u01/app/oracle'

*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'

*.open_cursors=300

*.pga_aggregate_target=105906176

*.processes=150

*.remote_login_passwordfile='exclusive'

*.sga_target=317718528

*.undo_tablespace='UNDOTBS1'

DB_UNIQUE_NAME=standby

*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(standby,orcl)'

*.LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/arch1/standby VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=standby'

*.LOG_ARCHIVE_DEST_2='SERVICE=orcl ARCH VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl'

*.FAL_SERVER='orcl'

*.STANDBY_FILE_MANAGEMENT=AUTO

*.DB_FILE_NAME_CONVERT='standby','orcl' //若不是ASM管理,更改为实际数据文件路径

*.LOG_FILE_NAME_CONVERT='/u01/arch1/app/orcl','/u01/app/arch1/standby'


注意需要创建/u01/app/oracle/admin/standby/adump' 和/u01/app/arch1/standby目录


6,将rac所有节点设置为归档模式,和force logging模式

7,使用新创建的参数文件将primary数据库启动到mount状态,standby数据库启动到nomount状态

8,在任意节点对数据库做全备份,这里包含了控制文件

RMAN> backup database format '/tmp/racdbfull%u_%s_%p' include current controlfile for standby


9,将备份复制到备库相同目录/tmp


[oracle@rac1 tmp]$ scp racdbfull* 192.168.19.15:/tmp


10, 在备库上执行下面命令恢复

[oracle@localhost ~]$ rman target sys/oracle@orcl auxiliary /

RMAN> duplicate target database for standby;


11,在备库上创建standby logfile(大小相等,但日志组数量要比primary数据库多一组)


SQL> alter database add standby logfile ('+data') size 50m;


Database altered.


SQL> alter database add standby logfile ('+data') size 50m;


Database altered.


SQL> alter database add standby logfile ('+data') size 50m;


Database altered.


SQL> alter database add standby logfile ('+data') size 50m;


Database altered.


12,使用spfile将rac所有节点和standby数据启动到open状态

13,在备库上启用redo apply

SQL> alter database recover managed standby database using current logfile disconnect from session;


Database altered.



14,检查

SQL> select THREAD#,SEQUENCE#,applied from v$archived_log;


THREAD# SEQUENCE# APPLIED

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

2 6 YES

1 9 YES

1 10 YES

1 11 YES

2 7 YES

1 12 NO

1 13 NO


7 rows selected.


主库:


SQL> archive log list

Database log mode Archive Mode

Automatic archival Enabled

Archive destination /u01/app/arch1/orcl

Oldest online log sequence 13

Next log sequence to archive 14

Current log sequence 14



在orcl1 上切换日志,跟踪备库的alter日志如下:


Sat Nov 09 09:13:26 2013

RFS[4]: Assigned to RFS process 12645

RFS[4]: Identified database type as 'physical standby': Client is ARCH pid 2639

RFS[4]: Selected log 5 for thread 1 sequence 14 dbid 1353457449 branch 825676742

Sat Nov 09 09:13:31 2013

Archived Log entry 8 added for thread 1 sequence 14 ID 0x50ab6422 dest 1:

Sat Nov 09 09:13:32 2013

RFS[5]: Assigned to RFS process 12665

RFS[5]: Identified database type as 'physical standby': Client is ARCH pid 5841

RFS[5]: Selected log 6 for thread 2 sequence 8 dbid 1353457449 branch 825676742

Sat Nov 09 09:13:33 2013

Recovery of Online Redo Log: Thread 2 Group 6 Seq 8 Reading mem 0

Mem# 0: +DATA/standby/onlinelog/group_6.274.831027171

Sat Nov 09 09:13:38 2013

Archived Log entry 9 added for thread 2 sequence 8 ID 0x50ab6422 dest 1:

Media Recovery Log /u01/app/arch1/standby/1_12_825676742.dbf

Sat Nov 09 09:13:46 2013

Media Recovery Log /u01/app/arch1/standby/1_13_825676742.dbf

Sat Nov 09 09:14:24 2013

Media Recovery Log /u01/app/arch1/standby/1_14_825676742.dbf

Media Recovery Waiting for thread 1 sequence 15



在orcl2上切换日志:


SQL> select *from t;


no rows selected

SQL> insert into t values (1);


1 row created.


SQL> commit;


Commit complete.



SQL> alter system switch logfile;


System altered.


SQL> alter system switch logfile;


System altered.

SQL> archive log list;

Database log mode Archive Mode

Automatic archival Enabled

Archive destination /u01/app/arch1/orcl

Oldest online log sequence 8

Next log sequence to archive 9

Current log sequence 9



跟踪备库alter日志

RFS[5]: Selected log 6 for thread 2 sequence 9 dbid 1353457449 branch 825676742

Sat Nov 09 09:18:58 2013

Archived Log entry 10 added for thread 2 sequence 9 ID 0x50ab6422 dest 1:

Sat Nov 09 09:20:00 2013

RFS[5]: Selected log 6 for thread 2 sequence 10 dbid 1353457449 branch 825676742

Sat Nov 09 09:20:03 2013

Archived Log entry 11 added for thread 2 sequence 10 ID 0x50ab6422 dest 1:

Sat Nov 09 09:20:05 2013

RFS[4]: Selected log 5 for thread 1 sequence 15 dbid 1353457449 branch 825676742

Sat Nov 09 09:20:05 2013

Recovery of Online Redo Log: Thread 1 Group 5 Seq 15 Reading mem 0

Mem# 0: +DATA/standby/onlinelog/group_5.273.831027081

Sat Nov 09 09:20:06 2013

Archived Log entry 12 added for thread 1 sequence 15 ID 0x50ab6422 dest 1:

Media Recovery Log /u01/app/arch1/standby/2_9_825676742.dbf

Media Recovery Log /u01/app/arch1/standby/2_10_825676742.dbf

Media Recovery Waiting for thread 2 sequence 11


在备库上验证数据同步


SQL> select * from t;


ID

----------

1



从上面的alter日志可以看到,节点orcl1的日志序列号要高于节点orcl2的序列号,在备库上应用的时候使用了不同的线程,节点一使用thread 1 节点二使用thread 2