Oracle RAC是一个集群数据库,可以实现负载均衡和故障无缝切换。如何知道RAC数据库已经实现了这些功能呢,下面就对此进行功能测试。

一、 负载均衡测试
RAC数据库的负载均衡是指对数据库连接的负载均衡,当一个新的会话连接到RAC数据库时,通过指定的分配算法将请求分配到集群的任一节点上,这就是RAC数据库完成的功能。负载均衡在RAC中分为两种:一种是基于客户端连接的负载均衡;一种是基于服务器端的负载均衡。

1. RAC客户端负载均衡
客户端连接的负载均衡配置起来非常简单,与RAC数据库的实例负载和监听没有任何关系,因此也就不需要在集群节点进行任何设置,只要在客户端机器上的tnsnames.ora文件中添加负载均衡策略配置即可。这里以Linux客户端为例进行介绍。

(1) 修改/etc/hosts文件
编辑/etc/hosts文件,将RAC数据库相关的IP地址信息添加进去,例如:
192.168.12.231          node-rac1
192.168.12.232          node-rac2
192.168.12.230          node-vip1
192.168.12.240          node-vip2

(2) 查看RAC数据库的service_names
[oracle@node-rac1 ~]$ sqlplus "/as sysdba"
SQL*Plus: Release 11.1.0.6.0 - Production on Sun Sep 12 22:05:53 2010
Copyright (c) 1982, 2007, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options
NAME           TYPE        VALUE
---------------------- --------------     -------------
service_names    string        racdb
  这里需要说明的是,在配置RAC负载均衡时,客户端连接的是RAC数据库的服务名,而不是实例名,也就是SERVICE_NAME必须设置为“SERVICE_NAME = racdb”

(3) 修改Oracle客户端的配置文件tnsnames.ora
RACDB=
  (DESCRIPTION =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = node-vip2)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = node-vip1)(PORT = 1521))
    (LOAD_BALANCE = yes)
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = racdb)
    )
  )
这个配置文件的说明如下:
? LOAD_BALANCE = yes,表示启用连接负载均衡。在默认情况下“LOAD_BALANCE = no”,因此如果要配置负载均衡,必须添加设置“LOAD_BALANCE = yes”。启用负载均衡后,SQLNet会随机选择ADDRESS_LIST列表中的任意一个监听,然后将请求分发到此监听上,通过这种方式完成负载均衡。如果“LOAD_BALANCE = no”,那么SQLNet会按照ADDRESS_LIST列表中的顺序选择监听,只要这个监听正常就一直使用该监听。
? SERVICE_NAME = racdb,这个“racdb“是RAC数据库的服务名,而非实例名。

(4)在客户端测试负载均衡
在客户端开启一个sqlplus连接,执行如下操作:
SQL*Plus: Release 11.1.0.7.0 - Production on Sun Sep 12 21:24:55 2010
Copyright (c) 1982, 2008, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options
SQL> show parameter instance_name 
NAME         TYPE        VALUE
--------------------- --------------- -------------------
instance_name   string      racdb1
继续开启第二个sqlplus连接,执行如下操作:
SQL*Plus: Release 11.1.0.7.0 - Production on Sun Sep 12 21:31:53 2010
Copyright (c) 1982, 2008, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options
SQL> show parameter instance_name

NAME         TYPE        VALUE
-------------------- --------------  ------------------
instance_name  string      racdb2
按照这种方法,陆续打开多个sqlplus连接,可以看到,每次连接到的实例都在racdb1和racdb2之间变化,这样就实现了RAC数据库连接的负载均衡。

2. 服务器端的负载均衡
客户端的负载均衡解决了连接数据库的负载问题,但是由于连接是由客户端发起的,它并不知道RAC数据库集群中各个节点的繁忙状态和连接信息,因此负荷较大的节点仍然会增加新的连接,这样就可能导致RAC节点无法真正做到负载均衡。不过幸运的是,从Oracle 10g开始,服务器端负载均衡就可以根据RAC中各节点的负荷及连接数情况,将新的请求分配到集群中负载较低、连接数较少的节点上来,这样就从根本上实现了数据库的负载均衡,并且使客户端连接的负载均衡与服务器端的负载均衡可以配合使用,互不影响。
每个集群节点的负载情况是由PMON进程来定期更新的。PMON进程每3秒会将集群中每个节点的负载信息及连接数写入service_register中,当节点的负载发生变化时,将会立刻通知监听程序,最后由监听程序来决定将新的客户端连接分配到哪个节点上,通过这种方式,RAC数据库实现了真正的负载均衡。
服务器端负载均衡配置也非常简单,只需在各节点的tnsnames.ora文件中添加一个对连接到各个节点进行监听的配置,然后在初始化参数中设置remote_listener即可。
(1)修改服务器端的tnsnames.ora
只需添加如下内容即可:
LISTENERS_RACDB =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = node-vip2)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = node-vip1)(PORT = 1521))
  )

