Oracle 给rac创建单实例dg并做主从切换功能
一、概述
本文将介绍如何给rac搭建单节点的dg,以及如何对其进行角色转换。预先具备的知识(rac搭建,单实例-单实例dg搭建)
二、实验环境介绍
主库rac(已安装rac,并已有数据库orcl)
rac1:192.168.56.11,sid1:orcl1,version:11.2.0.4 rac2:192.168.56.12,sid2:orcl2,version:11.2.0.4
从库(已安装单实例数据库软件,无数据库实例)
oradg:192.168.56.102,sid:orcldg,version:11.2.0.4
三、搭建dg
**以下所有主库操作都在节点1上做,如果需要在节点2上做的,我会标明
1.主库打开归档模式,并强制写日志
先查看数据库的归档状态以及是否开启强制写日志,从下图可以看到目前数据库并没有打开归档,也没有开启强制写日志
SQL>selectlog_mode,force_loggingfromv$database;
数据库在mount状态下打开归档
SQL>altersystemsetlog_archive_dest_1='location=+data'sid='*'scope=spfile; SQL>shutdownimmediate;#两节点都关闭 SQL>startupmount;#只开启节点1 SQL>alterdatabasearchivelog; SQL>alterdatabaseopen;
强制日志写,数据库在open状态就能修改
SQL>alterdatabaseforcelogging; SQL>startup;#当节点1open完毕后,在节点2上打开数据库
再来查看数据库的归档状态以及是否开启强制写日志
SQL>selectlog_mode,force_loggingfromv$database;
2.主库打开dataguard开关
SQL>altersystemsetlog_archive_config='dg_config=(orcl,orcldg)'sid='*';#orcl是主库的db_unique_name,orcldg是从库的db_unique_name
3.主库设置远程归档
SQL>altersystemsetlog_archive_dest_3='service=orcldgvalid_for=(online_logfiles,primary_role)db_unique_name=orcldg'sid='*';
4.将主库的口令文件传送给从库
[oracle@rac1~]$scp$ORACLE_HOME/dbs/orapw$ORACLE_SID192.168.56.102:$ORACLE_HOME/dbs/orapworcldg
5.从库准备参数文件
这里参数文件跟给单实例搭建单实例dg没什么区别,所以不做具体介绍
[root@oradg~]#vi$ORACLE_HOME/dbs/initorcldg.ora *.audit_file_dest='/u01/app/oracle/admin/orcldg/adump' *.audit_trail='db' *.compatible='11.2.0.4.0' *.control_files='/u01/app/oracle/oradata/orcldg/controlfile/control01.ctl' *.db_block_size=8192 *.db_domain='' *.db_name='orcl' *.diagnostic_dest='/u01/app/oracle' *.log_archive_config='dg_config=(orcl,orcldg)' *.log_archive_dest_2='location=/u01/app/oracle/oradata/orcldg/archstdlog/valid_for=(standby_logfiles,standby_role)db_unique_name=orcldg' *.memory_target=838860800 *.open_cursors=300 *.processes=150 *.remote_login_passwordfile='exclusive' *.undo_tablespace='UNDOTBS1' standby_file_management=auto#该参数默认值是manual,需要将其改为auto,表示主库的数据文件发生修改(如新建,重命名等),相应地从库也做相应修改 db_unique_name='orcldg' db_file_name_convert='+DATA/orcl/datafile/','/u01/app/oracle/oradata/orcldg/datafile/','+DATA/orcl/tempfile/','/u01/app/oracle/oradata/orcldg/tempfile/' log_file_name_convert='+DATA/orcl/onlinelog/','/u01/app/oracle/oradata/orcldg/onlinelog/'
6.从库中准备相关目录
[oracle@oradg~]$mkdir-p/u01/app/oracle/admin/orcldg/adump [oracle@oradg~]$mkdir-p/u01/app/oracle/oradata/orcldg/controlfile [oracle@oradg~]$mkdir-p/u01/app/oracle/oradata/orcldg/archstdlog [oracle@oradg~]$mkdir-p/u01/app/oracle/oradata/orcldg/datafile [oracle@oradg~]$mkdir-p/u01/app/oracle/oradata/orcldg/tempfile [oracle@oradg~]$mkdir-p/u01/app/oracle/oradata/orcldg/onlinelog
7.启动从库实例
[oracle@oradg~]$exportORACLE_SID=orcldg [oracle@oradg~]$sqlplus/assysdba SQL>createspfilefrompfile; SQL>startupnomount
8.从库配置并启动监听程序
因为采用duplicate方式复制主库数据,所以需要将从库配置为静态注册的形式
[oracle@oradg~]$vi$ORACLE_HOME/network/admin/listener.ora SID_LIST_LISTENER= (SID_LIST= (SID_DESC= (GLOBAL_DBNAME=orcldg) (ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1) (SID_NAME=orcldg) ) ) LISTENER= (DESCRIPTION= (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.102)(PORT=1521)) ) [oracle@oradg~]$lsnrctlstart
9.主库配置服务命名
#两个节点都要设置 [oracle@rac1~]$vi$ORACLE_HOME/network/admin/tnsnames.ora orcldg= (DESCRIPTION= (ADDRESS_LIST= (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.102)(PORT=1521)) ) (CONNECT_DATA= (SERVER=DEDICATED) (SERVICE_NAME=orcldg) ) ) [oracle@rac2~]$vi$ORACLE_HOME/network/admin/tnsnames.ora
内容跟rac1一致,略
10.主库使用网络连接从库(测试连通性)
#这里我的主库的sys密码是123456,从库与主库一致 [oracle@rac1~]$sqlplussys/123456@orcldgassysdba
11.在主库启动rman复制从库
rman连接主库和从库
[oracle@rac1~]$rmantarget/auxiliarysys/123456@orcldg RMAN>duplicatetargetdatabaseforstandbyfromactivedatabase;
12.从库添加standbylog
添加的日志大小跟主库的onlinelog保持一致,数量多两组(主库的onlinelog信息查看v$log)
group的编号不与当前的onlinelog重复即可
[oracle@oradg~]$mkdir-p/u01/app/oracle/oradata/orcldg/standbylog/ SQL>alterdatabaseaddstandbylogfilegroup21'/u01/app/oracle/oradata/orcldg/standbylog/std01.log'size50M; SQL>alterdatabaseaddstandbylogfilegroup22'/u01/app/oracle/oradata/orcldg/standbylog/std02.log'size50M; SQL>alterdatabaseaddstandbylogfilegroup23'/u01/app/oracle/oradata/orcldg/standbylog/std03.log'size50M; SQL>alterdatabaseaddstandbylogfilegroup24'/u01/app/oracle/oradata/orcldg/standbylog/std04.log'size50M; SQL>alterdatabaseaddstandbylogfilegroup25'/u01/app/oracle/oradata/orcldg/standbylog/std05.log'size50M; SQL>alterdatabaseaddstandbylogfilegroup26'/u01/app/oracle/oradata/orcldg/standbylog/std06.log'size50M;
13.从库打开应用日志
SQL>alterdatabaserecovermanagedstandbydatabasedisconnectfromsession;
14.主库切换归档
SQL>altersystemswitchlogfile;
15.打开从库
当从库应用归档一段时间后,就关闭应用归档日志,打开从库。
SQL>alterdatabaserecovermanagedstandbydatabasecancel; SQL>alterdatabaseopen; SQL>alterdatabaserecovermanagedstandbydatabaseusingcurrentlogfiledisconnectfromsession;
16.验证同步
主库做修改
SQL>updatescott.empsetsal=2000; SQL>commit;
从库查询
SQL>select*fromscott.emp;
至此,给rac搭建一个单实例的dg就已经做完了,跟单实例搭建单实例的dg没什么区别。接下来介绍如何切换。
四、主从切换准备
17.主库添加standbylogfile归档路径
使用grid账号,创建归档路径
[grid@rac1~]$asmcmd ASMCMD>lsdg#查看磁盘组名字 ASMCMD>cddata ASMCMD>cdorcl ASMCMD>mkdirARCHSTDLOG
使用sys数据库账号,修改数据库参数
SQL>altersystemsetlog_archive_dest_2='location=+DATA/ORCL/ARCHSTDLOG/valid_for=(standby_logfiles,standby_role)db_unique_name=orcl'sid='*';
18.主库添加standbylogfile
添加的日志的大小跟主库的onlinelog保持一致,数量多两组(主库的onlinelog信息查看v$log)
SQL>alterdatabaseaddstandbylogfilethread1group21('+data')size50M; SQL>alterdatabaseaddstandbylogfilethread1group22('+data')size50M; SQL>alterdatabaseaddstandbylogfilethread1group23('+data')size50M; SQL>alterdatabaseaddstandbylogfilethread2group24('+data')size50M; SQL>alterdatabaseaddstandbylogfilethread2group25('+data')size50M; SQL>alterdatabaseaddstandbylogfilethread2group26('+data')size50M;
19.主库修改参数文件
SQL>altersystemsetstandby_file_management=autosid='*'; SQL>altersystemsetdb_file_name_convert='/u01/app/oracle/oradata/orcldg/datafile/','+DATA/orcl/datafile/','/u01/app/oracle/oradata/orcldg/tempfile/','+DATA/orcl/tempfile/'sid='*'scope=spfile; SQL>altersystemsetlog_file_name_convert='/u01/app/oracle/oradata/orcldg/onlinelog/','+DATA/orcl/onlinelog/'sid='*'scope=spfile;
到这里,主库转换为备库的准备工作已完成!
20.从库配置tnsnames.ora
这里的配置tnsnames.ora的目的是,当原从库转变为新主库之后,原主库变为新从库,新主库需要给新从库发送归档日志,所以这里的tnsnames要指向新从库,又由于dg库应用归档只能在一个节点上,所以toorcl只指向节点1。
[oracle@oradg~]$vi$ORACLE_HOME/network/admin/tnsnames.ora toorcl= (DESCRIPTION= (ADDRESS_LIST= (ADDRESS=(PROTOCOL=TCP)(HOST=192.168.56.11)(PORT=1521)) ) (CONNECT_DATA= (SERVER=DEDICATED) (SERVICE_NAME=orcl) ) )
21.从库为onlinelog设置归档路径
[oracle@oradg~]$mkdir-p/u01/app/oracle/oradata/orcldg/archivelog SQL>altersystemsetlog_archive_dest_1='location=/u01/app/oracle/oradata/orcldg/archivelog/valid_for=(online_logfiles,primary_role)db_unique_name=orcldg';
22.从库设置远程归档参数
SQL>altersystemsetlog_archive_dest_3='service=toorclvalid_for=(online_logfiles,primary_role)db_unique_name=orcl';
到这里,从库转为主库的准备工作已完成!
四、主从切换
23.查看主库的角色转换状态
SQL>selectdatabase_role,switchover_statusfromv$database;
24.在节点1上主转从
集群在做角色转换时,只能有一个实例是打开状态,其余都要关闭,所以将节点2的实例关闭。
SQL>shutdownimmediate;#只在节点2上做
在节点1上执行以下命令,将主库转为从库,并且关闭实例
SQL>alterdatabasecommittoswitchovertophysicalstandbywithsessionshutdown;
25.在节点3上从转主
SQL>selectdatabase_role,switchover_statusfromv$database;
如果是"NOTALLOWED"表示归档还没有应用完成,可以等待一段时间
如果日志全部应用了再查看角色转换状态
SQL>selectdatabase_role,switchover_statusfromv$database;
如果角色转换状态是TOPRIMARY,那么表示可以进行角色转换
执行从转主的命令,命令执行成功后,数据库的状态会变为mount
SQL>alterdatabasecommittoswitchovertoprimary; SQL>alterdatabaseopen;
26.打开新从库
在节点1和节点2上
SQL>startup
节点1上应用归档
SQL>alterdatabaserecovermanagedstandbydatabaseusingcurrentlogfiledisconnectfromsession;
节点3上切换归档
SQL>altersystemswitchlogfile;
27.验证同步
主库做修改
SQL>updatescott.empsetsal=3000; SQL>commit;
从库查询
SQL>select*fromscott.emp;
28.错误处理
如果发现日志传不到备库的话可以在主库通过以下命令查看错误原因
SQL>selectdest_id,dest_name,log_sequence,status,errorfromv$archive_dest;
如果报上面的错误的话,可以把归档开关重启一下即可
SQL>altersystemsetlog_archive_dest_state_3='defer'sid='*'; SQL>altersystemsetlog_archive_dest_state_3='enable'sid='*';
五、总结
1.dg的切换需要停掉所有的应用,并把数据库的所有连接全部kill掉,账号全锁,切换完成后再解锁
2.rac在切换时,只留一个活的实例,其它全部关闭
3.命令每执行一条,就留意返回的结果,并实时查看alert.log
总结
以上所述是小编给大家介绍的Oracle给rac创建单实例dg并做主从切换功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。