900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > Oracle RAC万能集群测试大全 支持11g/12c/18c/19c版本

Oracle RAC万能集群测试大全 支持11g/12c/18c/19c版本

时间:2021-10-25 21:48:49

相关推荐

Oracle RAC万能集群测试大全 支持11g/12c/18c/19c版本

为了方便阅读,请横屏观看代码部分

一、Oracle RAC集群测试背景

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

这套ERP系统的RAC集群数据库在上线之前,我们需要对RAC集群做一些功能测试,这个测试方法适用于Oracle11g/12c,也适用于Oracle18c/19c。

二、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集群功能测试

四、Oracle RAC集群负载测试

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

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

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

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

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

fgerpdbtaf=(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = .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 <db_unique_name> -o <oracle_home> [-m <domain_name>] [-p <spfile>] [-r {PRIMARY | PHYSICAL_STANDBY | LOGICAL_STANDBY | SNAPSHOT_STANDBY}] [-s <start_options>] [-t <stop_options>] [-n <db_name>] [-y {AUTOMATIC | MANUAL}] [-g "<serverpool_list>"] [-x <node_name>] [-a "<diskgroup_list>"]Usage: srvctl config database [-d <db_unique_name> [-a] ]Usage: srvctl start database -d <db_unique_name> [-o <start_options>]Usage: srvctl stop database -d <db_unique_name> [-o <stop_options>] [-f]Usage: srvctl status database -d <db_unique_name> [-f] [-v]Usage: srvctl enable database -d <db_unique_name> [-n <node_name>]Usage: srvctl disable database -d <db_unique_name> [-n <node_name>]Usage: srvctl modify database -d <db_unique_name> [-n <db_name>] [-o <oracle_home>] [-u <oracle_user>] [-m <domain>] [-p <spfile>] [-r {PRIMARY | PHYSICAL_STANDBY | LOGICAL_STANDBY | SNAPSHOT_STANDBY}] [-s <start_options>] [-t <stop_options>] [-y {AUTOMATIC | MANUAL}] [-g "<serverpool_list>" [-x <node_name>]] [-a "<diskgroup_list>"|-z]Usage: srvctl remove database -d <db_unique_name> [-f] [-y]Usage: srvctl getenv database -d <db_unique_name> [-t "<name_list>"]Usage: srvctl setenv database -d <db_unique_name> {-t <name>=<val>[,<name>=<val>,...] | -T <name>=<val>}Usage: srvctl unsetenv database -d <db_unique_name> -t "<name_list>"

Usage: srvctl add instance -d <db_unique_name> -i <inst_name> -n <node_name> [-f]Usage: srvctl start instance -d <db_unique_name> {-n <node_name> [-i <inst_name>] | -i <inst_name_list>} [-o <start_options>]Usage: srvctl stop instance -d <db_unique_name> {-n <node_name> | -i <inst_name_list>} [-o <stop_options>] [-f]Usage: srvctl status instance -d <db_unique_name> {-n <node_name> | -i <inst_name_list>} [-f] [-v]Usage: srvctl enable instance -d <db_unique_name> -i "<inst_name_list>"Usage: srvctl disable instance -d <db_unique_name> -i "<inst_name_list>"Usage: srvctl modify instance -d <db_unique_name> -i <inst_name> { -n <node_name> | -z }Usage: srvctl remove instance -d <db_unique_name> [-i <inst_name>] [-f] [-y]

Usage: srvctl add service -d <db_unique_name> -s <service_name> {-r "<preferred_list>" [-a "<available_list>"] [-P {BASIC | NONE | PRECONNECT}] | -g <server_pool> [-c {UNIFORM | SINGLETON}] } [-k <net_num>] [-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 <failover_retries>] [-w <failover_delay>]Usage: srvctl add service -d <db_unique_name> -s <service_name> -u {-r "<new_pref_inst>" | -a "<new_avail_inst>"}Usage: srvctl config service -d <db_unique_name> [-s <service_name>] [-a]Usage: srvctl enable service -d <db_unique_name> -s "<service_name_list>" [-i <inst_name> | -n <node_name>]Usage: srvctl disable service -d <db_unique_name> -s "<service_name_list>" [-i <inst_name> | -n <node_name>]Usage: srvctl status service -d <db_unique_name> [-s "<service_name_list>"] [-f] [-v]Usage: srvctl modify service -d <db_unique_name> -s <service_name> -i <old_inst_name> -t <new_inst_name> [-f]Usage: srvctl modify service -d <db_unique_name> -s <service_name> -i <avail_inst_name> -r [-f]Usage: srvctl modify service -d <db_unique_name> -s <service_name> -n -i "<preferred_list>" [-a "<available_list>"] [-f]Usage: srvctl modify service -d <db_unique_name> -s <service_name> [-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 <integer>] [-w <integer>]Usage: srvctl relocate service -d <db_unique_name> -s <service_name> {-i <old_inst_name> -t <new_inst_name> | -c <current_node> -n <target_node>} [-f]Specify instances for an administrator-managed database, or nodes for a policy managed databaseUsage: srvctl remove service -d <db_unique_name> -s <service_name> [-i <inst_name>] [-f]Usage: srvctl start service -d <db_unique_name> [-s "<service_name_list>" [-n <node_name> | -i <inst_name>] ] [-o <start_options>]Usage: srvctl stop service -d <db_unique_name> [-s "<service_name_list>" [-n <node_name> | -i <inst_name>] ] [-f]

Usage: srvctl add nodeapps { { -n <node_name> -A <name|ip>/<netmask>/[if1[|if2...]] } | { -S <subnet>/<netmask>/[if1[|if2...]] } } [-p <portnum>] [-m <multicast-ip-address>] [-e <eons-listen-port>] [-l <ons-local-port>] [-r <ons-remote-port>] [-t <host>[:<port>][,<host>[:<port>]...]] [-v]Usage: srvctl config nodeapps [-a] [-g] [-s] [-e]Usage: srvctl modify nodeapps {[-n <node_name> -A <new_vip_address>/<netmask>[/if1[|if2|...]]] | [-S <subnet>/<netmask>[/if1[|if2|...]]]} [-m <multicast-ip-address>] [-p <multicast-portnum>] [-e <eons-listen-port>] [ -l <ons-local-port> ] [-r <ons-remote-port> ] [-t <host>[:<port>][,<host>[:<port>]...]] [-v]Usage: srvctl start nodeapps [-n <node_name>] [-v]Usage: srvctl stop nodeapps [-n <node_name>] [-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 "<name_list>"]Usage: srvctl setenv nodeapps {-t "<name>=<val>[,<name>=<val>,...]" | -T "<name>=<val>"}Usage: srvctl unsetenv nodeapps -t "<name_list>" [-v]

Usage: srvctl add vip -n <node_name> -k <network_number> -A <name|ip>/<netmask>/[if1[|if2...]] [-v]Usage: srvctl config vip { -n <node_name> | -i <vip_name> }Usage: srvctl disable vip -i <vip_name> [-v]Usage: srvctl enable vip -i <vip_name> [-v]Usage: srvctl remove vip -i "<vip_name_list>" [-f] [-y] [-v]Usage: srvctl getenv vip -i <vip_name> [-t "<name_list>"]Usage: srvctl start vip { -n <node_name> | -i <vip_name> } [-v]Usage: srvctl stop vip { -n <node_name> | -i <vip_name> } [-f] [-r] [-v]Usage: srvctl status vip { -n <node_name> | -i <vip_name> }Usage: srvctl setenv vip -i <vip_name> {-t "<name>=<val>[,<name>=<val>,...]" | -T "<name>=<val>"}Usage: srvctl unsetenv vip -i <vip_name> -t "<name_list>" [-v]

Usage: srvctl add asm [-l <lsnr_name>]Usage: srvctl start asm [-n <node_name>] [-o <start_options>]Usage: srvctl stop asm [-n <node_name>] [-o <stop_options>] [-f]Usage: srvctl config asm [-a]Usage: srvctl status asm [-n <node_name>] [-a]Usage: srvctl enable asm [-n <node_name>]Usage: srvctl disable asm [-n <node_name>]Usage: srvctl modify asm [-l <lsnr_name>]Usage: srvctl remove asm [-f]Usage: srvctl getenv asm [-t <name>[, ...]]Usage: srvctl setenv asm -t "<name>=<val> [,...]" | -T "<name>=<value>"Usage: srvctl unsetenv asm -t "<name>[, ...]"

Usage: srvctl start diskgroup -g <dg_name> [-n "<node_list>"]Usage: srvctl stop diskgroup -g <dg_name> [-n "<node_list>"] [-f]Usage: srvctl status diskgroup -g <dg_name> [-n "<node_list>"] [-a]Usage: srvctl enable diskgroup -g <dg_name> [-n "<node_list>"]Usage: srvctl disable diskgroup -g <dg_name> [-n "<node_list>"]Usage: srvctl remove diskgroup -g <dg_name> [-f]

Usage: srvctl add listener [-l <lsnr_name>] [-s] [-p "[TCP:]<port>[, ...][/IPC:<key>][/NMP:<pipe_name>][/TCPS:<s_port>] [/SDP:<port>]"] [-o <oracle_home>] [-k <net_num>]Usage: srvctl config listener [-l <lsnr_name>] [-a]Usage: srvctl start listener [-l <lsnr_name>] [-n <node_name>]Usage: srvctl stop listener [-l <lsnr_name>] [-n <node_name>] [-f]Usage: srvctl status listener [-l <lsnr_name>] [-n <node_name>]Usage: srvctl enable listener [-l <lsnr_name>] [-n <node_name>]Usage: srvctl disable listener [-l <lsnr_name>] [-n <node_name>]Usage: srvctl modify listener [-l <lsnr_name>] [-o <oracle_home>] [-p "[TCP:]<port>[, ...][/IPC:<key>][/NMP:<pipe_name>][/TCPS:<s_port>] [/SDP:<port>]"] [-u <oracle_user>] [-k <net_num>]Usage: srvctl remove listener [-l <lsnr_name> | -a] [-f]Usage: srvctl getenv listener [-l <lsnr_name>] [-t <name>[, ...]]Usage: srvctl setenv listener [-l <lsnr_name>] -t "<name>=<val> [,...]" | -T "<name>=<value>"Usage: srvctl unsetenv listener [-l <lsnr_name>] -t "<name>[, ...]"

Usage: srvctl add scan -n <scan_name> [-k <network_number> [-S <subnet>/<netmask>[/if1[|if2|...]]]]Usage: srvctl config scan [-i <ordinal_number>]Usage: srvctl start scan [-i <ordinal_number>] [-n <node_name>]Usage: srvctl stop scan [-i <ordinal_number>] [-f]Usage: srvctl relocate scan -i <ordinal_number> [-n <node_name>]Usage: srvctl status scan [-i <ordinal_number>]Usage: srvctl enable scan [-i <ordinal_number>]Usage: srvctl disable scan [-i <ordinal_number>]Usage: srvctl modify scan -n <scan_name>Usage: srvctl remove scan [-f] [-y]Usage: srvctl add scan_listener [-l <lsnr_name_prefix>] [-s] [-p [TCP:]<port>[/IPC:<key>][/NMP:<pipe_name>][/TCPS:<s_port>] [/SDP:<port>]]Usage: srvctl config scan_listener [-i <ordinal_number>]Usage: srvctl start scan_listener [-n <node_name>] [-i <ordinal_number>]Usage: srvctl stop scan_listener [-i <ordinal_number>] [-f]Usage: srvctl relocate scan_listener -i <ordinal_number> [-n <node_name>]Usage: srvctl status scan_listener [-i <ordinal_number>]Usage: srvctl enable scan_listener [-i <ordinal_number>]Usage: srvctl disable scan_listener [-i <ordinal_number>]Usage: srvctl modify scan_listener {-u|-p [TCP:]<port>[/IPC:<key>][/NMP:<pipe_name>][/TCPS:<s_port>] [/SDP:<port>]}Usage: srvctl remove scan_listener [-f] [-y]

Usage: srvctl add srvpool -g <pool_name> [-l <min>] [-u <max>] [-i <importance>] [-n "<server_list>"]Usage: srvctl config srvpool [-g <pool_name>]Usage: srvctl status srvpool [-g <pool_name>] [-a]Usage: srvctl status server -n "<server_list>" [-a]Usage: srvctl relocate server -n "<server_list>" -g <pool_name> [-f]Usage: srvctl modify srvpool -g <pool_name> [-l <min>] [-u <max>] [-i <importance>] [-n "<server_list>"]Usage: srvctl remove srvpool -g <pool_name>

Usage: srvctl add oc4j [-v]Usage: srvctl config oc4jUsage: srvctl start oc4j [-v]Usage: srvctl stop oc4j [-f] [-v]Usage: srvctl relocate oc4j [-n <node_name>] [-v]Usage: srvctl status oc4j [-n <node_name>]Usage: srvctl enable oc4j [-n <node_name>] [-v]Usage: srvctl disable oc4j [-n <node_name>] [-v]Usage: srvctl modify oc4j -p <oc4j_rmi_port> [-v]Usage: srvctl remove oc4j [-f] [-v]

Usage: srvctl start home -o <oracle_home> -s <state_file> -n <node_name>Usage: srvctl stop home -o <oracle_home> -s <state_file> -n <node_name> [-t <stop_options>] [-f]Usage: srvctl status home -o <oracle_home> -s <state_file> -n <node_name>

Usage: srvctl add filesystem -d <volume_device> -v <volume_name> -g <dg_name> [-m <mountpoint_path>] [-u <user>]Usage: srvctl config filesystem -d <volume_device>Usage: srvctl start filesystem -d <volume_device> [-n <node_name>]Usage: srvctl stop filesystem -d <volume_device> [-n <node_name>] [-f]Usage: srvctl status filesystem -d <volume_device>Usage: srvctl enable filesystem -d <volume_device>Usage: srvctl disable filesystem -d <volume_device>Usage: srvctl modify filesystem -d <volume_device> -u <user>Usage: srvctl remove filesystem -d <volume_device> [-f]

Usage: srvctl start gns [-v] [-l <log_level>] [-n <node_name>]Usage: srvctl stop gns [-v] [-n <node_name>] [-f]Usage: srvctl config gns [-v] [-a] [-d] [-k] [-m] [-n <node_name>] [-p] [-s] [-V]Usage: srvctl status gns -n <node_name>Usage: srvctl enable gns [-v] [-n <node_name>]Usage: srvctl disable gns [-v] [-n <node_name>]Usage: srvctl relocate gns [-v] [-n <node_name>] [-f]Usage: srvctl add gns [-v] -d <domain> -i <vip_name|ip> [-k <network_number> [-S <subnet>/<netmask>[/<interface>]]]srvctl modify gns [-v] [-f] [-l <log_level>] [-d <domain>] [-i <ip_address>] [-N <name> -A <address>] [-D <name> -A <address>] [-c <name> -a <alias>] [-u <alias>] [-r <address>] [-V <name>] [-F <forwarded_domains>] [-R <refused_domains>] [-X <excluded_interfaces>]Usage: srvctl remove gns [-f] [-d <domain_name>]

$ ./crsctl -hUsage: crsctl add - add a resource, type or other entitycrsctl check- check a service, resource or other entitycrsctl config - output autostart configurationcrsctl debug- obtain or modify debug statecrsctl delete - delete a resource, type or other entitycrsctl disable - disable autostartcrsctl enable - enable autostartcrsctl get - get an entity valuecrsctl getperm - get entity permissionscrsctl lsmodules - list debug modulescrsctl modify - modify a resource, type or other entitycrsctl query - query service statecrsctl pin - Pin the nodes in the nodelistcrsctl relocate - relocate a resource, server or other entitycrsctl replace - replaces the location of voting filescrsctl setperm - set entity permissionscrsctl set - set an entity valuecrsctl start- start a resource, server or other entitycrsctl status - get status of a resource or other entitycrsctl stop- stop a resource, server or other entitycrsctl unpin- unpin the nodes in the nodelistcrsctl unset- unset a entity value, restoring its default

5.2 Oracle RAC集群日常维护命令

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

1.停止数据库上的所有节点和启动数据库上的所有节点

Srvctl stop database -d fgedu –o immediate

Srvctl start database -d fgedu

2.停止数据库上的所有asm磁盘组和启动数据库上的所有磁盘组

Srvctl stop asm –g crs

Srvctl stop asm –g dgsystem

Srvctl stop asm –g fgedudata1

Srvctl stop asm –g dgrecover

Srvctl start asm –g crs

Srvctl start asm –g dgsystem

Srvctl start asm –g fgedudata1

Srvctl start asm –g dgrecover

3.停止对应节点上的listener和启动对应节点上的listener

Srvctl stop listener -n fgerp61

Srvctl stop listener -n fgerp62

Srvctl start listener -n fgerp61

Srvctl start listener -n fgerp62

4.停止scan_listener和启动scan_listener

Srvctl stop scan_listener

Srvctl start scan_listener

5.停止scan和启动scan

Srvctl stop scan

Srvctl start scan

6.停止对应节点上的资源和启动对应节点上的资源

Srvctl stop nodeapps -n fgerp62

Srvctl stop nodeapps -n fgerp61

Srvctl start nodeapps -n fgerp62

Srvctl start nodeapps -n fgerp61

7.停止crs和启动crs

停止crs

crsctl stop crs

Crsctl stop crs的方式能把所有grid进程都关闭掉

启动crs

crsctl start crs

8.检查crs资源状态

crsctl status resource -t

crs_stat –t

9、用asmcmd工具管理asm磁盘组

查看磁盘组容量

asmcmd lsdg

如果大家已经有一套Oracle RAC集群环境了,即可按照上面的过程来测试。

优质文章推荐

Oracle 19c: RAC集群技术的坚持与放弃(含PPT下载)

实战课堂:为什么更换存储之后一切正常但RAC集群启动不了?

你不可不看的 Oracle RAC 日常基本维护命令

原文:/oracle18c/2368092

资源下载

关注公众号:数据和云(OraNews)回复关键字获取

DTCC,数据库大会PPT

DTC, DTC 大会 PPT

ENMOBK,《Oracle性能优化与诊断案例》

DBALIFE,“DBA 的一天”海报

DBA04,DBA 手记4 电子书

122ARCH,Oracle 12.2体系结构图

OOW,Oracle OpenWorld 资料

产品推荐

云和恩墨Bethune Pro企业版,集监控,巡检,安全于一身,你的专属数据库实时监控和智能巡检平台,漂亮的不像实力派,你值得拥有!

云和恩墨zData一体机现已发布超融合版本和精简版,支持各种简化场景部署,零数据丢失备份一体机ZDBM也已发布,欢迎关注。

云和恩墨大讲堂 |一个分享交流的地方

长按,识别二维码,加入万人交流社群

请备注:云和恩墨大讲堂

你“在看”吗?

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。