Oracle Networking
Overview
• 这一章讲述oracle数据库网络相关的配置和
  管理, 以及oracle共享服务器架构. 包含如下
  内容:
 – Oracle Net(之前被称为sqlnet)
   Oracle Net是oracle数据库CS架构(client-server)的
   关键组成部分, 有专门的工具用于设置和管理
   Oracle Net.
 – 专用服务器模式 vs. 共享服务器模式
   在专用服务器模式下, 一个客户进程与一个服务
   端进程进行交互; 而在共享模式下, 服务端进程
   被池化并且被客户端共享使用.
Oracle Net
                - Overview
• Oracle Net作用在如下方面:
 – 建立客户端到服务端的会话连接;
 – CS端的交互通过oracle net进行, 比如执行sql语句.
• Oracle Net通信协议是建立在当前操作系统所
  支持的通信协议之上的, 在11g版本之前oracle
  net几乎可以建立在任何流行的通信协议之上,
  在11g中为了遵循行业标准仅支持如下协议:
 –   TCP [with SSL]
 –   NMP(windows named pipes)
 –   SDP(sockets direct protocol)
 –   IPC
     客户进程与服务进程在同一台服务器.
Oracle Net
                 - Connect to Local
• 下面解释Oracle Net是如何建立会话的, 当客户端执行如
  下命令:
    CONNECT STORE/ADMIN123@ORCL11G
 该命令可以分解为:
  – connect        连接命令
  – STORE/ADMIN123 账户名和密码
  – @ORCL11G 连接到TNS名指定的数据库
  如果不指定@及后面的字符串那么则认为是连接到一个
  本地的数据库.
• Connect to a Local Instance
  按照上面的说明, 使用如下命令会建立到一个本地数据
  库的连接: CONNECT STORE/ADMIN123
  即使是连接到一个本地的数据库, 也需要使用到oracle
  net, 此时是基于IPC实现的. 连接到本地数据库是唯一不
  需要通过oracle监听器的. 通过环境变量ORACLE_SID决定
  具体连接到哪一个实例.
Oracle Net
                   - Connect Remote
• 使用connect进行连接时如果指定@TNSNAME时则会连接到一个远程数据
  库, 客户端需要从TNSNAME中得到远程数据库监听器的IP(或者
  hostname), 端口以及实例或者服务的名称, 之后才能开始建立连接. 通
  常而言使用tnsnames.ora文件进行配置, 客户端(eg, sqlplus)会通过环境
  变量TNS_ADMIN指定的位置找到该文件(在linux环境下首先会检查是否
  设置了ORALCE_HOME环境变量, 如果设置了则会在
  $ORACLE_HOME/network/admin目录下面查找该文件). TNS名通常配置
  如下(注意加粗体的部分):
   OCPDEMO =
       (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))
        (CONNECT_DATA =
         (SERVER = DEDICATED)
         (SERVICE_NAME = ocpdemo.localhost)))
  按照如上配置之后, 就可以通过conn user/passwd@OCPDEMO连接到指定的数
  据库了.
• tnsping
  此命令用于验证TNS名称配置是否正确, 它会连接到指定IP/HOST的端口, 并提
  示连接是否成功.
Oracle Net
         - Launch a Server Process
• 当数据库监听器(Listener)收到客户端的连接请
  求时, 在专用服务器模式下(dedicated server),
  监听器将会启动一个服务端进程并分配一个端
  口, 该端口号将被返回给客户端. 自此监听器的
  工作完成, 并开始等待下一个会话连接.
  Tip: 数据库监听器被停止时, 新的数据库会话
  无法被建立, 但是不会影响到已经建立的会话.
• Drill down
  使用下面的sql查看某个会话的操作系统进程号:
 select a.program, a.SPID from v$process a, v$session b where
 a.ADDR = b.PADDR and b.machine like 'CN%‘
Oracle Net
              - Create a Listener
• 监听器配置文件listener.ora存放在
  $ORACLE_HOME/network/admin目录下面, 该文
  件应该包含至少一个监听器的配置, 该配置需
  要指定监听器使用的协议, 主机以及端口信息,
  默认监听的端口是1521端口. 可以使用Net
  Configuration Assistant(netca)工具配置监听器.
  典型的监听器配置如下:
   LISTENER =
     (DESCRIPTION_LIST =
       (DESCRIPTION =
         (ADDRESS = (PROTOCOL = TCP)(HOST =
       localhost.localdomain)(PORT = 1521))
       )
     )
