网络概述
网络环境挑战
- 配置网络环境
- 维护网络
- 调优、故障排除和监控网络
- 实现网络安全
- 整合遗留系统
简单网络:2层
- 网络连接客户端和服务器
- 客户端和服务器使用相同的语言或协议
从简单到复杂:n层
- 客户端可以是瘦客户端或PC
- 中间层可以包含应用程序和服务
- 服务器保存实际数据
复杂网络
Oracle 9i网络解决方案
- 连接
- 目录服务
- 可伸缩性
- 安全
- 可访问性
Oracle Net的主要特性
- 协议独立性
- 全面的平台支持
- 集成的GUI管理工具
- 多个配置选项
- 跟踪和诊断工具集
- 基本安全
连接:Oracle Net
使用HTTP连接数据库(用的不多)
目录服务
- 使用符合ldap的目录服务器解析网络别名的过程
- 客户端必须配置为使用LDAP兼容的服务器
Oracle Internet Directory(OID)
Oracle的LDAP兼容目录服务
提供以下特性:
- 与Oracle9i紧密集成
- 简化网络管理
- 提供安全可靠的目录结构
可伸缩性:共享服务器
- 允许大量用户同时连接到数据库。
- 数据库资源是共享的,从而实现高效的内存和处理使用
- 连接通过调度程序路由
- 服务器进程不是专用于每个客户机的
- 服务器进程根据需要为客户机进程提供服务
Oracle连接管理器(OCM)
Oracle连接管理器提供:
- 多路连接
- Cross-protocol连接
- 网络访问控制
先进的安全
加密
- 在网络节点之间进行编码
- DES, RSA, 3
身份验证
- 通过第三方服务和SSL (Secure Sockets Layer)认证用户
- Kerberos, Radius, CyberSafe
数据完整性
- 保证传输过程中的数据完整性
- MD5、SHA
高级加密
网络服务与防火墙
- Oracle与主要防火墙供应商合作提供防火墙支持
- Oracle Net Firewall Proxy Kit允许防火墙供应商为Oracle环境提供连接支持
- Oracle网络防火墙代理基于Oracle连接管理器
- Oracle支持两类防火墙:
- 基于代理的防火墙
- 有状态包检测防火墙
异构服务
支持访问遗留数据,就像它驻留在单个本地关系数据库中一样
允许Oracle过程调用访问非Oracle系统、服务或api
外部程序
- 用3GL语言编写的函数,可以从PL/SQL调用
- 允许开发人员使用其他工具比SQL或PL/SQL提供更多的灵活性
- 侦听器可以侦听外部过程调用
- 可以在服务器安装期间或之后配置与外部过程的连接
配置和管理工具
- Oracle Net管理器
- 用于配置和管理Oracle Net
- 基于客户端或服务器的工具
- 与Oracle企业管理器集成
- Oracle Net配置助手
- Oracle Net Control实用程序
- 侦听器控制实用程序
- Oracle连接管理器控制实用程序
- Oracle名称控制实用程序
Oracle NETCA
Oracle Net 体系结构
Oracle Net 连接
- Oracle Net用于在网络上的应用程序之间建立连接,具体如下:
- 网络配置
- 节点的位置
- 应用程序
- 网络协议
- 连接类型可以是:
- 客户机-服务器应用程序
- Java应用程序
- Web客户端应用
C/S(客户机-服务器)应用连接
OSI通信层
Oracle协议支持
- TCP/IP
- TCP/IP with SSL
- Named Pipes
- SDP
SDP SDP (Sockets Directory Protocol)是Infiniband网络对等体之间的工业标准有线协议。当在Infiniband网络上使用SDP时,它通过消除数据的中间复制和将大部分消息传递负担从CPU转移到网络硬件来减少TCP/IP的开销。
B(Web browsers)/S应用程序连接
Web浏览器可以通过以下方式连接到Oracle服务器:
- 使用应用程序Web服务器作为中间层,并配置以下任意一种:
- JDBC Oracle Call Interface(OCI)驱动程序
- Thin JDBC 驱动程序
- 通过HΤΤP直接连接到Oracle服务器
应用服务器:中间层
两种JDBC驱动程序
Oracle Java数据库连接(JDBC)驱动程序提供Java应用程序访问Oracle数据库。Oracle提供了两个JDBC驱动程序。
- JDBC OCI Driver 驱动程序是客户端/服务器Java应用程序使用的2级JDBC驱动程序。JDBC OCI驱动程序将JDBC调用转换为对OCI的调用,然后通过Oracle Net发送到Oracle数据库服务器。
- JDBC Thin Driver 是Java小程序使用的第4级驱动程序。JDBC Thin 驱动程序通过Java套接字建立到Oracle数据库服务器的直接连接。通过TTC和Oracle Net的轻量级实现,可以帮助访问数据库。
Java应用客户端
使用HTTP进行Web连接
浏览器直接连接
概念和术语
The Listener
Service Registration
一旦客户端请求到达侦听器,侦听器选择一个适当的服务处理程序(service handler)来处理客户端的请求,并将客户端的请求转发给它。侦听器通过服务注册(service registration)确定数据库服务及其服务处理程序是否可用。在服务注册期间,PMON进程——一个实例后台进程——向监听器提供以下信息:
- 数据库提供的数据库服务名称
- 与服务关联的实例名称及其当前和最大负载
- 实例可用的服务处理程序(调度程序和专用服务器),包括它们的类型、协议地址、当前和最大负载
此信息使侦听器能够适当地引导客户机的请求
如果在实例启动时侦听器未运行,则PMON无法注册服务信息。PMON尝试周期性地连接到侦听器,但是,在PMON启动后向侦听器注册之前可能需要60秒。要在侦听器启动后立即启动服务注册,请使用SQL语句ALTER SYSTEM REGISTER。这在高可用性配置中特别有用。
如果侦听器在注册相应的实例之前接收到传入请求,则侦听器拒绝该请求。
如果实例处于受限模式,则PMON指示侦听器阻止到该实例的所有连接。尝试连接的客户端会收到以下错误之一:
- ORA-12526: TNS:listener:所有适当的实例都处于受限模式
- ORA-12527: TNS:listener:所有适当的实例都在限制模式或阻塞新连接
Put It Together
网络配置模型
- 本地化管理
- 网络中每台计算机上的本地文件
- 集中管理
- ldap兼容的目录服务器
- Oracle名称服务器
命名方法概述
客户机应用程序使用命名方法在尝试连接到数据库服务时将连接标识符解析为连接描述符。
Oracle Net提供了五种命名方法:
- 主机命名
- 当地命名
- 目录命名
- Oracle名字
- 外部命名
配置文件
- ldap.ora
- names.ora
- tnsnames.ora
- listener.ora
- sqlnet.ora
三个关键参数!
连接描述符
- 数据库的位置
- 数据库服务的名称
- IP address
- Port Number
- Service Name
Basic Oracle Net Server端配置
监听进程
- 一个监听器进程可以监听多个数据库
- 多个监听器可以代表一个数据库监听,以执行负载平衡
- 监听器可以监听多个协议
- Oracle Net中监听器的默认名称是LISTENER
- 每个侦听器的侦听器名称必须是唯一的.ora文件
连接方法
当客户端向服务器发出连接请求时,侦听器执行以下操作之一:
- 生成一个服务器进程并将连接传递给它
- 在Oracle共享服务器配置中,将连接移交给调度程序
- 将连接重定向到调度程序或服务器进程
产生和传递连接
在 Oracle 数据库中,“监听”(Listener)是一个用于接收并处理数据库连接请求的组件。当客户端应用程序想要与 Oracle 数据库建立连接时,它们会发送连接请求到监听器,然后监听器将连接请求传递给数据库实例进行处理。
“产生连接”(Spawn Connection)指的是监听器接收到连接请求后,在数据库实例上为该连接请求生成一个新的数据库连接的过程。这个新的连接将用于在客户端应用程序和数据库之间进行通信。
“传递连接”(Bequeath Connection)指的是将已经建立的数据库连接从监听器传递到数据库实例,以便在客户端和数据库之间建立直接的连接。这种连接方式可以提供更快的数据传输和更低的网络开销。在传递连接中,监听器将客户端的连接请求转交给正在运行的数据库实例,并在客户端应用程序和数据库实例之间建立起点对点的连接。
因此,在 Oracle 中,监听器的作用是接收连接请求并管理连接的传递和生成过程,以确保客户端应用程序能够与数据库进行有效的通信。
直接移交连接
“直接移交连接”(直接连接传递,Direct Connection Handoff)是 Oracle 数据库中一种通过监听器直接将客户端连接请求转交给数据库实例进行处理的方法。与传统的 “重定向会话” 相比,直接移交连接可以提供更快的连接速度和更低的网络开销。
在直接移交连接过程中,客户端应用程序直接将连接请求发送给监听器,监听器在接收到连接请求后不再对连接请求进行复制或标记等操作,而是直接将连接请求转发给正确的数据库实例。这个过程可以通过配置监听器的 “DIRECT_HANDOFF_TTC_LISTENER” 参数来启用。
直接移交连接的优点包括更快的连接建立速度和更低的网络延迟,因为它避免了冗余的连接复制和标记等操作。另外,直接移交连接还可以提高负载均衡能力,因为它可以确保连接请求可以在不同的数据库实例之间平衡分布。
重定向会话
- 客户端使用配置好的协议与监听器建立连接,并向监听器发送连接报文。
- 侦听器检查是否定义了SID。如果定义了,监听器将生成一个新的线程或进程来服务新的连接。然后在侦听器和新进程或线程之间建立IPC连接。
- 新进程或线程从用户定义的空闲端口列表中选择一个新的TCP/IP端口,并将此信息传递回侦听器。
- 侦听器将这个新端口插入到重定向数据包中,并将其发送回客户端,然后重置客户端和侦听器之间的原始TCP套接字。
- 重新建立到重定向报文中指定的重定向地址的TCP连接,然后将连接报文转发给专用服务器进程。
- 专用服务器进程现在终于可以接受传入的连接,并将accept消息转发回客户端。
服务配置和注册
监听器可以通过两种方式配置:
- 动态服务注册
- 不需要在listener.ora文件配置
- 侦听器依赖于PMON进程
- 静态业务配置
- 用于Oracle8及更早版本
- 需要listener.ora的配置
- 需要Oracle企业管理器和其他服务
listener.ora 例子
LISTENER =
(ADDRESS_LIST =
(ADDRESS= (PROTOCOL= TCP) (Host= ip) (Port= 1521)))
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(ORACLE_HOME= /home/oracle)
(GLOBAL_DBNAME = ORCL.us.oracle.com)
(SID_NAME = ORCL)))
动态注册
在数据库初始化文件中配置动态服务注册。它不需要在listener.ora文件中进行任何配置。但是,监听器的配置必须与数据库初始化文件中的信息同步。
监听器在使用静态配置的 listener.ora 文件中的信息之前,会先使用通过服务注册获得的关于数据库和实例的动态服务信息。
其他服务(如外部过程、异构服务)也需要静态配置。
为保证服务注册功能正常,需要配置以下初始化参数:
- SERVICE_NAMES
- INSTANCE_NAME
SERVICE_NAMES参数的值默认为全局数据库名称,由初始化参数文件中的DB_NAME和DB_DOMAIN参数组成,在安装或创建数据库时输入。INSTANCE_NAME参数的值默认为安装或创建数据库时输入的SID。
缺省情况下,PMON在服务器上以TCP/IP的缺省本地地址1521端口向本地侦听器注册
如果满足以下条件,PMON可以注册到非默认侦听器:
- 定义了LOCAL_LISTENER初始化参数
- DISPATCHERS的LISTENERS属性初始化参数为Oracle共享服务器定义
Oracle 9i JVM: HTTP
- 侦听器可以配置为使用HTTP接受来自客户机的连接。
- 如果数据库是Oracle8i或更早版本,即使使用了Oracle9i侦听器,也要使用静态侦听器注册。
- 如果监听器和数据库都是Oracle9i,则在服务注册过程中动态进行配置。
LSNRCTL程序
侦听器控制实用程序命令可以从命令行或LSNRCTL提示符发出。
UNIX命令行语法:
$lsnrctl <command name>
提示语法:
LSNRCTL><command name>
控制非默认监听器:
LSNRCTL> set current_listener listener02
LSNRCTL命令
使用以下命令控制监听器:
- 启动监听器:
$lsnrctl START listener_name
- 停止监听器:
Slsnrctl STOP listener_name
SET和SHOW修饰符
使用SET更改侦听器参数:
LSNRCTL> SET trc_level ADMIN
使用SHow命令显示参数值:
LSNRCTL> SHOW trc_directory
命名方法配置
OV命名方式
客户机应用程序使用命名方法在尝试连接到数据库服务时将连接标识符解析为连接描述符。
Oracle Net提供了五种命名方法:
- 主机命名
- 本地命名
- 目录命名
- Oracle名字
- 外部命名
五个关键参数
用户通过提供连接字符串发起连接请求。连接字符串包括用户名和密码,以及连接标识符。连接标识符可以是连接描述符本身,也可以是解析为连接描述符的名称。最常见的连接标识符之一是网络服务名称,即服务的简单名称。下面的例子演示了一个使用完整连接描述符作为连接标识符的连接字符串和另一个使用网络服务名称sales作为连接标识符的连接字符串。
CONNECT scott@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=sales-server1)(PORT=1521))
(CONNECT DATA=(SERVICE NAME=sales.us.acme.com)))
Enter password: password
- User Name
- Password
- IP Address
- Port Nunber
- Service Name
简单连接命名
easy connect naming 方法允许客户端使用由主机名和可选端口和服务名组成的TCP/IP连接字符串连接到Oracle数据库服务器。
CONNECT username@[//]host[:port][/service_name][/server][/instance_name]
简单的命名方法不需要配置。
本地命名
客户端故障排除
以下错误码与客户端问题相关:
Oracle共享服务器的使用和配置
服务器配置
- 专用服务器进程
- 共享服务器进程
专用和共享服务器进程都有相同的工作:它们处理您给它们的所有SQL。当你向数据库提交一个SELECT * FROM EMP查询时,Oracle专用/共享服务器进程解析该查询并将其放入共享池(或者希望已经在共享池中找到它)。如果有必要,这个进程会提出查询计划,并执行查询计划,可能会在缓冲缓存中找到必要的数据,或者将磁盘上的数据读入缓冲缓存。
这些服务器进程是主力进程。很多时候,您会发现这些进程是系统上CPU时间消耗最多的进程,因为它们负责排序、求和、连接——几乎所有的事情。
专用服务器进程
如前所述,当我登录时,Oracle通常会为我创建一个新进程。这通常被称为专用服务器配置,因为服务器进程将在我的会话生命周期内专用于我。对于每个会话,一个新的专用服务器将以一对一的映射方式出现。这个专用服务器进程不是(根据定义)实例的一部分。我的客户端进程(任何试图连接到数据库的程序)将通过某些网络管道(如TCP/IP套接字)与这个专用服务器直接通信。这个服务器进程将接收我的SQL并执行它。如果有必要,它会读取数据文件,并在数据库的缓存中查找我的数据。它会执行我的更新语句。它将运行我的PL/SQL代码。它的唯一目标是响应我提交给它的SQL调用。
如果我们正在创建一个专用服务器连接,侦听器进程将为我们创建一个专用服务器。在UNIX上,这是通过fork()和exec()系统调用实现的(在UNIX中,初始化后创建新进程的唯一方法是通过fork())。新的专用服务器进程继承了侦听器建立的连接,我们现在物理上连接到了数据库。在Windows上,侦听器进程请求数据库进程为连接创建一个新线程。一旦创建了这个线程,客户端就被“重定向”到它,我们就在物理上建立了连接。
Oracle共享服务器
共享服务器的好处
- 减少针对一个实例的进程数
- 增加可能的用户数量
- 实现负载均衡
- 减少服务器空闲进程的数量
- 减少内存使用和系统开销
连接
处理请求
SGA 和 PGA
配置共享服务器
必需的初始化参数
- DISPATCHERS
- SHARED_SERVERS
可选初始化参数
- MAX_DISPATCHERS
- MAX_SHARED_SERVERS
- CIRCUITS
- SHARED_SERVER_SESSIONS
DISPATCHERS
- 指定为给定协议初始启动的调度程序的数量
MAX_DISPATCHERS
- 指定可以同时运行的调度程序进程的最大数目
- 发出ALTER SYSTEM命令来添加比初始启动时更多的分派器
SHARED_SERVERS
- 指定实例启动时创建的服务器进程数
MAX_SHARED_SERVERS
- 指定可启动的共享服务器的最大数量
- 允许根据请求队列的长度动态分配共享服务器
CIRCUITS
- 指定可用于入方向和出方向网络会话的虚拟电路总数
- 对总SGA大小有影响
SHARED_SERVER_SESSIONS
- 指定Oracle共享服务器允许的用户会话总数
- 通过设置该参数,可以为物理机保留用户会话
相关参数
其他可能需要调整的受Oracle共享服务器影响的初始化参数:
- LARGE_POOL_SIZE
- SESSIONS
验证设置
- 通过发出以下命令,验证调度程序在实例启动时已向侦听器注册:
$ lsnrctl services
- 通过创建单个连接来验证您是使用共享服务器连接的,然后查询V$CIRCUIT视图以显示每个共享服务器连接的一个条目。
专用vs共享
- 如果配置了共享服务器,并且在没有注册调度程序的情况下到达客户端连接请求,则该请求由专用服务器进程处理。如果你想要一个特定的客户端总是使用分派器,在连接描述符的CONNECT_DATA部分配置(server=shared)。例如:
sales=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=tcp)(HOST=sales-server)(PORT=1521))
(CONNECT_DATA=
(SERVICE_NAME=sales.us.acme.com)
(SERVER=shared)))
- 如果调度程序不可用,则拒绝客户端连接请求。
- 您可以配置客户端配置文件(sqlnet.ora文件)使用USE_DEDICATED_ SERVER=on。这将(server=dedicated)添加到客户端使用的连接描述符的CONNECT_DATA部分。
注意:如果USE_DEDICATED_SERVER被设置为ON,那么连接描述符中现有的(server=value)条目将被覆盖with (server=dedicated).
在以下情况下,必须使用专用服务器进程:
- 提交批作业(预计会有很少或没有空闲时间)。
- 以sysdba身份连接到启动、关闭或执行恢复。
- 在3-Tier系统中,专用服务器更好。
动态视图
V$CIRCUIT
V$SHARED_SERVER
V$DISPATCHER
V$SHARED_SERVER_MONITOR
V$QUEUE
V$SESSION