千家信息网

Oracle RAC集群测试-生产环境最佳方法(Oracle 11g/12c/18c/19 RAC)

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,生产环境Oracle RAC集群测试最佳方法(支持Oracle 11g/12c/18c/19c RAC安装后期测试过程)一、Oracle RAC集群测试背景某中大型制造业公司,由于要新上项目,建设了一
千家信息网最后更新 2025年02月01日Oracle RAC集群测试-生产环境最佳方法(Oracle 11g/12c/18c/19 RAC)

生产环境Oracle RAC集群测试最佳方法(支持Oracle 11g/12c/18c/19c RAC安装后期测试过程)

一、Oracle RAC集群测试背景

某中大型制造业公司,由于要新上项目,建设了一套业务系统-ERP系统,这套系统的数据库环境是Oracle RAC(RHEL Linux7+Oracle11gR2 RAC)架构 ,根据风哥提供的建设方案项目已经建设完成。

这套ERP系统的RAC集群数据库在上线之前,我们需要对RAC集群做一些功能测试,这个测试方法适用于Oracle11g/12c,也适用于oracle18c/19c,关于更多生产技术交流,请加入QQ群:787523185

二、Oracle RAC集群的介绍

在测试之前,这里风哥给大家介绍一下Oracle RAC是什么:Oracle 真正应用集群技术(Oracle Real Application Cluster )是Oracle 9i及以后版本,Oracle 9i之前叫OPS集群。Oracle RAC主要支持Oracle9i、10g、11g、12c版本(18c,19c)。 在Oracle RAC环境下,Oracle集群提供了集群软件和存储管理软件,集群软件CRS/GRID,存储管理软件ASM(自动存储管理),多个节点共享一份数据。

ORACLE RAC架构如下:

其中Oracle RAC在物理架构上,硬件设备主要包括如下部分:

服务器、共享存储设备(共享存储,光纤交换机,HBA卡,光纤线)、网络设备(网络交换机,光纤交换机,网线)

1)服务器

我们称这个服务器为"数据库服务器","数据库主机",在RAC的术语中我们又称其为"节点",服务器的配置应该相同,cpu,内存等。

2)网络设备

每台服务器上至少两块物理网卡,分别用于主机间私有通信和对外公用通信,也可以有多快网卡,进行网卡绑定,实现网卡的冗余。

私有通信的网卡叫private NIC,对应的IP为private IP。

公用通信的网卡叫public NIC,对应的IP为public IP。

3)共享存储设备

共享存储是整个RAC架构中的核心

每台服务器至少一块/两块HBA卡,用于共享存储的连接。

可以用光纤线直连存储,也可以通过光纤交换机,我们建议使用光纤交换机。

RAC是一个典型的"多实例,单数据库"架构,被所有节点共享,并行访问。

数据库数据文件,控制文件,参数文件,联机重做日志文件,甚至归档日志文件都放在共享存储

上,并保证可以被所有节点同时访问。IO性能要求比较高,一般用光纤线连接。


另外Oracle RAC还有两种集群模式:

Oracle RAC 同时具备HA(High Availiablity) 、LB(LoadBalance)。

1)Failover(故障转移):

它指集群中任何一个节点的故障都不会影响用户的使用,连接到故障节点的用户会被自动转移到健康节点,从用户感受而言, 是感觉不到这种切换。

2)LoadBalance(负载均衡):

就是把负载平均的分配到集群中的各个节点,从而提高整体的吞吐能力。


三、Oracle RAC集群功能测试

序号OracleRAC测试项目OracleRAC测试方法OracleRAC正确结果OracleRAC测试结果
1检查数据库的版本和补丁select * from v$version;Oracle 11/12c相应版本是否正常:
2数据库启动和关闭startup能正常启动和关闭是否正常:

Shutdown immediate
3逻辑备份exp,expdp导出成功是否正常:
4字符集select name,value$ fromZHS16GBK 、 UTF8是否正常:
props$
where name like
'%CHARACTERSET%';
5创建/删除create tablespace fgedudata01创建成功是否正常:
表空间datafile '+fgedudata1'删除成功

size 10m autoextend off;

drop tablespace fgedudata01

