最近准备给一个生产项目上oracle11gDataGuard,主备均为oracle11.2.0.4软件,并在备库安装软件。这篇不讲述DataGuard的原理,只是oracle11gDataGuard搭建的详细过程。这次是生产库的RAC需要做一个DG,由于不知道SYS用户密码,需要取回密码太麻烦,故不能使用duplicate方式,使用rman全备-->还原控制文件-->mount数据库还原数据文件-->追加日志-->主备同步。搭建过程中只需要修改部分参数以及网络监听,故不需要停机可白天完成,下面开始进入主题。
1、生产环境信息
系统名称
系统平台
IP地址
数据库版本
数据量
XXXX系统
Linux
192.168.3.101
11.2.0.4.0
180G
192.168.3.102
主库:Linux环境下Oracle11.2.0.4RAC,使用ASM文件系统。
备库:Linux环境下Oracle11.2.0.4单机文件系统管理。
2、环境安装配置
2.1环境需求
2.2环境检查
su–oraclesqlplus/assysdbaSQL>selectnamefromv$version;
su–oraclesqlplus/assysdbaSQL>selectnamefromv$datafile;
su–oraclesqlplus/assysdbaSQL>archiveloglist;DatabaselogmodeArchiveModeAutomaticarchivalEnabledArchivedestination+ARCHOldestonlinelogsequence21Nextlogsequencetoarchive23Currentlogsequence23
主备分别执行:
telnetIPport若无法使用telnet工具,配置tns使用tnsping进行测试.
在主库tnsnames.ora中添加:
beijingstb=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.3.101)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=beijingstb)))beijing=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.3.105)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=beijing)))
在备库tnsnames.ora中添加:
主库:su–oracletnspingbeijingstb备库:su–oracletnspingbeijing
2.3备库安装Oracle数据库软件
2.3.1AIX环境参数配置
2.3.1.1确认系统包
lslpp-lbos.adt.baselslpp-lbos.adt.liblslpp-lbos.adt.libmlslpp-lbos.perf.libperfstatlslpp-lbos.perf.perfstatlslpp-lbos.perf.proctoolslslpp-lrsct.basic.rtelslpp-lrsct.compat.clients.rtelslpp-llibaio
2.3.1.2编辑hosts文件
vi/etc/hosts
2.3.1.3创建用户组和用户
2.3.1.4编辑环境变量
2.3.1.5修改内核文件
vi/etc/security/limits修改:default:fsize=-1core=2097151cpu=-1data=-1rss=-1stack=-1nofiles=-1
2.3.1.6修改内存参数
vmo-p-ominperm%=3vmo-p-omaxperm%=90vmo-p-omaxclient%=90vmo-p-olru_file_repage=0vmo-p-ostrict_maxclient=1vmo-p-ostrict_maxperm=0chdev-lsys0-ancargs=256chdev-lsys0-amaxuproc=16384
2.3.1.7修改网络参数
no-r-oipqmaxlen=512no-p-orfc1323=1no-p-osb_max=4194304no-p-otcp_recvspace=65536no-p-otcp_sendspace=65536no-p-oudp_recvspace=655360no-p-oudp_sendspace=65536
2.3.2HPUX环境参数配置
2.3.2.1编辑hosts文件
2.3.2.2创建用户组和用户
mkgroupid=300oinstallmkgroupid=301dbamkuserid=300pgrp=oinstallgroups=dbahome=/home/oracleoracle/usr/bin/chusercapabilities=CAP_NUMA_ATTACH,CAP_BYPASS_RAC_VMM,CAP_PROPAGATEoracle
2.3.2.3编辑环境变量
2.3.2.4修改端口范围
/usr/sbin/ndd-set/dev/tcptcp_smallest_anon_port9000/usr/sbin/ndd-set/dev/udpudp_smallest_anon_port9000
2.3.2.5设置core文件创建信息
mkdir-p/var/corescoreadm-g/var/cores/%f.%n.%p.%t.core-eglobal-eglobal-setid-elog-dprocess-dproc-setid
2.3.2.6添加ssh网络连接
mkdir/usr/localln-s/etc/ssh/usr/local/etcln-s/usr/bin/usr/local/bin
2.3.2.7修改配置参数
vi/etc/system添加:setnoexec_user_stack=1setsemsys:seminfo_semmni=100setsemsys:seminfo_semmns=1024setsemsys:seminfo_semmsl=256setsemsys:seminfo_semvmx=32767setshmsys:shminfo_shmmax=4294967295setshmsys:shminfo_shmmni=100
2.3.3Linux环境参数配置
2.3.3.1检查系统包
rpm-qa|grepbinutilsrpm-qa|grepcompat-libstdc++rpm-qa|grepelfutils-libelfrpm-qa|grepelfutils-libelf-develrpm-qa|grepexpatrpm-qa|grepgccrpm-qa|grepgcc-c++rpm-qa|grepglibcrpm-qa|grepglibc-commonrpm-qa|grepglibc-develrpm-qa|grepglibc-headersrpm-qa|greplibaiorpm-qa|greplibaio-develrpm-qa|greplibgccrpm-qa|greplibstdc++rpm-qa|greplibstdc++-develrpm-qa|grepmakerpm-qa|grepsysstatrpm-qa|grepunixODBCrpm-qa|grepunixODBC-devel
2.3.3.2编辑hosts文件(主机名和IP对应)
vi/etc/hosts--主机名建议小写,127.0.0.1localhost不能忽略不写127.0.0.1localhost
2.3.3.3修改配置参数
2.3.3.4修改环境变量
2.3.3.5配置内核参数
vi/etc/sysctl.conf添加:kernel.shmmax=4294967295kernel.shmall=2097152kernel.shmmni=4096kernel.sem=25032000100128fs.file-max=6815744net.ipv4.ip_local_port_range=900065500net.core.rmem_default=262144net.core.rmem_max=4194304net.core.wmem_default=262144net.core.wmem_max=1048576fs.aio-max-nr=1048576
2.3.3.6修改资源限制
vi/etc/security/limits.conf添加:gridsoftnproc2047gridhardnproc16384gridsoftnofile1024gridhardnofile65536oraclesoftnproc2047oraclehardnproc16384oraclesoftnofile1024oraclehardnofile65536
2.3.3.7修改登陆配置文件
vi/etc/pam.d/login添加:sessionrequiredpam_limits.so
2.3.4Oracle软件安装
执行./runInstaller出现安装界面(本节主要是参考,截图为RAC不过搭建MAA时也可参考此文)
1.选择只安装软件
2.选择跳过软件更新
3.勾选两个节点
4.从左边栏选择添加simpfiedchinese
5.选择企业版
6.设置oracle_base和软件安装目录
7.选择用户组
8.等待自动环境检查结束
9.点击“安装”
10.用root用户执行root.sh脚本
11.安装完成,点击“关闭”
2.3.5创建Oracle监听
使用netca命令打开图形界面,配置数据库默认监听,这里直接贴图就欧克没啥可说的了。
3、配置OracleDataGuard
3.1打开数据库强制日志
selectname,log_mode,force_loggingfromv$database;
alterdatabaseforcelogging;
3.2创建备库密码文件
scporapwbeijingoracle@192.168.3.101:$ORACLE_HOME/dbs/orapwbeijingstb
(有坑,一定要同步,RAC的话,需要将节点一同步至节点2再将节点1密码文件传至备库,密码文件、参数文件名的大小写需要一致,不然也会出问题)
3.3创建standby日志组
3.4修改主库参数文件
3.4.1直接修改参数文件方式
创建pfile文件:
3.4.2使用命令在数据库启动状态下进行参数修改:
将此pfile传至备库去修改,然后使用pfile启动到nomount
最最后一步记得重新创新spfile,下次启动时则可以自动使用spfile启动。
createspfilefrompfile;
3.5创建备库参数文件
scp/home/oracle/pfile20190729.oraoracle@192.168.3.101:/home/oracle/
3.6主备库添加网络服务名
3.7备库添加监听静态注册
SID_LIST_LISTENER=(SID_LIST=(SID_DESC=(SID_NAME=PLSExtProc)(ORACLE_HOME=/app/oracle/product/11.2.0/db_1)(PROGRAM=extproc))(SID_DESC=(GLOBAL_DBNAME=beijingstb)(ORACLE_HOME=/app/oracle/product/11.2.0/db_1)(SID_NAME=beijingstb)))------lsnrctlstatusSID_LIST_LISTENER=(SID_LIST=(SID_DESC=(GLOBAL_DBNAME=beijingstd)(ORACLE_HOME=/app/oracle/product/11.2.0/db_1)(SID_NAME=beijingstd)))
4、数据库初始化
4.1备份初始化恢复(两种方式)
4.1.1远程在线初始化(不知主库sys密码)
rmantargetsys/xxxxx@beijingauxiliarysys/xxxxxx@beijingstbduplicatetargetdatabaseforstandbyfromactivedatabase;
4.1.2利用rman备份片生成备库:
将备份传输至备库
[oracle@uprmanbk]$scpbeijing_3078169696_*192.168.3.105:/backup/backup20190730/
使用pfile启动至nomount状态,恢复控制文件
启动数据库至mount
指定catalog还原、恢复数据库
恢复过程中报错可忽略
--这里会报错,没有恢复归档日志所致,可忽略releasedchannel:c1releasedchannel:c2releasedchannel:c3releasedchannel:c4RMAN-00571:===========================================================RMAN-00569:===============ERRORMESSAGESTACKFOLLOWS===============RMAN-00571:===========================================================RMAN-03002:failureofrecovercommandat7/30/201920:55:02RMAN-06054:mediarecoveryrequestingunknownarchivedlogforthread2withsequence1595andstartingSCNof14566378244303
4.2启动备库日志应用
alterdatabaserecovermanagedstandbydatabasedisconnectfromsession;
或者使用实时的日志应用
alterdatabaserecovermanagedstandbydatabaseusingcurrentlogfiledisconnectfromsession;
查看备库同步情况
4.3取消应用日志然后启动备库为readonly(11g新特性)
ALTERDATABASERECOVERMANAGEDSTANDBYDATABASECANCEL;Alterdabataseopen;
使用实时的日志应用
4.4验证DataGuard状态
selectname,database_rolefromv$database;
在备库(Standby)查询,检查日志应用进程是否开启MRP0进程selectpid,process,statusfromv$managed_standby;SQL>selectpid,process,statusfromv$managed_standby;PIDPROCESSSTATUS-------------------------------21589ARCHCONNECTED21591ARCHCONNECTED21593ARCHCONNECTED21595RFSIDLE21597RFSIDLE21604RFSIDLE9809MRP0WAIT_FOR_LOG--MRP0即为归档应用进程。
SELECTSEQUENCE#,APPLIEDFROMV$ARCHIVED_LOGORDERBYSEQUENCE#;SQL>SELECTSEQUENCE#,APPLIEDFROMV$ARCHIVED_LOGORDERBYSEQUENCE#;SEQUENCE#APPLIED-------------------1410YES1411YES1412YES1413YES1414YES
4.5主备库切换测试
ALTERDATABASECOMMITTOSWITCHOVERTOPHYSICALSTANDBYwithsessionshutdown;
5、备库应急切换测试
模拟情景由于主库故障无法正常switchover,需要执行failover,强制备库切换为主库并接管业务
5.1停止应用恢复模式
alterdatabaserecovermanagedstandbydatabasefinishforce;
5.2转换备库为主库
alterdatabasecommittoswitchovertoprimary;
5.3重启数据库进行业务测试
alterdatabaseopen;
6.重新生成DataGuard备库
由于切换测试已经将DataGuard进行了failover类型的切换,所以无法进行逆向操作,只能重新进行DataGuard的数据初始化,重复第四章节即可。
最后,以上步骤我以整理成文档,公众号【JiekeXu之路】后台回复【ADG下载】获取百度云链接,习惯用github的也提供了下载链接,可自行回复关键字选择下载。