由于Oracle数据库通常需要在不同地方被访问,所以Oracle开发人员必须搞清楚数据库性能如何被网络通讯所影响。由Oracle提供的TNS(Transparent Network Substrate)允许不同数据库之间的分布式通讯。

作为一种分布式协议的TNS,允许远距离的系统之间的透明数据库通讯。TNS成为Oracle逻辑数据请求与远距离服务器的物理通讯之间的“绝缘体(insulator)”。由此,网络管理人员可以控制很多方面的网络性能优化,这样,Oracle管理人员就极少获得影响整个数据库性能(图A)的网络设置的控制权。

你可以通过使用一些关键设置来提高分布式处理的性能,这篇文章讨论了一些重要的设置。与分布式通讯相关的init.ora参数,比如tcp.nodelay,能够用于改变Oracle数据库中的信息包传输(packet-shipping)的机制。

本文中我也讨论了sqlnet.ora, tnsnames.ora和protocol.ora文件中的参数。你可以使用这些方法来改变TCP信息包的配置和大小,改变之后的信息包能够对网络透明层产生重要影响,以达到提高整个Oracle交流的目的。

Oracle NET不能允许Oracle管理人员优化Oracle网络参数以提高网络性能。事实上,绝大部分网络通讯都无法在Oracle环境中得到优化。Oracle *Net是位于特定网络协议栈的OSI模型中的一个层。

为了响应一个数据请求,Oracle *Net 获得数据并传递到协议栈。协议栈然后从这一数据建立一个信息包并传递到网络。Oracle *Net的作用是将数据传送到协议栈。

然而,DBA能够控制网络信息包的频率和大小。在Oracle中存在着丰富的可以更改信息包频率和大小的工具。一个简单的例子就是以更低的频率改变传送更大数量快照的时间间隔。

可以使用不同参数来优化不同服务器之间的Oracle *Net.请记住,网络优化是Oracle范围之外的操作,一个合格的网络管理人员应该经得起各种询问。使用一些设置可以影响网络信息包传送的频率和大小,这些设置包含在以下的参数文件。

protocol.ora文件—tcp.nodelay

sqlnet.oraserver 文件—automatic_ipc

sqlnet.oraclient 文件—break_poll_skip

tnsnames.ora文件—SDU, TDU

listener.ora文件—SDU, TDU, 以及queuesize

这些优化参数只影响Oracle *Net层的性能。现在让我们仔细地查看这些参数,以及这些参数如何被调整以提高Oracle *Net.

在缺省的情况下,Oracle *Net在传送数据之前一直等待,直到缓冲区填满。所以请求一般不会立即发送它们的目的地。当大量数据从一端流往另一端时候,这种情况很常见。添加一个protocol.ora文件,然后指定一个tcp.nodelay停止缓冲溢出延迟,都可以解决这一问题。

protocol.ora文件可以被指定以显示所有TCP/IP执行中的数据。这一参数可用于服务端和客户端。protocol.ora声明为:

tcp.nodelay = yes

指定这一参数使得TCP缓冲被跳过,以致可以立即发送每一个请求。然而请注意,网络通讯量会增大,因为更小的,更快的信息包被传递,所以会导致网络速度的减慢。

tcp.nodelay参数只有在TCP超时产生的时候才被使用。设置tcp.nodelay可以提高数据库服务器之间的大量数据通讯的性能。

sqlnet.ora中的automatic_ipc参数

automatic_ipc参数忽略了网络层,所以加快了数据库的逻辑连接。当automatic_ipc=on,Oracle *Net查看当地数据库是否定义以相同的名称,如果是,网络层将被忽略,因为此时的连接被直接转译为当地的IPC连接。这对于数据库服务器是有用的,但对于Oracle *Net客户端是没有什么用处。

只有当一个Oracle *Net连接于当地数据库的时候,automatic_ipc参数才有可能使用在数据库服务器上。如果不需要当地连接,将这一参数设置为off,由此可以提高所有Oracle *Net客户端的性能。

tnsnames.ora和listener.ora中的SDU和TDU参数

SDU(session data unit)和TDU(transport date unit)都位于tnsnames.ora and listener.ora文件中。SDU指定信息包的大小以传送到网络。在理想情况下,SDU不会超过MTU(maximum transmission unit)的大小。MTU是一个固定值,它取决于使用的实际网络操作。Oracle建议SDU设置相同于MTU.

注意

在7.3.3之前,SDU和TDU都固定于2K而且不能改变。

TDU是使用于Oracle *Net分组数据的缺省信息包。在理想情况下,TDU参数应该是SDU参数的倍数。SDU和TDU的缺省值为2,048,最大值都为32,767字节。

虽然在Oracle的立场上,总是建议客户能够更好地规划自己的应用,在有其它负载平衡方法的时候,尽量不要依赖于Oracle的Load Balance方法,但是往往在给客户配置完OracleRAC数据库以后,客户都会要求要测试负载平衡(Load Balance)和TAF(Transparent Application Failover),并且将这两个测试作为RAC是否安装成功的标准。

