我们经常将oracle rac数据库通过dataguard容灾到一个单实例数据库中,当生产库出现故障后可以将生产库切换到dg服务器上。而当生产库rac修复完成后,我们同样可以通过dg将数据回切到生产库中。
此次测试将单实例数据库通过dg转换为rac数据库,这个单实例是刚创建的,并不是由rac通过dg生成的。
在做dg之前需要安装完成grid,不需要创建数据库实例。在日志应用的时候必须只能是一个实例应用。
具体环境如下:
单实例库:
数据库版本:11.2.0.4.0
sid:suq
db_unique_name=suq
ip:192.168.56.35
hostname:11g1
rac数据库:
?
数据库版本:11.2.0.4.0
sid:suq1、suq2
db_unique_name=suq1
ip地址规划:
#PUBLIC
192.168.56.110 suq1
192.168.56.112 suq2
#VIP
192.168.56.111 suq1-vip
192.168.56.113 suq2-vip
#PRIV
172.168.1.21 suq1-priv
172.168.1.23 suq2-priv
#SCAN
192.168.56.25 suq-cluster-scan
具体步骤如下:
1.配置一些rac和dg的基本参数,包括:
修改主库force logging、创建standby logfile、创建密码文件并且拷贝到rac下、添加主库和备库的服务命名:
?
alter database force logging;
alter database add standby logfile group 4 ('/opt/oracle/oradata/suq/stand_redo04.log') size 50m;
alter database add standby logfile group 5 ('/opt/oracle/oradata/suq/stand_redo05.log') size 50m;
alter database add standby logfile group 6 ('/opt/oracle/oradata/suq/stand_redo06.log') size 50m;
alter database add standby logfile group 7 ('/opt/oracle/oradata/suq/stand_redo07.log') size 50m;
##
primary=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.35)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = suq)
)
)
standby=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.111)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = suq1)
(UR = A)
)
)
注意:standby端即rac端的ip地址写的是suq1的vip地址,而且需要加上(UR=A)选项,否则通过sqlplus连接不到rac实例。
?
2.生成standby端的oracle 参数文件,这一步参数里面的内容及其重要,必须写正确,特别是rac和dg的参数,目前我的rac有三个磁盘组
?
[grid@suq2 ~]$ asmcmd lsdg
State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name
MOUNTED EXTERN N 512 4096 1048576 3435 3329 0 3329 0 N BACKUP/
MOUNTED EXTERN N 512 4096 1048576 4305 1988 0 1988 0 N DATADG/
MOUNTED EXTERN N 512 4096 1048576 1458 1058 0 1058 0 Y SYSTEMDG/
?
下面是我写好的一个参数文件:
?
suq.__db_cache_size=335544320
suq.__java_pool_size=4194304
suq.__large_pool_size=4194304
suq.__oracle_base='/u01/app'
suq.__pga_aggregate_target=335544320
suq.__sga_target=503316480
suq.__shared_io_pool_size=0
suq.__shared_pool_size=146800640
suq.__streams_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/suq'
*.audit_trail='none'
*.compatible='11.2.0.4.0'
*.control_files='+DATADG/suq/control.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='suq'
*.db_recovery_file_dest='+BACKUP'
*.db_recovery_file_dest_size=5218762752
*.diagnostic_dest='/u01/app/oracle'
*.memory_target=838860800
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_tablespace='UNDOTBS1'
#### rac parameter
suq1.local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.111)(PORT=1521))'
suq2.local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.113)(PORT=1521))'
suq1.undo_tablespace='UNDOTBS1'
suq2.undo_tablespace='UNDOTBS2'
suq1.remote_listener='suq-cluster-scan:1521'
suq2.remote_listener='suq-cluster-scan:1521'
suq1.instance_name=suq1
suq2.instance_name=suq2
suq1.instance_number=1
suq2.instance_number=2
*.cluster_database=true
*.cluster_database_instances