(2)修改参数remote_listener
查看RAC数据库的参数remote_listener:
SQL> show parameter remote_listener
NAME           TYPE      VALUE
---------------       -----------   -----------
remote_listener   string   LISTENERS_RACDB
可以看到,remote_listener已经设置为“LISTENERS_RACDB”了。
如果remote_listener的值为空,可以通过如下命令修改每个实例的remote_listener参数:
SQL> alter system set remote_listener='LISTENERS_RACDB' sid='node-rac1';
SQL> alter system set remote_listener='LISTENERS_RACDB' sid='node-rac2';
这样,服务器端的负载均衡就配置完成了。

二、 透明应用失败切换测试
透明应用失败切换(Transparent Application Failover,TAF),这是客户端的一种功能。TAF包含两层意思:失败切换是指客户端连接到某个实例,如果连接失败,可以连接到另外一个实例;透明应用是指客户端应用程序在连接失败后可以自动重新连接到另一个数据库实例,而这个过程对应用程序是不可见的。
要使用TAF功能,只需修改客户端的tnsnames.ora文件中的设置即可,结合前面介绍的客户端负载均衡功能,一个包含负载均衡和TAF功能的客户端设置如下:
RACDB =
  (DESCRIPTION =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = node-vip2)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = node-vip1)(PORT = 1521))
    (LOAD_BALANCE = yes)
    )
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = racdb)
        (FAILOVER_MODE =
        (TYPE=SELECT)
        (MODE=BASIC)
        (RETRY=3)
        (DEALY=5)
        )
    )
  )
其中的几个参数的含义如下:
? TYPE,用于指定FAILOVER_MODE的类型,有3种类型可选,分别是SESSION、SELECT和NONE。
? SESSION,表示当一个正在连接的会话实例发生故障时,系统可以自动将会话切换到其他可用的实例,而应用程序无需再次发起连接请求,但是实例故障时正在执行的SQL需要重新执行。
? SELECT,表示如果正在连接的实例发生故障,将使用游标和之前的快照继续执行SELECT操作,其他操作必须要重新执行。
? NONE,这个是客户端默认值,表示禁止SQL接管功能。
? MODE,表示连接模式,有两种类型,分别是BASIC和PRECONNECT。
? BASIC表示在建立初始连接时仅连接到一个节点,并且只有在发生节点故障时才连接到备用节点。
? PRECONNECT表示在建立初始连接时就连接到主节点和备用节点。
? RETRY:表示当前节点失败后,失败切换功能尝试连接备用节点的次数。
? DELAY:表示两次尝试之间等待的秒数。

设置完客户端监听后,重启客户端服务,然后执行下面的操作:
SQL*Plus: Release 11.1.0.7.0 - Production on Sun Sep 12 23:23:15 2010
Copyright (c) 1982, 2008, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options
SQL> COLUMN instance_name FORMAT a10
SQL> COLUMN host_name FORMAT a10
SQL> COLUMN failover_method FORMAT a15
SQL> COLUMN failed_over FORMAT a10
SQL> SELECT instance_name, host_name, NULL AS failover_type, NULL AS failover_method, NULL AS failed_over FROM v$instance UNION SELECT NULL, NULL, failover_type , failover_method, failed_over FROM v$session WHERE username = 'SYSTEM';

INSTANCE_ NAME  HOST_NAME   FAILOVER_TYPE   FAILOVER_METHOD   FAILED_OVER
-------------         ------------------    -------------       ---------------           -------------
racdb2            node-rac2       SELECT           BASIC                NO
此时,不断开此连接,然后在RAC数据库的任意一个节点上执行如下语句:
[oracle@node-rac2 ~]$ srvctl stop instance -d racdb -i racdb2 
关闭node-rac2节点的racdb2实例后,继续执行与前面那个SQL命令相同的语句,结果如下:
INSTANCE_ NAME  HOST_NAME   FAILOVER_TYPE   FAILOVER_METHOD   FAILED_OVER
-------------         ------------------    -------------       ---------------           -------------
racdb1            node-rac1       SELECT           BASIC                YES
从输出可以看到,上面的SQL会话已经切换到了node-rac1的实例racdb1上,也就是实现了故障自动切换功能。
至此,关于RAC数据库的功能测试已经验证完毕了。

