一、环境
操作系统: Red Hat Enterprise Linux Server release 5 (Tikanga) Primary数据库(rac): IP地址:172.168.1.206 172.168.1.208 vip地址:172.168.1.116 172.168.1.118 数据库SID:syk1 syk2 DB_NAME:syk 数据、控制、日志文件放在 ASMStandby数据库(单机):
IP地址:172.168.1.222 数据库SID:syk DB_NAME:syk 数据、控制、日志文件使用文件系统 /oradata二、tnsnames.ora在rac和standby相同
SYK2 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = syk) (INSTANCE_NAME = syk2) ) )SYK1 =
(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = syk) (INSTANCE_NAME = syk1) ) )SYK =
(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521)) (LOAD_BALANCE = yes) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = syk) ) )SYK_SINGLE =
(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.168.1.222)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = syk) ) )LISTENERS_SYK =
(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521)) )EXTPROC_CONNECTION_DATA =
(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0)) ) (CONNECT_DATA = (SID = PLSExtProc) (PRESENTATION = RO) ) ) standby上的listener.ora SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = syk) (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1) (SID_NAME = syk) ) )LISTENER =
(DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.168.1.222)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0)) ) )三、修改参数(在rac1上如下操作)
SQL> create pfile='/home/oracle/pfilesyk.ora' from spfile;
添加如下参数 *.db_unique_name='SYK' *.service_names='syk_rac' *.log_archive_config='dg_config=(syk,syk_single)' *.log_archive_dest_1='LOCATION=/home/oracle/archive/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES)' DB_UNIQUE_NAME='syk' *.log_archive_dest_2='service=syk_single LGWR valid_for=(online_logfiles,primary_role) db_unique_name=syk_single' *.log_archive_dest_state_1='ENABLE' *.log_archive_dest_state_2='ENABLE' *.db_file_name_convert='/oradata/syk','+ASM_DATA/syk/datafile','/oradata/syk','+ASM_DATA/syk/tempfile' *.log_file_name_convert='/oradata/syk','+ASM_DATA/syk/onlinelog','/oradata/syk','+ASM_RECOVER/syk/onlinelog' syk1.fal_client='syk1' syk2.fal_client='syk2' *.fal_server='syk_single' *.standby_file_management='auto' *.STANDBY_ARCHIVE_DEST='/home/oracle/archive/'注意:*.db_unique_name='SYK' 不要改变db_unique_name的值,在参数文件里加上它(show parameter db_unique_name看到的),
但是值不要改变 create spfile='+ASM_RECOVER/syk/spfilesyk.ora' from pfile='/home/oracle/pfilesyk.ora';也可以直接修改spfile,如下:
ALTER SYSTEM SET DB_UNIQUE_NAME=syk scope=spfile;
alter system set service_names='syk_rac' alter system set log_archive_config='dg_config=(syk,syk_single)' scope=both; alter system set LOG_ARCHIVE_DEST_STATE_1='ENABLE' alter system set LOG_ARCHIVE_DEST_STATE_2='ENABLE' alter system set log_archive_dest_1='LOCATION=/home/oracle/archive/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES)' DB_UNIQUE_NAME='syk' alter system set log_archive_dest_2='service=syk_single valid_for=(online_logfiles,primary_role) db_unique_name=syk_single' alter system set db_file_name_convert='/oradata/syk','+ASM_DATA/syk/datafile','/oradata/syk','+ASM_DATA/syk/tempfile' alter system set log_file_name_convert='/oradata/syk','+ASM_DATA/syk/onlinelog','/oradata/syk','+ASM_RECOVER/syk/onlinelog' alter system set standby_file_management=auto alter system set fal_server='syk_single' alter system set syk1.fal_client='syk1' alter system set syk2.fal_client='syk2' alter system set STANDBY_ARCHIVE_DEST='/home/oracle/archive/'根据上面修改standby库的参数(在standby上操作)
single上最后参数如下: syk.__db_cache_size=134217728 syk.__java_pool_size=4194304 syk.__large_pool_size=4194304 syk.__shared_pool_size=67108864 syk.__streams_pool_size=0 *.audit_file_dest='/u01/app/oracle/admin/syk/adump' *.background_dump_dest='/u01/app/oracle/admin/syk/bdump' *.compatible='10.2.0.1.0' *.control_files='/oradata/syk/control01.ctl','/oradata/syk/control02.ctl','/oradata/syk/control03.ctl'#Restore Controlfile *.core_dump_dest='/u01/app/oracle/admin/syk/cdump' *.db_block_size=8192 *.db_domain='' *.db_file_multiblock_read_count=16 *.db_file_name_convert='+ASM_DATA/syk/datafile','/oradata/syk','+ASM_DATA/syk/tempfile','/oradata/syk' *.db_name='syk' *.db_unique_name='syk_single' *.dispatchers='(PROTOCOL=TCP) (SERVICE=sykXDB)' *.fal_client='syk_single' *.fal_server='syk1','syk2' *.job_queue_processes=10 *.log_archive_config='dg_config=(syk,syk_single)' *.log_archive_dest_1='location=/home/oracle/archive VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=syk_single' *.log_archive_dest_2='service=syk1 LGWR valid_for=(online_logfiles,primary_role) db_unique_name=syk' *.log_checkpoints_to_alert=TRUE *.log_file_name_convert='+ASM_DATA/syk/onlinelog','/oradata/syk','+ASM_RECOVER/syk/onlinelog','/oradata/syk' *.open_cursors=300 *.pga_aggregate_target=71303168 *.processes=300 *.remote_login_passwordfile='exclusive' *.service_names='syk_single' *.sessions=335 *.sga_target=216006656 *.standby_archive_dest='/home/oracle/archive' *.standby_file_management='auto' *.thread=1 *.undo_management='AUTO' *.undo_tablespace='UNDOTBS1' *.user_dump_dest='/u01/app/oracle/admin/syk/udump'四、rac上相关准备操作(rac1上操作)
强制日志
SQL> alter database force logging;备份
RMAN> backup database format '/home/oracle/dgbak/racdbfull%u_%s_%p';生成standby上的控制文件
SQL> alter system archive log current; SQL> alter database create standby controlfile as '/home/oracle/standby-controlfile.ora';把所有文件(上面生成的控制文件,备份文件)拷到standby相应目录下
五、启动standby到nomount下(standby上做操作)
生成密码文件和参数文件 orapwd file=/u01/app/oracle/product/10.2.0/db_1/dbs/orapwpridb password=admin123 两个库的密码要相同,否则会有报错 create spfile from pfile='/home/oracle/pfilesyk.ora';六、创建standby库(rac1上操作)
rman target / auxiliary
duplicate target database for standby;
七、standby上做检查(在standby上做操作)select open_mode from v$database
select name from v$datafile select name from v$tempfile select member from v$logfile八、创建standby日志(rac上每thread有两组日志,那在这里要创建三组)(在standby上做操作)
alter database add standby logfile thread 1 group 5 ('/oradata/syk/st_1_5.rdo') size 50m;
alter database add standby logfile thread 1 group 6 ('/oradata/syk/st_1_6.rdo') size 50m; alter database add standby logfile thread 1 group 7 ('/oradata/syk/st_1_7.rdo') size 50m;alter database add standby logfile thread 2 group 8 ('/oradata/syk/st_2_8.rdo') size 50m;
alter database add standby logfile thread 2 group 9 ('/oradata/syk/st_2_9.rdo') size 50m; alter database add standby logfile thread 2 group 10 ('/oradata/syk/st_2_10.rdo') size 50m;确认日志
select member from v$logfile九、开始应用,启动MRP(在standby上操作)
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
取消日志应用
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; 十、rac各个实例查看日志传送情况(每个实例上都检查)SQL> select dest_name,status,error from v$archive_dest;
测试: standby上做检查 SQL> select name from v$datafile;
NAME
-------------------------------------------------------------------------------- /oradata/syk/system.260.765584315 /oradata/syk/undotbs1.262.765584301 /oradata/syk/sysaux.265.765584299 /oradata/syk/users.267.765584315 /oradata/syk/undotbs2.261.765584301 /oradata/syk/moe.264.765584315 /oradata/syk/sunsyk.269.7662004377 rows selected.
SQL> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
-------------- 51 rac1做检查 SQL> select open_mode from v$database;OPEN_MODE
---------- MOUNTEDSQL> select name from v$datafile;
NAME
-------------------------------------------------------------------------------- +ASM_DATA/syk/datafile/system.260.765584315 +ASM_DATA/syk/datafile/undotbs1.262.765584301 +ASM_DATA/syk/datafile/sysaux.265.765584299 +ASM_DATA/syk/datafile/users.267.765584315 +ASM_DATA/syk/datafile/undotbs2.261.765584301 +ASM_DATA/syk/datafile/moe.264.765584315 +ASM_DATA/syk/datafile/sunsyk.269.7662004377 rows selected.
SQL> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
-------------- 51standby上创建表空间
SQL> create tablespace test datafile '/oradata/syk/test01.dbf' size 1m;Tablespace created.
SQL> alter system switch logfile;
System altered.
SQL> select name from v$datafile;
NAME
-------------------------------------------------------------------------------- /oradata/syk/system.260.765584315 /oradata/syk/undotbs1.262.765584301 /oradata/syk/sysaux.265.765584299 /oradata/syk/users.267.765584315 /oradata/syk/undotbs2.261.765584301 /oradata/syk/moe.264.765584315 /oradata/syk/sunsyk.269.766200437 /oradata/syk/test01.dbf8 rows selected.
SQL> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
-------------- 52 rac1上做检查,看是否同步过来 SQL> select name from v$datafile;NAME
-------------------------------------------------------------------------------- +ASM_DATA/syk/datafile/system.260.765584315 +ASM_DATA/syk/datafile/undotbs1.262.765584301 +ASM_DATA/syk/datafile/sysaux.265.765584299 +ASM_DATA/syk/datafile/users.267.765584315 +ASM_DATA/syk/datafile/undotbs2.261.765584301 +ASM_DATA/syk/datafile/moe.264.765584315 +ASM_DATA/syk/datafile/sunsyk.269.766200437 +ASM_DATA/syk/datafile/test.275.7662465898 rows selected.
SQL> select max(sequence#) from v$archived_log;
MAX(SEQUENCE#)
-------------- 52 switchover rac上只能在一个实例上操作,所以关闭rac2 一、rac2 SQL> shutdown immediate二、rac1转成standby
SQL> alter database commit to switchover to physical standby with session shutdown;SQL> shutdown immediate
三、standby转成主库
SQL> alter database commit to switchover to primary with session shutdown; SQL> shutdown immediate SQL> startup四、rac1添加standby日志
SQL> startup mount; alter database add standby logfile thread 1 group 5 size 50m; alter database add standby logfile thread 1 group 6 size 50m; alter database add standby logfile thread 1 group 7 size 50m;alter database add standby logfile thread 2 group 8 size 50m;
alter database add standby logfile thread 2 group 9 size 50m; alter database add standby logfile thread 2 group 10 size 50m; 开始同步 SQL> alter database recover managed standby database disconnect from session;测试同上。