Oracle Net
              - Database Registration
• 监听器在接收到连接实例的请求时, 首先需要对该实例进行定位, oracle是
  通过注册的方式实现监听器对实例的识别的. 可以有两种注册方式:
  – 静态注册
    在listener.ora文件中为监听器指定实例列表. 示例为LIST2监听指定了ocp11g实
    例:
      LIST2 = ......
      SID_LIST_LIST2 =
                     (SID_LIST =
                     (SID_DESC =
                     (ORACLE_HOME = /u01/oracle/app/product/11.1.0/db_1)
                                 (SID_NAME = ocp11g)))
  – 动态注册
  这种情况下, 数据库实例自动注册到某个指定的监听器, 监听器的名称通
  过初始化参数local_listener指定, 如果没有指定则注册到监听1521端口的
  监听器. 数据库在启动时或者每隔一分钟会进行监听器的注册操作, 也可
  以使用如下命令手动注册: alter system register; 使用如下方式修改监听器
  参数配置:
     alter system set local_listener=list2;
  或者hard-code:
  alter system set local_listener='(address=(protocol=tcp)(host=127.0.0.1)(port=1522))';
Oracle Net
 - Techniques for Name Resolution
• 前面介绍了使用tnsnames.ora文件对远程数
  据库服务进行连接, 下面介绍一些其他的方
  法:
 – Easy Connect
 这种方式是在10g版本中引入的, 仅支持TCP协议,
 无需任何配置. 示例:
 connect store/admin123@jwlnx1.bplc.co.za:1522/ocp11g
 connect store/admin123@jwlnx1.bplc.co.za
 – Directory Naming and External Naming
 使用这种方式需要配置额外的LDAP服务器.
Oracle Net
             - Net Manager
• Net Manager工具用于管理Oracle Net相关的配置,
  包括: 监听器(listener.ora)/TNS配置(tnsnames.ora)
  以及网络配置(sqlnet.ora), 其中sqlnet.ora文件不是
  必须的.以oracle用户登录之后通过netmgr命令启
  动, 工具界面如下(红色部分表示该节点修改的文
  件):
Oracle Net
- A simple diagram
Oracle Shared Server
• 默认情况下oracle处在共享服务器模式, 在这种模式下会为每一
  个会话启动一个服务端进程, 这样就带来了可扩缩性的问题.
  oracle提供了共享服务器模式(老版本被称为MTS server)以缓解
  这个问题.
• Share Server Architecture
  共享服务器模式完全基于服务端实现. 在实例启动时, 分派进程
  (dispatcher)和共享服务器(shared server)进程被启动, 同时在SGA
  分配了相应的对象内存(queue memory), 另外在接收会话请求时
  监听器的处理方式也有相应的变化(在共享服务器模式下客户端
  进程与服务端分派进程进行通讯). 共享服务典型的处理方式如
  下:
     • 客户端发送SQL语句
     • 分派进程将该SQL放入到输入队列(input queue)中
     • 共享服务器从输入队列中读取, 执行该SQL语句并将执行结果被放入到响
       应队列(response queue)中
     • 分派器进程读取相应对象并将结果返回给客户端.
  所有的分派器进程共享一个输入队列, 每个分配器进程有各自的
  响应队列.
Oracle Shared Server
                 - UGA
• 在专用服务器模式下, 会为每个会话分配对应的PGA内存;
  在共享服务器模式下, PGA内存则不再被使用, 会话数据将
  会保存在称为UGA(user global area)的内存区域中, UGA是大
  池(large pool)中的内存区域, 可以通过large_pool_size参数
  配置大池的内存大小. 下图描述了共享服务器的工作方式:
Oracle Shared Server
                    - Configuration
• 需要配置如下参数以启动oracle共享服务器模式:
  – dispatchers
  启动的分派器进程个数, 通常设置为2
  – max_dispatchers
  最大的分派器进程个数, 需要通过手动的方式启
  动额外的分派器进程
  – share_servers
  启动的共享服务器进程个数, 如果没有设置默认为1
  – max_shared_servers
  共享服务器进程个数的最大值, oracle会自动启动额外
  的共享服务器进程以应对突发的大量连接.
  使用如下命令对上述参数进行设置:
  alter system set dispatchers='(dispatchers=2)(protocol=tcp)';
  alter system set shared_servers=20;
