oracle rac集群 安装中的一台修复后可否直接上线

股票名称:天阳科技&nbsp&nbsp股票代码:835713
您当前所在位置:
Oracle RAC的机制与测试方法研究
信息来源:原创   发布时间: 日
Oracle 数据库系统是美国Oracle公司(甲骨文股份有限公司)提供的以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S体系结构的数据库之一,至今仍在数据库市场上占有主要份额。
1.1 RAC原理
对于每个软件相关从业人员来说,都有必要了解一下Oracle数据库,下面我将对Oracle RAC原理做如下介绍。
Oracle RAC是Oracle Real Application Cluster的简写,官方中文文档一般翻译为“真正应用集群”。RAC集群是由若干物理机组成,每个物理机为一个节点,这些节点间通过网线连接(也叫心跳网络)。每个节点上都运行一个实例,这些实例通过CRS(CRS通过一系列的进程和服务来保证集群的运行,提供高可用性)的协助,共同操作一个数据库,是一个典型的“多实例,单数据库”架构,数据库被所有节点共享、并行访问。共享存储是RAC架构的核心。数据库的数据文件、控制文件、参数文件、重做日志文件等等都要放到共享存储上,各节点可以对这些文件进行并行访问。如果其中某个节点发生故障,RAC能够将连接自动切换到另外一个节点上,无单点故障问题,从而实现应用的无缝切换。
下图为基本的RAC拓扑图:
2.RAC 特性
依上文所说,RAC是一堆特性应用的集合,下面重点介绍几个特性:VIP漂移、脑裂和IO隔离。
2.1 VIP漂移特性
这里有必要解释下RAC为什么要使用VIP地址:在TCP/IP四层模型中,TCP header中最重要的信息是源端口和目标端口,IP header 中记录的最重要的信息是源IP和目标IP地址,而数据库监听中记录了IP地址和端口号,位于应用层,所以客户端的连接请求只有发现TCP层超时才能感知数据库或者是监听出了问题。TCP/IP协议栈超时,其时间阀值由OS内核决定,每个操作心跳的阀值不相同。为了解决TCP/IP协议栈超时问题,Oracle RAC引进了VIP。
VIP 和一般的IP不同的是:一般的IP是固定到物理网卡上的,VIP是浮动的。一旦某个节点出现了故障,其上运行的VIP会漂移到活着的节点上,但是活着的节点上的监听里找不到该VIP的地址。应用程序立马会感知到,并向其他VIP地址发起连接请求。捕获错误的时间大大缩短。
VIP漂移原理:假设有两个节点的RAC,分别是节点1和节点2。正常运行时节点1上有VIP1,节点2上有VIP2 ;当节点1发生故障,RAC 会做如下操作:
1) CRS 在检测到节点1异常后,会触发Clusterware 重构,最后把节点1剔除集群,由节点2组成新的集群。 &
2)RAC的Failover 机制会把节点1的VIP转移到节点2上(也就是VIP漂移),这时节点2的PUBLIC 网卡上就有3个IP 地址: VIP1、VIP2、PUBLIC IP2。
3)用户对VIP1的连接请求会被IP层路由转到节点2。
4)因为在节点2上有VIP1的地址,所有数据包会顺利通过路由层、网络层、传输层。 & &
5)但是节点2上只监听VIP2和PUBLIC IP2的两个IP地址。并没有监听VIP1,故应用层没有对应的程序接收这个数据包,这个错误立即被捕获。
6)客户端能够立即接收到这个错误,之后客户端会重新发起向VIP2的连接请求。VIP2就自动接管交易处理。
在集群环境中,节点间需要心跳机制了解彼此的健康状况,假如心跳出了故障,就会出现脑裂。这时每个节点还在正常运行,每个节点都会认为其他节点都不复存在,自己是唯一的幸存者,之后就会控制整个集群。数据是共享的,如果每个节点都想控制独享,势必会破坏共享数据的完整性和一致性。这样的状况就是脑裂。
为了解决这个脑裂问题,通过投票机制,获得高票数或是最早到达的获得投票,幸存,其他节点被踢出。Oracle RAC中的Voting Disk用来记录节点间成员状态,出现脑裂时,仲裁哪个节点获得控制权,其他的节点被剔除。
2.3 IO隔离
IO隔离是上一个问题的延伸,投票机制虽然已经判断出哪个成节点该获得集群掌控权,哪些节点被剔除,但仅仅这样做是不够的,还必须保证被剔除的节点不能操作共享数据。为了限制已踢出节点对共享数据的访问,必须进行IO隔离。Oracle RAC采取的是直接重启故障节点。
3.RAC测试案例
上文介绍了RAC的原理以及三个特性,下面我将重点讲解“如何在测试中测试RAC的有效性”。
3.1 测试案例1名称:RAC有效性测试-异常关机
测试目的:
验证系统数据库RAC中的一个节点发生故障后,另一个节点能否自动接管交易处理;以及故障恢复后,节点处理能力能否恢复正常。
测试方法:
1)使用HP LoadRunner模拟客户发压,按照混合模型的比例,以被测试系统最大处理能力的50%作为负载压力向被测试系统施压,待系统稳定运行5分钟;
2)在某一台数据库服务器上手工执行halt -q(不同OS命令有区别),模拟异常宕机;
3)继续稳定运行5分钟;
4)恢复故障节点,同时启动该节点上的Oracle 实例;
5)继续稳定运行5分钟;
6)执行回切操作。
预期测试结果:
1)步骤3后被测试系统数据库RAC切换成功,切换过程中,交易响应时间延长
2)切换后VIP漂移到另一个实例;
3)交易在1分钟内能够100%恢复正常,交易错误率、响应时间均满足测试指标,各主机资源使用正常;
4)步骤5后故障节点恢复后,该节点实例不接管交易,连接也不恢复,该实例不处理交易;
5)步骤7后执行回切操作后,服务器状态恢复为初始状态,交易由原主机处理并稳定运行。
实际测试结果:
LoadRunner总体趋势图
节点1: CPU趋势图
节点2:CPU趋势图
查看VIP是否漂移,当节点1故障后,查看节点2的网卡上有节点1的VIP地址,说明节点1的VIP地址漂移到节点2的网卡上。
测试结果分析:
从上述测试结果的图表和日志截图可以清楚的看到:节点1模拟宕机后,RAC切换成功,节点1的VIP 漂移至节点2;TPS下降,交易有少量失败,40秒内TPS完全恢复。
恢复节点1后,交易由原主机节点1处理并稳定运行。
测试结果符合预期结果,测试结果通过。
3.2 测试案例2名称:RAC有效性测试-停实例(shutdown abort)
测试目的:
考察系统在一定并发下,手动异常停止一个数据库实例后,另一个数据库实例能否自动接管交易处理;以及故障恢复后,节点处理能力能否恢复正常。
测试方法:
1)使用测试工具LoadRunner发压,按照混合测试场景中交易的比例,以被测试系统最大处理能力的50%作为负载压力向被测试系统施压,稳定运行5分钟;
2)手动(shutdown abort)停止一个数据库实例,场景持续运行5分钟;
3)启动停止的数据库实例,场景持续运行5分钟;
4)执行回切操作,场景持续运行5分钟。
预期测试结果:
1.步骤2手动停止数据库实例后,另一节点实例会很快接收请求(Failover机制生效)。切换后停掉实例的节点,CPU、IO下降;正常接收交易实例的节点,CPU、IO上升。MTTR(平均失效恢复时间)小于1分钟,失效交易处理能力恢复水平99.99%;
2.步骤3重启停止节点实例后,连接正常,与切换后保持一致;
3.执行回切操作后,服务器状态恢复为初始状态,交易由原主机处理, 并稳定运行。
实际测试结果:
LoadRunner总体趋势图
节点1:128.196.36.22 CPU利用率图
节点2:128.196.36.25 &CPU利用率图
测试结果分析:
1)手动停止节点1实例后,节点2实例会很快(2秒内)接收请求。停掉实例的节点1 ,CPU、IO下降,接收交易的节点2,CPU、IO上升;交易有少量失败,在20秒内TPS完全恢复;
2)重启节点1实例后,AP为长连接,该实例的连接不恢复;交易不受影响;
3)执行回切操作后,TPS下降,交易有少量失败,40秒内TPS完全恢复,交易由原主机节点1处理,并稳定运行;
4)实际测试结果符合预期结果,测试结果通过。
3.3 测试案例3名称:AC有效性测试-心跳网络异常
测试目的:
验证数据库RAC中的心跳网络(主备网卡置down)异常后,另一节点能否自动接管交易处理;以及故障恢复后,节点处理能力能否恢复正常。
测试方法:
1)使用测试工具LoadRunner发压,按照混合模型的比例以被测试系统最大处理能力的50%作为负载压力向被测试系统施压;
2)场景平稳运行5分钟时,将节点1的网卡置down,观察各交易错误率、处理能力、响应时间及各主机资源情况;验证VIP是否可以正常切换;
3)恢复该节点心跳主备网卡,重启CRS,交易稳定运行5分钟,观察被测试系统交易恢复情况;
4)场景结束,分析和记录测试结果。
预期测试结果:
1)步骤2后,实例名权重大的实例重启,主机不重启;
2)步骤3后,CRS能正常启动,数据库可正常启动并加入RAC。
实际测试结果:
节点1:CPU趋势图
节点2:CPU趋势图
测试结果分析
1)宕掉节点1的心跳主备网卡,出现脑裂,节点2实例重启,CRS重启,节点2的VIP漂移到节点1;TPS下降,交易有少量失败,在50秒内TPS完全恢复至100%。
2)节点1心跳主备网卡故障恢复后,VIP回漂,数据库可正常启动并加入RAC,交易不受影响。
3)实际测试结果符合预期结果,测试结果通过。
从以上三个案例可以看出:如果其中某个节点发生故障,RAC能够自动切换到另外一个节点上,无单点故障问题。
天阳科技微信公众号二维码
Copyright@.cn all rights reserved&nbsp&nbsp2014&nbsp天阳科技版权所有。&nbsp&nbsp京ICP备050453号&nbsp&nbspTEL: 010-用Shell脚本在推出的RAC节点上批量部署32个Oracle11gR2 RAC备份恢复案例场景的方法PART1 - 推酷
用Shell脚本在推出的RAC节点上批量部署32个Oracle11gR2 RAC备份恢复案例场景的方法PART1
5.用Shell脚本在推出的节点上批量部署32个Oracle11gR2RAC备份恢复案例场景
5.1备份恢复案例场景模拟脚本工作原理
基本工作原理是:读者按照以上推送设置的要求安装好成套Oracle11gR2RAC环境后,复用以上的PXE推送端主机作为部署平台,在每套推出的Oracle11gR2RAC环境中部署32个Oracle11gR2RAC备份恢复案例场景脚本。脚本基于网络执行并批量部署;脚本同时支持下载到每一台Oracle11gR2RAC节点主机本地运行。脚本能模拟和评测每一套环境每一个备份恢复场景的恢复结果。
32个备份恢复场景模拟脚本调用一个公共子程序库“bclcustom-subprogram”。在该公共子程序库里面编写了各个备份恢复场景标准步骤。32个备份恢复场景模拟脚本实际上是根据场景模拟需要组合这些标准步骤来完成相应的场景模拟的。
公共子程序库“bclcustom-subprogram”如下:
###0.1NormalStructureBegin
echo“———————————————-LAB$1———————————————-”
echo“———————————————-LAB$1———————————————-”
echo“******************”
echo“你的主机信息如下:”
echo“******************”
ifconfigeth0|head-n2|tail-n1|cut-f2-d:|cut-f1-d‘‘
/u01/app/11.2.0/grid/bin/crs_stat-t
v_dbname=`cat/home/oracle/dbname|tr-d[:blank:]`
if[-f/u01/app/11.2.0/grid/dbs/hc_+ASM1.dat]
su–oracle-c“sqlplus/nolog”&&!
@/home/oracle/ptable.
v_dbname=`cat/home/oracle/dbname|tr-d[:blank:]`
if[-f/u01/app/11.2.0/grid/dbs/hc_+ASM1.dat]
su–oracle-c“sqlplus/nolog”&&!
@/home/oracle/ttable.
/u01/app/11.2.0/grid/bin/crs_stat-t
v_dbname=`cat/home/oracle/dbname|tr-d[:blank:]`
if[-f/u01/app/11.2.0/grid/dbs/hc_+ASM1.dat]
su–oracle-c“sqlplus/nolog”&&!
connsys/oracle_4U@$v_dbnameassysdba
@/home/oracle/rtable.
rm-f/home/oracle/ptable.sql
rm-f/home/oracle/ctable.sql
rm-f/home/oracle/ttable.sql
rm-f/home/oracle/rtable.sql
rm-f/usr/bin/bclcustom.sh
rm-f/home/oracle/bclcustom-subprogram
sub_clearing_excludertable(){
rm-f/home/oracle/ptable.sql
rm-f/home/oracle/ctable.sql
rm-f/home/oracle/ttable.sql
rm-f/usr/bin/bclcustom.sh
rm-f/home/oracle/bclcustom-subprogram
###0.1NormalStructureEnd
###0.2DatabaseOperationBegin
##0.2.1DatabaseSRVCTlOperationBegin
sub_shutdowning_normal(){
v_dbname=`cat/home/oracle/dbname|tr-d[:blank:]`
if[-f/u01/app/11.2.0/grid/dbs/hc_+ASM1.dat]
su–oracle-c“/u01/app/oracle/product/11.2.0/dbhome_1/bin/srvctlstopdatabase-d$v_dbname”
##0.2.1DatabaseSRVCTlOperationEnd
##0.2.2DatabaseASMOperationBegin
su–grid-c“exportORACLE_SID=+ASM1;exportORACLE_HOME=/u01/app/11.2.0/asmcmd“&&!&/home/oracle/asm
v_path1=`cut-f2-d‘+’/home/oracle/asm|tr-d[:blank:]`
su–grid-c“exportORACLE_SID=+ASM1;exportORACLE_HOME=/u01/app/11.2.0/asmcmd“&&!
##0.2.2DatabaseASMOperationEnd
##0.2.3DatabaseSQLOperationBegin
sub_startuping_node1mount(){
if[-f/u01/app/11.2.0/grid/dbs/hc_+ASM1.dat]
su–oracle-c“sqlplus/nolog”&&!
v_dbname=`cat/home/oracle/dbname|tr-d[:blank:]`
if[-f/u01/app/11.2.0/grid/dbs/hc_+ASM1.dat]
su–oracle-c“sqlplus/nolog”&&!
connsys/oracle_4U@$v_dbnameassysdba
@/home/oracle/ctable.
sub_scripting_controlfile_nocatalog(){
v_dbname=`cat/home/oracle/dbname|tr-d[:blank:]`
echo“Nextmomentcontrolscriptisgoingtobecreate……”
echo“Displaythespidnumberofsessionhere:”
if[-f/u01/app/11.2.0/grid/dbs/hc_+ASM1.dat]
su–oracle-c“sqlplus/nolog”&&!
connsys/oracle_4U@$v_dbnameassysdba
selectinstance_numberfromv\$
selectspidfromv\$processp,v\$sessions,v\$mystatmwherep.addr=s.paddrandm.sid=s.sidandrownum=1;
alterdatabaseback
sub_offlining_users_immediate(){
v_dbname=`cat/home/oracle/dbname|tr-d[:blank:]`
if[-f/u01/app/11.2.0/grid/dbs/hc_+ASM1.dat]
su–oracle-c“sqlplus/nolog”&&!
connsys/oracle_4U@$v_dbnameassysdba
selectinstance_numberfromv\$
altertablespaceu
sub_offlining_tbsocp05_test_immediate(){
v_dbname=`cat/home/oracle/dbname|tr-d[:blank:]`
if[-f/u01/app/11.2.0/grid/dbs/hc_+ASM1.dat]
su–oracle-c“sqlplus/nolog”&&!
connsys/oracle_4U@$v_dbnameassysdba
selectinstance_numberfromv\$
altertablespacetbsocp05_
sub_shutdowning_abort(){
v_dbname=`cat/home/oracle/dbname|tr-d[:blank:]`
if[-f/u01/app/11.2.0/grid/dbs/hc_+ASM1.dat]
su–oracle-c“/u01/app/oracle/product/11.2.0/dbhome_1/bin/srvctlstopdatabase-d$v_dbname-oabort”
sub_altering_default_tablespace(){
v_dbname=`cat/home/oracle/dbname|tr-d[:blank:]`
if[-f/u01/app/11.2.0/grid/dbs/hc_+ASM1.dat]
su–oracle-c“sqlplus/nolog”&&!
alterdatabasedefa
v_dbname=`cat/home/oracle/dbname|tr-d[:blank:]`
if[-f/u01/app/11.2.0/grid/dbs/hc_+ASM1.dat]
echo“***FROMTHENON:DROP***”
su–oracle-c“sqlplus/nolog”&&!
droptablespaceusersincluding
##0.2.3DatabaseSQLOperationEnd
##0.2.4DatabaseRMANOperationBegin
#sub_backingup_controlfile_nocataloghas$1
sub_backingup_controlfile_nocatalog(){
v_dbname=`cat/home/oracle/dbname|tr-d[:blank:]`
if[-f/u01/app/11.2.0/grid/dbs/hc_+ASM1.dat]
su–oracle-c“rmantargetsys/oracle_4U@$v_dbname”&&!
backuptag“$1″
sub_deleting_backup_controlfile_nocatalog(){
v_dbname=`cat/home/oracle/dbname|tr-d[:blank:]`
if[-f/u01/app/11.2.0/grid/dbs/hc_+ASM1.dat]
su–oracle-c“rmantargetsys/oracle_4U@$v_dbname”&&!
deletenopromp
deletenopro
v_dbname=`cat/home/oracle/dbname|tr-d[:blank:]`
v_ip=$(ifconfig|grep’192\.168\.0′|head-n1|cut-d.-f4|cut-d‘‘-f1)
grep‘LABSADD’/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
echo””&&/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
echo“rcat=”&&/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
echo”(DESCRIPTION=”&&/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
echo”(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.90)(PORT=1521))”&&/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
echo”(CONNECT_DATA=”&&/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
echo”(SERVER=DEDICATED)”&&/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
echo”(SERVICE_NAME=)”&&/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
echo”)”&&/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
echo”)”&&/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
echo””&&/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
echo‘#LABSADD’&&/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
if[-f/u01/app/11.2.0/grid/dbs/hc_+ASM1.dat]
echo“***ConnectingCatalog***”
su–oracle-c“rmantargetsys/oracle_4U@$v_dbnamecatalogu90/oracle_4U@rcat”&&!
##0.2.4DatabaseRMANOperationEnd
##0.2.5DatabaseSQL/RMANCombinedOperationBegin
#sub_onlining_users_nocataloghas$1
sub_onlining_users_nocatalog(){
v_dbname=`cat/home/oracle/dbname|tr-d[:blank:]`
if[-f/u01/app/11.2.0/grid/dbs/hc_+ASM1.dat]
su–oracle-c“sqlplus/nolog”&&!
connsys/oracle_4U@$v_dbnameassysdba
selectinstance_numberfromv\$
echo“***AFTERTABLESPACEONLINE***”
echo“***BACKUPAGAIN***”
if[-f/u01/app/11.2.0/grid/dbs/hc_+ASM1.dat]
su–oracle-c“rmantargetsys/oracle_4U@$v_dbname”&&!
backuptag“$1″
#sub_offlining_users_nocataloghas$1
sub_offlining_users_nocatalog(){
v_dbname=`cat/home/oracle/dbname|tr-d[:blank:]`
if[-f/u01/app/11.2.0/grid/dbs/hc_+ASM1.dat]
su–oracle-c“sqlplus/nolog”&&!
connsys/oracle_4U@$v_dbnameassysdba
selectinstance_numberfromv\$
if[-f/u01/app/11.2.0/grid/dbs/hc_+ASM1.dat]
su–oracle-c“rmantargetsys/oracle_4U@$v_dbname”&&!
backuptag“$1″
#sub_readingwrite_users_nocataloghas$1
sub_readingwrite_users_nocatalog(){
v_dbname=`cat/home/oracle/dbname|tr-d[:blank:]`
if[-f/u01/app/11.2.0/grid/dbs/hc_+ASM1.dat]
su–oracle-c“sqlplus/nolog”&&!
connsys/oracle_4U@$v_dbnameassysdba
selectinstance_numberfromv\$
echo“***AFTERTABLESPACEREWRITE***”
echo“***BACKUPAGAIN***”
if[-f/u01/app/11.2.0/grid/dbs/hc_+ASM1.dat]
su–oracle-c“rmantargetsys/oracle_4U@$v_dbname”&&!
backuptag“$1″
#sub_readingonly_users_nocataloghas$1
sub_readingonly_users_nocatalog(){
v_dbname=`cat/home/oracle/dbname|tr-d[:blank:]`
if[-f/u01/app/11.2.0/grid/dbs/hc_+ASM1.dat]
su–oracle-c“sqlplus/nolog”&&!
connsys/oracle_4U@$v_dbnameassysdba
selectinstance_numberfromv\$
if[-f/u01/app/11.2.0/grid/dbs/hc_+ASM1.dat]
su–oracle-c“rmantargetsys/oracle_4U@$v_dbname”&&!
backuptag“$1″
sub_deleting_early_online_backup_users(){
v_dbname=`cat/home/oracle/dbname|tr-d[:blank:]`
if[-f/u01/app/11.2.0/grid/dbs/hc_+ASM1.dat]
echo“***DELETETHEEARLYONLINEBACKUPOFUSERS***”
echo“***DELETETHEEARLYREADWRITEBACKUPOFUSERS***”
su–oracle-c“rmantargetsys/oracle_4U@$v_dbname”&&!
deletenopromptbac
deletenopromptc
sub_deleting_backup_controlfile_nocatalog
##0.2.5DatabaseSQL/RMANCombinedOperationEnd
###0.2DatabaseOperationEnd
从以上脚本可以看出,许多实验需要catalog恢复目录。在脚本中规定恢复目录存在于一台IP为192.168.0.90的主机上,服务名为“”,监听端口为:“1521”。恢复目录用户名为“u90”,密码为“oracle_4U”。请事先准备好该设备。
5.2在PXE推送端主机上安装备份恢复案例场景模拟脚本
为了方便读者,作者编写了一个一步到位的安装程序“bcl-install”。此程序在PXE推送端主机上安装。
“bcl-install”包含的主要内容就是上面的子程序。“bcl-install”程序实际上是一个shell编程的自解压安装包,因此不论操作系统是32位和64位;也不论是在6系EnterpriseLinux还是在5系EnterpriseLinux上都能运行。
[root@server1~]#./bcl-install
5.3在Oracle11gR2RAC环境节点主机部署备份恢复案例场景模拟脚本
现在准备开始在Oracle11gR2RAC环境节点主机部署备份恢复案例场景模拟脚本。
5.3.1在PXE推送端主机上准备IP地址列表
为了指定进行备份恢复案例场景模拟的Oracle11gR2RAC环境节点主机列表,请编写“/tmp/botang-config-xshare/course/general/v_botang_all_ipsshd_open”文件,把每套要被模拟备份恢复场景的Oracle11gR2RAC环境节点主机的IP地址以空格隔开写成一行,以192.168.0.33和192.168.0.34举例如下:
[root@server1~]#cd/tmp/botang-config-xshare/course/general
[root@server1general]#catv_botang_all_ipsshd_open
192.168.0..34
5.3.2在PXE推送端主机上初始化实验脚本
[root@server1~]#bcl–RACGRID11g13newlabs
Thecourseforyoutodecide:?
****************************************************************************************************
1.以下大多数实验要求数据库处于归档模式,一些实验要求有全库备份,请一定注意users表空间要有单独的备份通道(使它自己包含在它自己的备份集中)。
2.把压缩包中各个实验脚本中的*.sql和bclcustom-subprogram放在/home/oracle/下面,以root身份运行Cbclcustom.sh(可以放在任何地方),即可实施破坏并作实验。
3.sys的密码一定要叫做oracle_4U。
4.实验环境的grid和db_home1一定要按照课程环境安装。
5.唯独实验6b和实验15需要在执行完成Cbclcustom.sh之后运行各自文件夹下面的begin-realpost。作进一步破坏,请打开begin-realpost阅读一下就明白了。
****************************************************************************************************
RACGRID11g13.ori/7a_当前控制文件和数据文件完好_日志文件全部损坏_正常关机不完全恢复_数据不丢_不需备份/
RACGRID11g13.ori/7a_当前控制文件和数据文件完好_日志文件全部损坏_正常关机不完全恢复_数据不丢_不需备份/begin-real
RACGRID11g13.ori/7a_当前控制文件和数据文件完好_日志文件全部损坏_正常关机不完全恢复_数据不丢_不需备份/bclcustom-subprogram
在PXE推送端主机上初始化实验脚本的目的是:解压缩脚本压缩包“/usr/sbin/botang-config-lesson.d/CUSTOM/RACGRID11g13.ori.tgz”到“/usr/sbin/botang-config-lesson.d/CUSTOM/RACGRID11g13.ori”,供调用。
“/usr/sbin/botang-config-lesson.d/CUSTOM/RACGRID11g13.ori”里每一个文件夹,就是一个备份恢复场景模拟脚本。举例如下:
[root@station90~]#cd/usr/sbin/botang-config-lesson.d/CUSTOM/RACGRID11g13.ori/14_删除表空间不完全恢复
[root@station9014_删除表空间不完全恢复]#ls
bclcustom-subprogrambegin-realctable.sqlPbclcustom.shRbclcustom.shttable.sqlvsftpdrestart-prepare
begin-prepareCbclcustom.shendptable.sqlrtable.sqlvsftpdrestart-endvsftpdrestart-real
[root@station9014_删除表空间不完全恢复]#
“bcl”程序在批量部署时,自动完成以下四个阶段工作:
第一阶段:拷贝该场景下“*.sql和“bclcustom-subprogram”到Oracle11gR2RAC环境节点主机的“/home/oracle”下。
第二阶段:通过ssh调用该场景下的“Pbclcustom.sh”在Oracle11gR2RAC环境节点主机运行,其标准输出收集起来形成ftp页面:“ftp://192.168.0.245/pub/bclresult-xx/prepare”,供查阅。“Pbclcustom.sh”会自动判断奇数/偶数节点,会在奇数执行而绕过偶数节点。“Pbclcustom.sh”的主要任务是判断Oracle11gR2RAC环境节点主机的健康状态。
第三阶段:通过ssh调用该场景下的“Cbclcustom.sh”在Oracle11gR2RAC环境节点主机运行,其标准输出收集起来形成ftp页面:“ftp://192.168.0.245/pub/bclresult-xx/real”,供查阅。“Cbclcustom.sh”会自动判断奇数/偶数节点,会在奇数执行而绕过偶数节点。“Cbclcustom.sh”的主要任务是在Oracle11gR2RAC环境节点主机搞破坏,模拟场景。
“Cbclcustom.sh”程序会调用“ctable.sql”脚本,后者会在每套Oracle11gR2RAC环境节点主机该场景中建立一个表名为“t”打头加上随机数的表。这样保证了每套Oracle11gR2RAC环境节点在本场景中表名的唯一性。只有现场恢复了,才能找到该表。使得这套程序能适用考试和面试。
“ctable.sql”脚本会伴随着日志切换插入该表“1、2、3、4和5”共5行数值。实验最后的“Rbclcustom.sh”脚本会记住每套Oracle11gR2RAC环境节点主机该场景中建立的那个表,并查询其数值,评测该备份恢复场景的恢复结果。如该场景是完全恢复能找到“1、2、3、4和5”5行数值;如场景是不完全恢复而且无法找全数值,由于“4和5”两个数值对应的redologentry是在丢失或不可用的日志上,只能找到“1、2和3”(在rac环境下,由于日志thread的交替,可能数值3也找不到)。每个场景的“ctable.sql”都由公共子程序库“bclcustom-subprogram”中的子程序sub_creating
调用,但是每个场景的“ctable.sql”都不一样,即在数据库中做的场景特定操作。
对于编号为“6b”的实验,系统还需自动多走一步:在每套Oracle11gR2RAC环境节点主机上删除特定日志(每套系统都会判断是哪一个日志),其标准输出收集起来替换盖掉日志序列号形成ftp页面:“ftp://192.168.0.245/pub/bclresult-xx/real-post”。同时暂时锁住“ftp://192.168.0.245/pub/bclresult-xx/real”。
对于编号为“15”的实验,系统还需自动多走两步:在每套Oracle11gR2RAC环境节点主机上删除特定日志(每套系统都会判断是哪一个日志),并将该场景恢复掉,制造出一个新incarnation–“3号化身”,以便让用户之后穿越incarnation恢复到“2号化身”。其标准输出收集起来形成ftp页面:“ftp://192.168.0.245/pub/bclresult-xx/real-post”。
第四阶段:通过ssh调用该场景下的“Rbclcustom.sh”在Oracle11gR2RAC环境节点主机运行,其标准输出收集起来形成ftp页面:“ftp://192.168.0.245/pub/bclresult-xx/end”,供查阅。“Rbclcustom.sh”会自动判断奇数/偶数节点,会在奇数执行而绕过偶数节点。如前所述,“Rbclcustom.sh”的主要任务是在Oracle11gR2RAC环境节点主机评测该备份恢复场景的恢复结果。
特殊的情况:对于每一个场景,要做实验的用户也可自行把压缩包中对应的实验脚本中的“*.sql”和“bclcustom-subprogram”放在Oracle11gR2RAC环境节点主机“/home/oracle/”下面,自行以root身份依次运行“Pbclcustom.sh”自检环境–&“Cbclcustom.sh”实施破坏并作实验–&最后运行“Rbclcustom.sh”收集实验结果。所不同的是:标准输出直接在屏幕上,从“prepare”到“real”到“end”的整个过程表名都是“edu234”(而不是随机表名)。
6.Oracle11gR2RAC环境“dd”和“rever”,在后续特定实验前通过“rever”初始化环境
在开始实验之前,显然要求每套Oracle11gR2RAC环境都要根据推送时的标准安装好。并都已经开启归档、已经做好rman全库备份(无论磁带机或磁盘备份)。为了方便标识,建议在每套Oracle11gR2RAC环境中都建一张表:
SQL&conn/assysdba
SQL&createtablesys.tname(avarchar2(50));
SQL&insertintosys.tnamevalues(‘用户ID’);
如果读者需要连续做实验,在后续特定实验前,为了避免实验间连续恢复产生的过度复杂性,建议读者通过冷备份rever初始化环境。
每套Oracle11gR2RAC环境,在做好以上所有工作并准备做第一个实验之前,请手工冷备份整套环境。以“oracle”用户在每套Oracle11gR2RAC环境第一台节点主机上运行:“/home/oracle/copy.sh”能达到手工冷备份整套环境的目的。以后可以在任何时候,通过以“oracle”用户运行“/home/oracle/rever.sh”初始化环境。如果该套Oracle11gR2RAC环境使用磁带机做备份,请以“root”身份运行“copytape-root.sh”备份虚拟磁带库。当以“oracle”用户运行“/home/oracle/rever.sh”初始化环境后,都要再以“root”身份运行“revertape-root.sh”初始化虚拟带库。并重新注册catalog。
通过在PXE推送端主机上运行:
[root@server1~]#bcl–RACGRID11g130
以上命令把脚本“copy.sh”和“rever.sh”,直接推到每套Oracle11gR2RAC环境第一台节点主机“/home/oracle”之下。同时脚本“copy.sh”和“rever.sh”在PXE推送端主机ftp站点:“
”也可下载到。“copytape-root.sh”和“revertape-root.sh”虽然在bcl程序中不提供,但是它们的内容列在脚本“copy.sh”和“rever.sh”之后。有需要的,将其编写在每套Oracle11gR2RAC环境所有节点主机上(任何路径),以“root”身份并运行。
###0SubprogramSectionBegin
v_start_time=$(date+%”s”)
SUBANS=`echo$SUBANS|tr-d“[:blank:]“`
#Line15begin:Dealwith$SUNANS:
until[$SUBANS==&y&-o$SUBANS==&n&]
echo“Thisquestionshouldbeansweredeitherwith\”y\”or\”n\”.”
until[$(echo$SUBCON1|tr-d&[:blank:]“)==$(echo$SUBCON2|tr-d“[:blank:]“)]
sub_answer“Yourinputis:\”$SUBCON1\”.Areyousure?(y/n)”
if[-z$(echo$SUBCON1|tr-d&[:blank:]“)]
v_dbname=`cat/home/oracle/dbname2&/dev/null|tr-d[:blank:]`
v_first_node=`cat/home/oracle/nodeinfo2&/dev/null|head-n1`
v_second_node=`cat/home/oracle/nodeinfo2&/dev/null|tail-n1`
###0SubprogramSectionEnd
#1DecisionRootorOracleBegin
echo“PleaseloginasoracleNOTroot.”
#1DecisionRootorOracleEnd
if[-f/u01/app/11.2.0/grid/dbs/hc_+ASM1.dat]
sub_confirm“Pleasespecifythedatabasename:?”
echo$v_dbname&/home/oracle/dbname
sub_confirm“Pleasespecifythefirstnodename:?”
sub_confirm“Pleasespecifythesecondnodename:?”
v_second_node=$SUBCON1
srvctlstopinstance-d$v_dbname-i${v_dbname}1
sudo/u01/app/11.2.0/grid/bin/crs_stat-t
srvctlstopinstance-d$v_dbname-i${v_dbname}2
sudo/u01/app/11.2.0/grid/bin/crs_stat-t
sudo/u01/app/11.2.0/grid/bin/crsctlstophas
ssh$v_second_node“sudo/u01/app/11.2.0/grid/bin/crsctlstophas”
/usr/bin/stopdb&&/dev/null
if[-f/u01/app/11.2.0/grid/dbs/hc_+ASM1.dat]
if[!-d/u01/data/backup]
sub_confirm“Pleaseinputthefullpathofdirectorytoholdthe11rawdevicesbackupofRAC,needabout18G(oracleusershouldhave!!!WRITEPERMISSION!!!init):?”
rm-rf$SUBCON1/backup2&/dev/null
mkdir-p$SUBCON1/backup2&/dev/null
chownoracle:oinstall$SUBCON1/backup
#rm-rf/u01/app/oracle/man_recovery_area/orcl/backup/
mkdir-p/u01/app/oracle/man_recovery_area/orcl2&/dev/null
#4BackupImportantBegin
if[-f/u01/app/11.2.0/grid/dbs/hc_+ASM1.dat]
foriin`ls/dev/oracleasm/disks`
ddif=/dev/oracleasm/disks/$iof=$SUBCON1/backup/$i.imgbs=4M&
#5BackupMiscellaneousBegin
#5BackupMiscellaneousEnd
if[-f/u01/app/11.2.0/grid/dbs/hc_+ASM1.dat]
sudo/u01/app/11.2.0/grid/bin/crsctlstarthas
ssh$v_second_node“sudo/u01/app/11.2.0/grid/bin/crsctlstarthas”
v_end_time=$(date+%”s”)
echo“总共花了:$[$v_end_time-$v_start_time]秒。再等90秒为你启动集群。”
sudo/u01/app/11.2.0/grid/bin/crsctlstartresourceora.DATA.dg
sudo/u01/app/11.2.0/grid/bin/crsctlstartresourceora.FRA.dg
srvctlstartdatabase-d$v_dbname
sudo/u01/app/11.2.0/grid/bin/crs_stat-t
###0SubprogramSectionBegin
v_start_time=$(date+%”s”)
SUBANS=`echo$SUBANS|tr-d“[:blank:]“`
#Line15begin:Dealwith$SUNANS:
until[$SUBANS==&y&-o$SUBANS==&n&]
echo“Thisquestionshouldbeansweredeitherwith\”y\”or\”n\”.”
until[$(echo$SUBCON1|tr-d&[:blank:]“)==$(echo$SUBCON2|tr-d“[:blank:]“)]
sub_answer“Yourinputis:\”$SUBCON1\”.Areyousure?(y/n)”
if[-z$(echo$SUBCON1|tr-d&[:blank:]“)]
v_dbname=`cat/home/oracle/dbname2&/dev/null|tr-d[:blank:]`
v_first_node=`cat/home/oracle/nodeinfo2&/dev/null|head-n1`
v_second_node=`cat/home/oracle/nodeinfo2&/dev/null|tail-n1`
###0SubprogramSectionEnd
#1DecisionRootorOracleBegin
echo“PleaseloginasoracleNOTroot.”
#1DecisionRootorOracleEnd
if[-f/u01/app/11.2.0/grid/dbs/hc_+ASM1.dat]
v_dbname=`cat/home/oracle/dbname|tr-d[:blank:]`
v_first_node=`cat/home/oracle/nodeinfo|head-n1|tr-d[:blank:]`
v_second_node=`cat/home/oracle/nodeinfo|tail-n1|tr-d[:blank:]`
srvctlstopinstance-d$v_dbname-i${v_dbname}1-oabort
sudo/u01/app/11.2.0/grid/bin/crs_stat-t
srvctlstopinstance-d$v_dbname-i${v_dbname}2-oabort
sudo/u01/app/11.2.0/grid/bin/crs_stat-t
sudo/u01/app/11.2.0/grid/bin/crsctlstophas
ssh$v_second_node“sudo/u01/app/11.2.0/grid/bin/crsctlstophas”
if[-f/u01/app/11.2.0/grid/dbs/hc_+ASM1.dat]
if[!-d/u01/data/backup]
sub_confirm“Pleaseinputthefullpathofdirectorytoholdthe11rawdevicesbackupofRAC,needabout18G:?”
foriin`ls/dev/oracleasm/disks`
ddof=/dev/oracleasm/disks/$iif=$SUBCON1/backup/$i.imgbs=4M&
if[-f/u01/app/11.2.0/grid/dbs/hc_+ASM1.dat]
sudo/u01/app/11.2.0/grid/bin/crsctlstarthas
ssh$v_second_node“sudo/u01/app/11.2.0/grid/bin/crsctlstarthas”
v_end_time=$(date+%”s”)
echo“总共花了:$[$v_end_time-$v_start_time]秒。”
sudo/u01/app/11.2.0/grid/bin/crsctlstartresourceora.DATA.dg
sudo/u01/app/11.2.0/grid/bin/crsctlstartresourceora.FRA.dg
srvctlstartdatabase-d$v_dbname
sudo/u01/app/11.2.0/grid/bin/crs_stat-t
“copytape-root.sh”内容如下:
mkdir-p/u01/app/oracle/man_recovery_area/orcl/backup/tape2&/dev/null
cd/opt/;tar-zcvf/u01/app/oracle/man_recovery_area/orcl/backup/tape/mhvtl.tgzmhvtl
cd/usr/local/oracle/;tar-zcvf/u01/app/oracle/man_recovery_area/orcl/backup/tape/backup.tgzbackup
cd/usr/etc/;tar-zcvf/u01/app/oracle/man_recovery_area/orcl/backup/tape/ob.tgzob
chown-Roracle:oinstall/u01/app/oracle/man_recovery_area/orcl/backup/tape/
serviceobservicedstart
“revertape-root.sh”内容如下:
cd/opt/;tar-zxvf/u01/app/oracle/man_recovery_area/orcl/backup/tape/mhvtl.tgz
cd/usr/local/oracle/;tar-zxvf/u01/app/oracle/man_recovery_area/orcl/backup/tape/backup.tgz
cd/usr/etc/;tar-zxvf/u01/app/oracle/man_recovery_area/orcl/backup/tape/ob.tgz
serviceobservicedstart
obtoolinventory-Llib01
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致

我要回帖

更多关于 oracle rac集群方案 的文章

 

随机推荐