Oracle RAC功能测试的更多相关文章

  1. 【Oracle 集群】Linux下Oracle RAC集群搭建之Oracle DataBase安装(八)

    Oracle 11G RAC数据库安装(八) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总 ...

  2. 【Oracle 集群】Linux下Oracle RAC集群搭建之基本测试与使用(九)

    Oracle 11G RAC数据库安装(九) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总 ...

  3. Oracle RAC客户端tnsnames.ora相关配置及测试

    1.Oracle RAC服务端/etc/hosts部分内容如下 2.查看服务端的local_listener和remote_listener参数 3.客户端tnsnames.ora配置参考 3.1 1 ...

  4. Oracle RAC安装部署文档

    1.    部署环境步骤 1.1 软件环境 操作系统:CentOS release 6.5(推荐使用5.*的系统)192.168.1.151    racnode1 192.168.1.152    ...

  5. oracle rac安装

    http://blog.chinaunix.net/xmlrpc.php?r=blog/article&id=4681351&uid=29655480 参考 1.百度文库中的收藏 2. ...

  6. Oracle RAC asm常用命令

    在Oracle RAC环境下,使用grid帐号执行 运行asmcmd进入asm命令模式,如: [grid@oradb-node1 ~]$ asmcmd ASMCMD> ASMCMD> du ...

  7. jdbc应用程序连接Oracle rac的URL写法:

    1.应用程序连接Oracle rac的URL写法: #Oracle(AMS) jdbc.driverClassName=oracle.jdbc.driver.OracleDriver jdbc.url ...

  8. oracle RAC的VIP和scan

    我们都知道Oracle RAC中每个节点都有一个虚拟IP,简称VIP,与公网IP在同一个网段. 没有VIP时,Oracle客户端是靠"TCP/IP协议栈超时"来判断服务器故障.而T ...

  9. Oracle RAC的日志体系

    Oracle Clusterware 不像数据库那样,有丰富的视图.工具可以用来辅助诊断,它的日志和trace文件是唯一的选择.但不像Oracle只有alert日志和几种trace文件,Oracle ...

随机推荐

  1. 【一步一步走(1)】远程桌面软件VNC的安装与配置

    近期在VPS上搭建Python Web环境.走了非常多弯路,借此记下. 先说说购买的VPS(PhotonVPS),我可不是打广告.仅仅是感觉这个VPS服务提供商还不错推荐给你大家,我之前也是体验过阿里 ...

  2. Vue 作用域插槽

    使用场景:复用子组件的slot,又可以使slot的内容不一样. <!DOCTYPE html> <html lang="zh"> <head> ...

  3. RTTI机制与作用(转)

    一.RTTI(Run-Time Type identification),通过运行时类型信息,程序能够使用基类的指针或引用来检查这些指针或引用所指向的对象的实际派生类型.面向对象的编程语言,想C++, ...

  4. Getting started with Chrome Dev Editor

    转自:https://github.com/GoogleChrome/chromedeveditor/blob/master/doc/GettingStarted.md Installation In ...

  5. sql server 数据加密

    select EncryptByPassPhrase('hksjlm',qlrmc)jmsj,* into jmqlr from qlr where qlbh in('5201411120005',' ...

  6. 织梦dedecms dede plus文件作用介绍及安全设置

    一.安装设置 1.默认的后台模块中心有很多模块. 这里除了"友情链接"模块其他都可以删掉.在后台可以先卸载再删除. 2.如果是一开始就不想要的话,安装版plus目录下进行如下操作. ...

  7. HTML5&amp;CSS3初学者指南

    介绍 网络时代已经到来.现在对人们来说,每天上网冲浪已经成为一种最为常见的行为. 一个典型的网页是由文本.图像和链接组成的.除去内容上的差异,不同网站的网页也具有不同的外观和感受,以实现在网络上建立自 ...

  8. excel导入sql server 文本被截断,或者一个或多个字符在目标代码页中没有匹配项 错误处理

    excel导入sql server 文本被截断,或者一个或多个字符在目标代码页中没有匹配项 错误处理方法: 方案1:修改注册表 出现文本被截断的原因是SQL Server的导入导出为了确定数据表的字段 ...

  9. VMware配置网络的3种方式:NAT、Host-Only、Bridged

    网络常识: 1.网络中对电脑的访问是通过ip定位的 就好像我们的身份证号,可以唯一辨识一个人.ip是用来区分网络中的电脑的,因此同一网络(准确讲是“网段”)中,ip地址不能相同.如果同一网络中有相同的 ...

  10. MySQL之mysql客户端工作的批处理一些使用手法

    通常我们会用mysql这个客户端程序来连接mysql库.这个通常是工作在交互式模式下的.如我们连接上mysql并执行如下操作: mysql -uroot -h127. -P3306 Welcome t ...