• When to use
  共享服务器模式应用于OLTP系统, 以应付大量并发的短时间事务.
  如果并发事务数超过了100, 那么可以考虑使用共享服务器模式.
END

4, OCP - oracle networking

  • 1.
  • 2.
    Overview • 这一章讲述oracle数据库网络相关的配置和 管理, 以及oracle共享服务器架构. 包含如下 内容: – Oracle Net(之前被称为sqlnet) Oracle Net是oracle数据库CS架构(client-server)的 关键组成部分, 有专门的工具用于设置和管理 Oracle Net. – 专用服务器模式 vs. 共享服务器模式 在专用服务器模式下, 一个客户进程与一个服务 端进程进行交互; 而在共享模式下, 服务端进程 被池化并且被客户端共享使用.
  • 3.
    Oracle Net - Overview • Oracle Net作用在如下方面: – 建立客户端到服务端的会话连接; – CS端的交互通过oracle net进行, 比如执行sql语句. • Oracle Net通信协议是建立在当前操作系统所 支持的通信协议之上的, 在11g版本之前oracle net几乎可以建立在任何流行的通信协议之上, 在11g中为了遵循行业标准仅支持如下协议: – TCP [with SSL] – NMP(windows named pipes) – SDP(sockets direct protocol) – IPC 客户进程与服务进程在同一台服务器.
  • 4.
    Oracle Net - Connect to Local • 下面解释Oracle Net是如何建立会话的, 当客户端执行如 下命令: CONNECT STORE/ADMIN123@ORCL11G 该命令可以分解为: – connect 连接命令 – STORE/ADMIN123 账户名和密码 – @ORCL11G 连接到TNS名指定的数据库 如果不指定@及后面的字符串那么则认为是连接到一个 本地的数据库. • Connect to a Local Instance 按照上面的说明, 使用如下命令会建立到一个本地数据 库的连接: CONNECT STORE/ADMIN123 即使是连接到一个本地的数据库, 也需要使用到oracle net, 此时是基于IPC实现的. 连接到本地数据库是唯一不 需要通过oracle监听器的. 通过环境变量ORACLE_SID决定 具体连接到哪一个实例.
  • 5.
    Oracle Net - Connect Remote • 使用connect进行连接时如果指定@TNSNAME时则会连接到一个远程数据 库, 客户端需要从TNSNAME中得到远程数据库监听器的IP(或者 hostname), 端口以及实例或者服务的名称, 之后才能开始建立连接. 通 常而言使用tnsnames.ora文件进行配置, 客户端(eg, sqlplus)会通过环境 变量TNS_ADMIN指定的位置找到该文件(在linux环境下首先会检查是否 设置了ORALCE_HOME环境变量, 如果设置了则会在 $ORACLE_HOME/network/admin目录下面查找该文件). TNS名通常配置 如下(注意加粗体的部分): OCPDEMO = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ocpdemo.localhost))) 按照如上配置之后, 就可以通过conn user/passwd@OCPDEMO连接到指定的数 据库了. • tnsping 此命令用于验证TNS名称配置是否正确, 它会连接到指定IP/HOST的端口, 并提 示连接是否成功.
  • 6.
    Oracle Net - Launch a Server Process • 当数据库监听器(Listener)收到客户端的连接请 求时, 在专用服务器模式下(dedicated server), 监听器将会启动一个服务端进程并分配一个端 口, 该端口号将被返回给客户端. 自此监听器的 工作完成, 并开始等待下一个会话连接. Tip: 数据库监听器被停止时, 新的数据库会话 无法被建立, 但是不会影响到已经建立的会话. • Drill down 使用下面的sql查看某个会话的操作系统进程号: select a.program, a.SPID from v$process a, v$session b where a.ADDR = b.PADDR and b.machine like 'CN%‘
  • 7.
    Oracle Net - Create a Listener • 监听器配置文件listener.ora存放在 $ORACLE_HOME/network/admin目录下面, 该文 件应该包含至少一个监听器的配置, 该配置需 要指定监听器使用的协议, 主机以及端口信息, 默认监听的端口是1521端口. 可以使用Net Configuration Assistant(netca)工具配置监听器. 典型的监听器配置如下: LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521)) ) )
  • 8.
    Oracle Net - Database Registration • 监听器在接收到连接实例的请求时, 首先需要对该实例进行定位, oracle是 通过注册的方式实现监听器对实例的识别的. 可以有两种注册方式: – 静态注册 在listener.ora文件中为监听器指定实例列表. 示例为LIST2监听指定了ocp11g实 例: LIST2 = ...... SID_LIST_LIST2 = (SID_LIST = (SID_DESC = (ORACLE_HOME = /u01/oracle/app/product/11.1.0/db_1) (SID_NAME = ocp11g))) – 动态注册 这种情况下, 数据库实例自动注册到某个指定的监听器, 监听器的名称通 过初始化参数local_listener指定, 如果没有指定则注册到监听1521端口的 监听器. 数据库在启动时或者每隔一分钟会进行监听器的注册操作, 也可 以使用如下命令手动注册: alter system register; 使用如下方式修改监听器 参数配置: alter system set local_listener=list2; 或者hard-code: alter system set local_listener='(address=(protocol=tcp)(host=127.0.0.1)(port=1522))';
  • 9.
    Oracle Net -Techniques for Name Resolution • 前面介绍了使用tnsnames.ora文件对远程数 据库服务进行连接, 下面介绍一些其他的方 法: – Easy Connect 这种方式是在10g版本中引入的, 仅支持TCP协议, 无需任何配置. 示例: connect store/admin123@jwlnx1.bplc.co.za:1522/ocp11g connect store/admin123@jwlnx1.bplc.co.za – Directory Naming and External Naming 使用这种方式需要配置额外的LDAP服务器.
  • 10.
    Oracle Net - Net Manager • Net Manager工具用于管理Oracle Net相关的配置, 包括: 监听器(listener.ora)/TNS配置(tnsnames.ora) 以及网络配置(sqlnet.ora), 其中sqlnet.ora文件不是 必须的.以oracle用户登录之后通过netmgr命令启 动, 工具界面如下(红色部分表示该节点修改的文 件):
  • 11.
    Oracle Net - Asimple diagram
  • 12.
    Oracle Shared Server •默认情况下oracle处在共享服务器模式, 在这种模式下会为每一 个会话启动一个服务端进程, 这样就带来了可扩缩性的问题. oracle提供了共享服务器模式(老版本被称为MTS server)以缓解 这个问题. • Share Server Architecture 共享服务器模式完全基于服务端实现. 在实例启动时, 分派进程 (dispatcher)和共享服务器(shared server)进程被启动, 同时在SGA 分配了相应的对象内存(queue memory), 另外在接收会话请求时 监听器的处理方式也有相应的变化(在共享服务器模式下客户端 进程与服务端分派进程进行通讯). 共享服务典型的处理方式如 下: • 客户端发送SQL语句 • 分派进程将该SQL放入到输入队列(input queue)中 • 共享服务器从输入队列中读取, 执行该SQL语句并将执行结果被放入到响 应队列(response queue)中 • 分派器进程读取相应对象并将结果返回给客户端. 所有的分派器进程共享一个输入队列, 每个分配器进程有各自的 响应队列.
  • 13.
    Oracle Shared Server - UGA • 在专用服务器模式下, 会为每个会话分配对应的PGA内存; 在共享服务器模式下, PGA内存则不再被使用, 会话数据将 会保存在称为UGA(user global area)的内存区域中, UGA是大 池(large pool)中的内存区域, 可以通过large_pool_size参数 配置大池的内存大小. 下图描述了共享服务器的工作方式:
  • 14.
    Oracle Shared Server - Configuration • 需要配置如下参数以启动oracle共享服务器模式: – dispatchers 启动的分派器进程个数, 通常设置为2 – max_dispatchers 最大的分派器进程个数, 需要通过手动的方式启 动额外的分派器进程 – share_servers 启动的共享服务器进程个数, 如果没有设置默认为1 – max_shared_servers 共享服务器进程个数的最大值, oracle会自动启动额外 的共享服务器进程以应对突发的大量连接. 使用如下命令对上述参数进行设置: alter system set dispatchers='(dispatchers=2)(protocol=tcp)'; alter system set shared_servers=20; • When to use 共享服务器模式应用于OLTP系统, 以应付大量并发的短时间事务. 如果并发事务数超过了100, 那么可以考虑使用共享服务器模式.
  • 15.