including contents and files;
6创建/删除用户create user fgedu identified创建成功是否正常:
by test default tablespace删除成功
fgedudata01 temporary tablespace temp;
drop user fgedu cascade;
7创建/删除表create table fgedu.itpux创建成功是否正常:
(name varchar2(10),id number);删除成功
drop table fgedu.itpux;
8插入/删除数据Insert into fgedu.itpux values('itpux01','1);插入成功是否正常:
Commit;删除成功
Delete from fgedu.itpux
Commit;
9客户端连接到sqlplus "sys/oracle@itpuxdb as sysdba";连接成功是否正常:
数据库
10修改数据库为归档模式Alter system set db_recovery_file_dest='+dgrecover' scope=spfile;归档模式是否正常:
alter system set db_recovery_file_dest_size=200G scope=spfile;
Srvctl stop database -d fgerpdb
Sqlplus "/as sysdba"
Startup mount;
Alter database archivelog;
Shutdown immediate
Srvctl start database -d fgerpdb

四、Oracle RAC集群负载测试

序号OracleRAC测试内容OracleRAC测试方法OracleRAC正确结果OracleRAC测试结果
1客户端连接数据库(RAC方式)sqlplus "sys/itpux123@itpuxdb as sysdba";连接成功,并且每次连接有可能分布到不同的实例上是否正常:
select instance_name from v$instance;
2CRS正常启动关闭crsctl start crs能正常启动和关闭是否正常:
crsctl stop crs
3网络连接中断(public网络)拔掉节点一public网卡的网线本节点实例正常,vip漂移到节点二,listener,ons,network服务offline,原先连接到节点一的连接自动连接至节点二是否正常:
4网络连接恢复(public网络)插回节点一public网卡的网线vip漂移回节点一,listener,ons,network服务自动onlien,crs资源恢复正常是否正常:
5网络连接中断(private网络)拔掉节点一private网卡的网线节点二重启,crs资源offline,vip漂移到节点一,原先连接到节点二的连接自动连接至节点1是否正常:
6网络连接恢复(private网络)插回节点一private网卡的网线,使用crsctl start crs启动crs节点二的vip漂移回节点二,节点二crs资源恢复正常是否正常:
7网络连接中断(public网络)拔掉节点二public网卡的网线本节点实例正常,vip漂移到节点一,listener,ons,network服务offline,原先连接到节点二的连接自动连接至节点一是否正常:
8网络连接恢复(public网络)插回节点二public网卡的网线vip漂移回节点二,listener,ons,network服务自动onlien,crs资源恢复正常是否正常:
9网络连接中断(private网络)拔掉节点二private网卡的网线节点二重启,crs资源offline,vip漂移到节点一,原先连接到节点二的连接自动连接至节点1是否正常:
10网络连接恢复(private网络)插回节点二private网卡的网线,使用crsctl start crs启动crs节点二的vip漂移回节点二,节点二crs资源恢复正常是否正常:
11负载均衡开启多个数据库连接多次连接应分布在两个节点是否正常:
12透明故障切换使用RAC的方式连接数据库连接不中断,查询继续并自动切换至另一实例是否正常:
select instance_name from v$instance;
关闭当前实例后
select instance_name from v$instance;
13正常维护,正常关闭节点1Crsctl stop crsScan vip,vip漂移到节点二,原先连接到节点一的连接自动连接至节点二是否正常:
14正常维护,正常关闭节点2Crsctl stop crsvip漂移到节点一,原先连接到节点二的连接自动连接至节点一是否正常:

针对测试列表中的第1点:客户端连接到数据库(RAC负载均衡测试)

Oracle 客户端的tnsnames.ora模式如下:只需要配置scan对应的name或ip地址即可,如下所示:

fgerpdb =  (DESCRIPTION =    (ADDRESS_LIST =      (ADDRESS = (PROTOCOL = TCP)(HOST = www.fgedu.net.cn)(PORT = 1521))    )    (CONNECT_DATA =      (SERVER = DEDICATED)      (SERVICE_NAME = fgerpdb)    )  )


最终Oracle RAC的测试效果如下:

针对测试列表中的第12点:客户端连接到数据库(RAC透明切换测试),

客户端tnsnames.ora配置

fgerpdbtaf=  (DESCRIPTION =   (ADDRESS = (PROTOCOL = TCP)(HOST = www.fgedu.net.cn)(PORT = 1521))  (LOAD_BALANCE = YES)  (CONNECT_DATA =    (SERVER = DEDICATED)   (SERVICE_NAME = fgerpdb)   (FAILOVER_MODE =    (TYPE = SELECT)(METHOD = BASIC)(RETRIES = 180)(DELAY = 5)   )  ) )

tnsping fgerpdbtaf 测试连通性

连通ok后,再用第12点的方式测试透明故障切换


五、Oracle RAC集群维护命令

5.1.Oracle RAC常用命令工具

以下内容是风哥推荐大家需要熟悉的常用命令,日常工作中需要经常参考来使用。

$ srvctl -hUsage: srvctl [-V]Usage: srvctl add database -d  -o  [-m ] [-p ] [-r {PRIMARY | PHYSICAL_STANDBY | LOGICAL_STANDBY | SNAPSHOT_STANDBY}] [-s ] [-t ] [-n ] [-y {AUTOMATIC | MANUAL}] [-g ""] [-x ] [-a ""]Usage: srvctl config database [-d  [-a] ]Usage: srvctl start database -d  [-o ]Usage: srvctl stop database -d  [-o ] [-f]Usage: srvctl status database -d  [-f] [-v]Usage: srvctl enable database -d  [-n ]Usage: srvctl disable database -d  [-n ]Usage: srvctl modify database -d  [-n ] [-o ] [-u ] [-m ] [-p ] [-r {PRIMARY | PHYSICAL_STANDBY | LOGICAL_STANDBY | SNAPSHOT_STANDBY}] [-s ] [-t ] [-y {AUTOMATIC | MANUAL}] [-g "" [-x ]] [-a ""|-z]Usage: srvctl remove database -d  [-f] [-y]Usage: srvctl getenv database -d  [-t ""]Usage: srvctl setenv database -d  {-t =[,=,...] | -T =}Usage: srvctl unsetenv database -d  -t ""Usage: srvctl add instance -d  -i  -n  [-f]Usage: srvctl start instance -d  {-n  [-i ] | -i } [-o ]Usage: srvctl stop instance -d  {-n  | -i }  [-o ] [-f]Usage: srvctl status instance -d  {-n  | -i } [-f] [-v]Usage: srvctl enable instance -d  -i ""Usage: srvctl disable instance -d  -i ""Usage: srvctl modify instance -d  -i  { -n  | -z }Usage: srvctl remove instance -d  [-i ] [-f] [-y]Usage: srvctl add service -d  -s  {-r "" [-a ""] [-P {BASIC | NONE | PRECONNECT}] | -g  [-c {UNIFORM | SINGLETON}] } [-k   ] [-l [PRIMARY][,PHYSICAL_STANDBY][,LOGICAL_STANDBY][,SNAPSHOT_STANDBY]] [-y {AUTOMATIC | MANUAL}] [-q {TRUE|FALSE}] [-x {TRUE|FALSE}] [-j {SHORT|LONG}] [-B {NONE|SERVICE_TIME|THROUGHPUT}] [-e {NONE|SESSION|SELECT}] [-m {NONE|BASIC}] [-z ] [-w ]Usage: srvctl add service -d  -s  -u {-r "" | -a ""}Usage: srvctl config service -d  [-s ] [-a]Usage: srvctl enable service -d  -s "" [-i  | -n ]Usage: srvctl disable service -d  -s "" [-i  | -n ]Usage: srvctl status service -d  [-s ""] [-f] [-v]Usage: srvctl modify service -d  -s  -i  -t  [-f]Usage: srvctl modify service -d  -s  -i  -r [-f]Usage: srvctl modify service -d  -s  -n -i "" [-a ""] [-f]Usage: srvctl modify service -d  -s  [-c {UNIFORM | SINGLETON}] [-P {BASIC|PRECONNECT|NONE}] [-l [PRIMARY][,PHYSICAL_STANDBY][,LOGICAL_STANDBY][,SNAPSHOT_STANDBY]] [-y {AUTOMATIC | MANUAL}][-q {true|false}] [-x {true|false}] [-j {SHORT|LONG}] [-B {NONE|SERVICE_TIME|THROUGHPUT}] [-e {NONE|SESSION|SELECT}] [-m {NONE|BASIC}] [-z ] [-w ]Usage: srvctl relocate service -d  -s  {-i  -t  | -c  -n } [-f]       Specify instances for an administrator-managed database, or nodes for a policy managed databaseUsage: srvctl remove service -d  -s  [-i ] [-f]Usage: srvctl start service -d  [-s "" [-n  | -i ] ] [-o ]Usage: srvctl stop service -d  [-s "" [-n  | -i ] ] [-f]Usage: srvctl add nodeapps { { -n  -A //[if1[|if2...]] } | { -S //[if1[|if2...]] } } [-p ] [-m ] [-e ] [-l ]  [-r ] [-t [:][,[:]...]] [-v]Usage: srvctl config nodeapps [-a] [-g] [-s] [-e]Usage: srvctl modify nodeapps {[-n  -A /[/if1[|if2|...]]] | [-S /[/if1[|if2|...]]]} [-m ] [-p ] [-e ] [ -l  ] [-r  ] [-t [:][,[:]...]] [-v]Usage: srvctl start nodeapps [-n ] [-v]Usage: srvctl stop nodeapps [-n ] [-f] [-r] [-v]Usage: srvctl status nodeappsUsage: srvctl enable nodeapps [-v]Usage: srvctl disable nodeapps [-v]Usage: srvctl remove nodeapps [-f] [-y] [-v]Usage: srvctl getenv nodeapps [-a] [-g] [-s] [-e] [-t ""]Usage: srvctl setenv nodeapps {-t "=[,=,...]" | -T "="}Usage: srvctl unsetenv nodeapps -t "" [-v]Usage: srvctl add vip -n  -k  -A //[if1[|if2...]] [-v]Usage: srvctl config vip { -n  | -i  }Usage: srvctl disable vip -i  [-v]Usage: srvctl enable vip -i  [-v]Usage: srvctl remove vip -i "" [-f] [-y] [-v]Usage: srvctl getenv vip -i  [-t ""]Usage: srvctl start vip { -n  | -i  } [-v]Usage: srvctl stop vip { -n   | -i  } [-f] [-r] [-v]Usage: srvctl status vip { -n  | -i  }Usage: srvctl setenv vip -i  {-t "=[,=,...]" | -T "="}Usage: srvctl unsetenv vip -i  -t "" [-v]Usage: srvctl add asm [-l ]Usage: srvctl start asm [-n ] [-o ]Usage: srvctl stop asm [-n ] [-o ] [-f]Usage: srvctl config asm [-a]Usage: srvctl status asm [-n ] [-a]Usage: srvctl enable asm [-n ]Usage: srvctl disable asm [-n ]Usage: srvctl modify asm [-l ]Usage: srvctl remove asm [-f]Usage: srvctl getenv asm [-t [, ...]]Usage: srvctl setenv asm -t "= [,...]" | -T "="Usage: srvctl unsetenv asm -t "[, ...]"Usage: srvctl start diskgroup -g  [-n ""]Usage: srvctl stop diskgroup -g  [-n ""] [-f]Usage: srvctl status diskgroup -g  [-n ""] [-a]Usage: srvctl enable diskgroup -g  [-n ""]Usage: srvctl disable diskgroup -g  [-n ""]Usage: srvctl remove diskgroup -g  [-f]Usage: srvctl add listener [-l ] [-s] [-p "[TCP:][, ...][/IPC:][/NMP:][/TCPS:] [/SDP:]"] [-o ] [-k ]Usage: srvctl config listener [-l ] [-a]Usage: srvctl start listener [-l ] [-n ]Usage: srvctl stop listener [-l ] [-n ] [-f]Usage: srvctl status listener [-l ] [-n ]Usage: srvctl enable listener [-l ] [-n ]Usage: srvctl disable listener [-l ] [-n ]Usage: srvctl modify listener [-l ] [-o ] [-p "[TCP:][, ...][/IPC:][/NMP:][/TCPS:] [/SDP:]"] [-u ] [-k ]Usage: srvctl remove listener [-l  | -a] [-f]Usage: srvctl getenv listener [-l ] [-t [, ...]]Usage: srvctl setenv listener [-l ] -t "= [,...]" | -T "="Usage: srvctl unsetenv listener [-l ] -t "[, ...]"Usage: srvctl add scan -n  [-k  [-S /[/if1[|if2|...]]]]Usage: srvctl config scan [-i ]Usage: srvctl start scan [-i ] [-n ]Usage: srvctl stop scan [-i ] [-f]Usage: srvctl relocate scan -i  [-n ]Usage: srvctl status scan [-i ]Usage: srvctl enable scan [-i ]Usage: srvctl disable scan [-i ]Usage: srvctl modify scan -n Usage: srvctl remove scan [-f] [-y]Usage: srvctl add scan_listener [-l ] [-s] [-p [TCP:][/IPC:][/NMP:][/TCPS:] [/SDP:]]Usage: srvctl config scan_listener [-i ]Usage: srvctl start scan_listener [-n ] [-i ]Usage: srvctl stop scan_listener [-i ] [-f]Usage: srvctl relocate scan_listener -i  [-n ]Usage: srvctl status scan_listener [-i ]Usage: srvctl enable scan_listener [-i ]Usage: srvctl disable scan_listener [-i ]Usage: srvctl modify scan_listener {-u|-p [TCP:][/IPC:][/NMP:][/TCPS:] [/SDP:]}Usage: srvctl remove scan_listener [-f] [-y]Usage: srvctl add srvpool -g  [-l ] [-u ] [-i ] [-n ""]Usage: srvctl config srvpool [-g ]Usage: srvctl status srvpool [-g ] [-a]Usage: srvctl status server -n "" [-a]Usage: srvctl relocate server -n "" -g  [-f]Usage: srvctl modify srvpool -g  [-l ] [-u ] [-i ] [-n ""]Usage: srvctl remove srvpool -g Usage: srvctl add oc4j [-v]Usage: srvctl config oc4jUsage: srvctl start oc4j [-v]Usage: srvctl stop oc4j [-f] [-v]Usage: srvctl relocate oc4j [-n ] [-v]Usage: srvctl status oc4j [-n ]Usage: srvctl enable oc4j [-n ] [-v]Usage: srvctl disable oc4j [-n ] [-v]Usage: srvctl modify oc4j -p  [-v]Usage: srvctl remove oc4j [-f] [-v]Usage: srvctl start home -o  -s  -n Usage: srvctl stop home -o  -s  -n  [-t ] [-f]Usage: srvctl status home -o  -s  -n Usage: srvctl add filesystem -d  -v  -g  [-m ] [-u ]Usage: srvctl config filesystem -d Usage: srvctl start filesystem -d  [-n ]Usage: srvctl stop filesystem -d  [-n ] [-f]Usage: srvctl status filesystem -d Usage: srvctl enable filesystem -d Usage: srvctl disable filesystem -d Usage: srvctl modify filesystem -d  -u Usage: srvctl remove filesystem -d  [-f]Usage: srvctl start gns [-v] [-l ] [-n ]Usage: srvctl stop gns [-v] [-n ] [-f]Usage: srvctl config gns [-v] [-a] [-d] [-k] [-m] [-n ] [-p] [-s] [-V]Usage: srvctl status gns -n Usage: srvctl enable gns [-v] [-n ]Usage: srvctl disable gns [-v] [-n ]Usage: srvctl relocate gns [-v] [-n ] [-f]Usage: srvctl add gns [-v] -d  -i  [-k  [-S /[/]]]srvctl modify gns [-v] [-f] [-l ] [-d ] [-i ] [-N  -A 
] [-D -A
] [-c -a ] [-u ] [-r
] [-V ] [-F ] [-R ] [-X ]Usage: srvctl remove gns [-f] [-d ]$ ./crsctl -hUsage: crsctl add - add a resource, type or other entity crsctl check - check a service, resource or other entity crsctl config - output autostart configuration crsctl debug - obtain or modify debug state crsctl delete - delete a resource, type or other entity crsctl disable - disable autostart crsctl enable - enable autostart crsctl get - get an entity value crsctl getperm - get entity permissions crsctl lsmodules - list debug modules crsctl modify - modify a resource, type or other entity crsctl query - query service state crsctl pin - Pin the nodes in the nodelist crsctl relocate - relocate a resource, server or other entity crsctl replace - replaces the location of voting files crsctl setperm - set entity permissions crsctl set - set an entity value crsctl start - start a resource, server or other entity crsctl status - get status of a resource or other entity crsctl stop - stop a resource, server or other entity crsctl unpin - unpin the nodes in the nodelist crsctl unset - unset a entity value, restoring its default


5.2.Oracle RAC集群日常维护命令

以下内容是风哥推荐大家必须要记住的常用操作,日常工作中必须经常使用。

1.停止数据库上的所有节点和启动数据库上的所有节点Srvctl stop database -d fgedu -o immediateSrvctl start database -d fgedu2.停止数据库上的所有asm磁盘组和启动数据库上的所有磁盘组Srvctl stop asm -g crsSrvctl stop asm -g dgsystemSrvctl stop asm -g fgedudata1Srvctl stop asm -g dgrecoverSrvctl start asm -g crsSrvctl start asm -g dgsystemSrvctl start asm -g fgedudata1Srvctl start asm -g dgrecover3.停止对应节点上的listener和启动对应节点上的listenerSrvctl stop listener -n fgerp61Srvctl stop listener -n fgerp62Srvctl start listener -n fgerp61Srvctl start listener -n fgerp624.停止scan_listener和启动scan_listenerSrvctl stop scan_listener Srvctl start scan_listener5.停止scan和启动scanSrvctl stop scanSrvctl start scan6.停止对应节点上的资源和启动对应节点上的资源Srvctl stop nodeapps -n fgerp62Srvctl stop nodeapps -n fgerp61Srvctl start nodeapps -n fgerp62Srvctl start nodeapps -n fgerp617.停止crs和启动crs停止crscrsctl stop crsCrsctl stop crs的方式能把所有grid进程都关闭掉启动crscrsctl start crs8.检查crs资源状态crsctl status resource -tcrs_stat -t9、用asmcmd工具管理asm磁盘组查看磁盘组容量asmcmd lsdg

如果大家已经有一套Oracle RAC集群环境了,即可按照上面的过程来测试,如果还没有这套环境,可以参照风哥的Oracle RAC教程:生产环境Linux+Oracle 11gR2 RAC集群安装配置与维护(https://edu.51cto.com/course/3733.html),来搭建Oracle RAC集群环境用于学习和测试。

更多技术交流,请加入QQ群:787523185

或者扫描加入微信群:

相关课程推荐:

01.Oracle数据库集群容灾实施与维护V3.0(RAC+DG+OGG)

https://edu.51cto.com/topic/1943.html

02.Oracle12.2数据库实施维护(项目实战系列)专题2.0

https://edu.51cto.com/topic/1944.html

03.MySQL高可用复制与分布式集群架构项目实战系列

https://edu.51cto.com/topic/1622.html

04.MySQL数据库性能优化与运维诊断实战系列

https://edu.51cto.com/topic/1752.html

05.NoSQL数据库集群与维护管理(项目实战)专题1.0

https://edu.51cto.com/topic/1950.html

06.Oracle RAC集群实施与维护(项目实战系列)专题1.0

https://edu.51cto.com/topic/1945.html

07.Oracle DataGuard容灾项目实施与维护专题1.0

https://edu.51cto.com/topic/1946.html

08.GoldenGate数据容灾与复制(项目实战)专题1.0

https://edu.51cto.com/topic/1949.html

09.Oracle RAC+DataGuard集群容灾项目2.0

https://edu.51cto.com/topic/1948.html

11.Oracle12c+DataGuard容灾实施与维护2.0

https://edu.51cto.com/topic/1947.html

12.Oracle数据库补丁升级与管理实战实战专题(单机+RAC)

https://edu.51cto.com/topic/1154.html

13.企业级中间件应用WebLogic11g/12c集群安装布署配置专题

https://edu.51cto.com/topic/276.html

0