这是一件很无奈的事情,像把旁枝末节看作了主要功能,甚至有些买椟还珠的感觉,但是毕竟这是客户,更了解Oracle Load Balance(后文用LB表示),才可以更好满足客户需求。

本文不牵涉TAF(可以参看老熊关于TAF的系列文章PartI,PartII,PartIII),如何在Oracle10g之后版本中在服务器端service层面设置TAF,可以参看Metalink Note:404644.1。

对于LB,在Oracle10g之前有Client端和Server端两种,在Oracle10g之后又推出了Server端Service层面的LB配置,本文也不涉及Service层面的LB。

在Oracle9i,10g,11g版本中都适用的LB配置分为以下两种。

(1) Client Side Connect Time Load Balance

(2) Server SideListenerConnection Load Balance (此处的Listener用以跟10g之后的Server Side Service Load Balance区分开)

1. Client Side Connect Time Load Balance

既然是Client端的LB,那么也就是不需要在数据库服务器端配置任何参数,完全由客户端机器上的tnsnames.ora文件中对于TNS的配置来决定,实际上也就是LOAD_BALANCE参数。

看一个例子,下面这样的TNS配置就是启用了客户端的LB。

CLIENT_LOADBALANCE =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = node1-vip)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = node2-vip)(PORT = 1521))

(LOAD_BALANCE = yes)

)

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = rac_lb)

)

)

(LOAD_BALANCE = yes)指示SQLNet随机选择ADDRESS_LIST列表中的任意一个监听,将客户端请求发送到此监听上,通过这种方法来实现负载平衡。如果(LOAD_BALANCE = no)那么将会按照ADDRESS_LIST列表中的顺序选择监听,只要这个监听能够正常连接那么就使用该监听。

因此在某些负载平衡的解决方案中会使用(LOAD_BALANCE = no)但是在多个客户端或者应用服务器端配置顺序不同的ADDRESS_LIST,以此来实现人为的负载平衡。

如果在TNS配置时使用的是ADDRESS_LIST语法,那么必须显示设置LOAD_BALANCE = yes,默认值LOAD_BALANCE = no。

2. Server Side Listener Connection Load Balance

要实现server side load balance要求监听能够知道在整个RAC环境中的各节点负载情况,节点负载情况是由PMON进程来定期更新的,而要让PMON进程能够通知其它节点自己节点的负载情况则需要设置数据库初始化参数REMOTE_LISTENER。

在RAC数据库服务器端的每个节点上的tnsnames.ora文件中设置如下的TNS名称。

LISTENERS_RAC =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST=node1-vip)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST=node2-vip)(PORT = 1521))

)

)

然后设置REMOTE_LISTENER参数值为LISTENERS_RAC。

sql>ALTERsystemSETREMOTE_LISTENER='LISTENERS_RAC'scope=BOTH;

当某个实例的监听收到客户端连接请求,将会统筹考虑RAC环境中各个节点的负载情况,然后将该连接传递到具有最小负载的节点的最小负载实例上。

在10gR2版本之后,节点和实例的负载计算通过lbscore来完成,而lbscore则由两个动态值决定:”goodness” 和 “delta”,这两个值均由PMON来定期更新,计算公式如下:

Lbscore = Goodness (Received from PMON update)

Delta = New Delta (Received from PMON update)

在PMON定期更新的间隔,如果有新连接进入,那么lbscore的计算公式是:

Lbscore = Lbscore(previous) + Listener Delta

可以通过添加监听的trace(TRACE_LEVEL_LISTENER = 16)来获取lbscore的产生情况,更详细的文档请参看Metalink Note: 263599.1。

关于Failover,多说一句,其实Failover也有两种,一种是Connect Time Failover,由客户端TNS配置的(failover=on)参数控制,另外一种是TAF,由客户端TNS配置中的failover_mode参数控制。

jdbc:oracle:thin:@(description=

(ADDRESS_LIST =

(address=(protocol=tcp)(host=192.168.1.44)(port=1521))

(address=(protocol=tcp)(host=192.168.1.45)(port=1521))

(address=(protocol=tcp)(host=192.168.1.46)(port=1521))

(load_balance=yes)//表示是否负载均衡

)

(connect_data =

//(server = dedicated)//该参数表示专用服务器模式

(service_name=ORACMS)//要操作数据库的服务名

(failover_mode =//连接失败后处理的方式

(type=session)//TYPE =SESSION表示当一个连接好的会话的实例发生故障,系统会自动将会话切换到其他可用的实例,前台应用无须再度发起连接,但会话正在执行的SQL 需要重新执行。

(method=basic)//表示初始连接就连接一个接点

(retries=5)//连接失败后重试连接的次数

(delay=15)//连接失败后重试的延迟时间(以秒为单位)     )   ) ) -- 要点说明 1、load_balance该参数值为yes就是采用负载均衡模式连接,为no就是采用非负载均衡模式 2、method该参数值为basic就是表示初始连接只有一个连接节点,为preconnect就是表示初始连接所有的rac接点 3、server 参数值 dedicated表示专用服务器模式,没什么实际用处,可以去掉

oracle10客户端tnsname,连接Oracle RAC 的tnsname.ora设置相关推荐

  1. oracle rac通讯,连接Oracle RAC 的tnsname.ora设置

    转载自-- 由于Oracle数据库通常需要在不同地方被访问,所以Oracle开发人员必须搞清楚数据库性能如何被网络通讯所影响.由Oracle提供的TNS(Transparent Network Sub ...

  2. oracle 客户端可以连接11g rac vip 但是不能连接scan ip问题

    解决oracle客户端可以连接11g rac vip,但是不能连接scan ip问题 前段时间配置了一套hp ux11.31 oracle11g r2 rac,配置完成后,本机的客户端可以连接vip和 ...

  3. 客户端如何连接oracle,ORACLE的客户端如何连接到数据库

    如何连接oracle数据库及故障解决办法 如何配置才能使客户端连到数据库: 要使一个客户端机器能连接oracle数据库,需要在客户端机器上安装oracle的客户端软件,唯一的例外就是java连接数据库 ...

  4. 客户端远程连接Oracle数据库

    步骤如下: 1,在windows上安装oracle客户端: * 在oracle官网,要下载windows版本客户端基本包和工具包注意:要注册帐号才可以下载.http://www.oracle.com/ ...

  5. oracle 客户端无法连接,Oracle客户端无法连接服务端解决方法及步骤

    客户端无法连接服务端数据库,原因有网络,配置,文件访问权限,数据库服务是否已启动 等问题导致,一般排查的步骤如下: 1.检查操作系统级别网络是否通畅 ping 192.168.10.1 2.检查数据库 ...

  6. was连接oracle rac集群,Oracle 学习之RAC(九) 集群负载均衡及故障转移

    查看监听,使用grid用户 11grac1:11grac1-> lsnrctl status LSNRCTL for Linux: Version 11.2.0.3.0 - Production ...

  7. java jdbc oracle rac_JDBC连接oracle RAC数据库配置

    RAC的配置如下: node1:ip地址192.168.60.132,实例名:rac1,主机名:rac1 node2:ip地址192.168.60.144,实例名:rac2,主机名:rac2 RAC服 ...

  8. jdbc连接oracle rac服务器

    徐州需要连接第三方数据库,原数据库使用windows群集的,最近改为rac方式导致jdbc连接经常报错.处理方案: 1.连接串配置为: jdbc:oracle:thin:@(description=( ...

  9. JDBC连接Oracle RAC

    1)JDBC连接的配置方式 ,既然数据库本身已经支持了RAC,那么只要在JDBC连接字符串中将RAC的配置加上去即可, 根据资料和目前的业务需求,我们的针对HOST=10.87.25.37这台主机的数 ...

最新文章

  1. python查看方法作用_python学习笔记1,新手小白也能看得懂
  2. IntelliJ IDEA for Mac在MacOS模式下的版本控制/本地历史记录快捷键(VCS and Local History Shortcut)
  3. axios 是如何封装 HTTP 请求的
  4. 谷歌技术帮助美军方无人机识别更精准
  5. Java程序员最常犯的错误盘点之Top 10
  6. 【QT】QT字体详解
  7. add eds file in Codesys
  8. 元胞自动机与疏散模型的matlab算法,元胞自动机模拟多出口疏散模型的matlab实现...
  9. 服务器显示器无法调节分辨率,求救:分辨率调的太高,显示器无法显示怎么办?...
  10. 哪款国产ESD二极管可直接替代LC3311CCW?
  11. thinkadmin模板渲染与赋值
  12. 深入理解Java虚拟机之走进Java之Java的发展历程
  13. 农业种植大数据平台构建
  14. Spring @Retryable 和 @Recover
  15. Kubernetes:开源 K8s 管理工具 Rancher 认知
  16. Android Espresso 测试框架探究
  17. 究极花里胡哨的渐变是什么样子的?
  18. 计算机控制技术实验装置,计算机控制技术实验指导书(PTO)
  19. JVM编译过程与后期的优化
  20. 局域网 文档 服务器,局域网时间服务器

热门文章

  1. 前端学习(558):margin重叠
  2. html:(6):body标签和p标签
  3. linux mysql5.6.27源码安装和错误解决
  4. Qt如何将数据保存成CSV文件
  5. C++ 输入一行未知个数的整数
  6. C++中如何读取一个数的位数_求1000以内的水仙花数
  7. OpenFileDialog 打开文件对话框
  8. adb命令检测apk启动时间、内存、CPU使用情况、流量、电池电量等——常用的adb命令...
  9. javascript 类型及类型判断
  10. 深入理解构造函数和原型链