目标:
控制数据库
Oracle Net服务
- 使用Database Control创建另外的监听器
- 使用Database Control创建Oracle Net服务别名
- 使用Database Control配置连接时间故障切换
- 使用Listener特性
- 使用Oracle Net Manager 配置客户和中间层连接
- 使用TNSPING测试Oracle Net连接性
- 描述Oracle Net服务
- 描述OracleNet名称解析方法
网络设计考虑事项
- 网络复杂性问题
- 网络安全问题
- 对接现有系统与新增系统
网络配置
在设计一个Oracle基础结构时,可以从3种基本类型的网络配置中挑选
Oracle Net特性综述
Oracle Net是把Oracle网络粘合起来的粘合剂。它负责处理客户到服务器和服务器到客户通信,并且能够多在客户、中间层应用、WEB服务器和ORACLE服务器上配置。
连接性
- 多协议支持 -- 支持各种各样行业标准
- 多操作系统 -- 能够运行在诸多操作系统平台上
- JAVA和JDBC --JAVA软件能利用JDBC连接数据库
可管理性
- WEB应用 --支持多种连接解决方案。可通过中间层WEB或应用服务器建立连接,也可直接从WEB浏览器中建立。
- 位置透明性 -- ORACLE NET通过数据库服务的服务名抽像数据库的位置。服务名称由ORACLE NET集中管理。
- 目录命名 -- Directory Naming使得服务名称能通过一个集中式命名储存库来解析,它采取LDAP服务器的形式。
可缩放性
- ORACLE共享服务器 -- 一个可选配置,能支持大量的并发连接,同时又不要求啬物理资源需求
- 连接管理器 --Oracle Connection Manager是一个中间件解决方案,它提供三个可缩放特性。
- 多路复用 -- 该特性分组客户连接,然后把它们作为一个单独的多路复用连接发给ORACLE服务器,降低了服务器必须管理的连接总数量
- 网络访问 -- 网络访问可按IP地址,超始点、目标服务器或ORACLE服务器来限制客户访问
- 交叉协议连通性 -- 允许不同协议的客户和服务器通信,提代双向协议转换
安全
高级安全(Oracle Advanced Security) -- 支持各种加密、检验和身份验证机制
- 利用行业标准算法支持加密和检验,确保传输过程不被查看和篡改
- 利用令牌卡,生特测定选项,公用密鈅,以及基于凭证的身份验证,来进行用户身份验证
- 支持Kerberos实现统一验证
防火墙
ORACLE与以下两类防火墙开发商合作,ORACLE提供Oracle Net Application Proxy Kit给开发商,使数据库信息包顺利通过防火墙的同时保持高安全度
- IP过滤防火墙 -- 跟据IP信息过滤特定信息包
- 基于代理的防火墙 -- 阻止防火墙外部信息直接流入企业网络中。
可访问性
允许访问非ORACLE数据库,甚至是非数据库的数据源
- 异构服务Heterogeneous Service -- 由Oracle Transparent Gateway和Generic Connectivity组成,提供与非ORACLE数据源的双向通信和复制的能力
- 外部过程 -- 允许调驻留在数据外部的过程
在服务器上Oracle Net
Oracle 监听器是主要的Oracle服务器端网络构件,它是数据库实例监听连接请求的大耳朵。监听由listener.ora文件集中控制,但一个服务器上可以有多个监听器。
监听器响应连接请求的方式有以下四种
通常发生在监听器和数据库存在于同一服务器上,服务器被配置为专用服务器的情况下
- 客户在解析了服务名称后与监听器联系
- 监听器启动一个该连接专用的服务器进程
- 监听器把客户连接传递给服务器进程。
- 现在客户与专用服务器进程的连接已建成
通常发生在监听器和数据库不在同一服务器上,服务器被配置为专用服务器的情况下
- 客户在解析了服务名称后与监听器联系
- 监听器启动一个该连接专用的服务器进程
- 监听器把服务器进程的端口地址发送一个通知给客户
- 客户根据收到的通知和服务器进程建立连接
- 现在客户与专用服务器进程的连接已建成
- Oracle Shared Server:直接握手方法
通常发生在监听器和数据库存在于同一服务器上,服务器被配置为Oracle Shared Server的情况下
- 客户在解析了服务名称后与监听器联系
- 监听器把连接请求传递给负荷最小的调度程序
- 传递完成后,客户即已拥有到调度程序进程的连接,利用此连接即可与数据库进行通信
- Oracle Shared Server:重定向方法
通常发生在监听器和数据库不在同一服务器上,服务器被配置为Oracle Shared Server的情况下
- 客户在解析了服务名称后与监听器联系
- 监听器把信息发回给客户,进而把客户重定向到调度程序端口。监听器与客户之间的原始物理连接被断开
- 然后,客户给服务器或调度程序发送一个连接信号来建立一个网络连接
- 调度程序或服务器进程把一个收到通知发回给客户
- PMON(进程监视器)给监听器发送关于调度程序所服务的连接服务数量信息。监听器使用这个信息在调度程序之间保持一到的负荷
管理ORACLE监听器
用Oracle Net Manager管理监听器
windows下启动它的方法是:start->Program->Oracle 10g Programs->configuration and migration tools->Oracle net Manager
unix启动方法是:$oracle_home/bin目录中运行"./netmgr"
用Oracle Net Manager配置监听服务
在Oracle Net Manager的树形结构中各个图标对应的配置文件如下
图标 |
配置文件 |
|
Profile |
sqlnet.ora |
已知它用于配置客户端选用名称解析的优先顺序
|
Service Naming |
Tnsnames.ora
|
本地命名方法(Localnaming)的配置文件
|
Listeners |
Listener.ora |
配置一个或多个监听器 |
创建监听器
首次安装ORACLE时,ORACLE创建一个名为listener的监听器。它的默认设置如下
文件配置的配置段
|
设置 |
Listener Name
|
Listener |
Port
|
1521 |
Protocols
|
TCP/IP AND IPC
|
Host name
|
Default Host Name
|
SID NAME
|
Default Instance
|
添加监听器是要注意监听器的名称和监听端口必须唯一
listener.ora文件的监听器位置配置段中的参数如下
参数
|
描述
|
LISTENER
|
指出一个监听器定义的超始点。这实际上是正被定义的当前器的名称。默认名称是LISTENER
|
DESCRIPTION
|
描述每个监听位置
|
ADDRESS_LIST
|
含有监听器正在的那些位置有关的地址信息
|
PROTOCOL
|
指定用于本监听位置的协议
|
HOST
|
保存监听器所驻留在的那台计算机的名称
|
PORT
|
含有监听器正在上面监听的地址
|
SID_LIST_LISTENER
|
定义配置监听器所针对的ORACLE服务的列表
|
SID_DESC
|
描述第个ORACLE SID
|
GLOBAL_DBNAME
|
标识全局数据库名称。本项应该与当前ORACLE服务的INIT。ORA文件中的SERVICE_NAME项一致
|
ORACLE_HOME
|
给出服务器上ORACLE可执行程序的位置
|
SID_NAME
|
含有用于本ORACLE实例的ORACLE SID的名称
|
可选的listener.ora参数定义
Oracle Net Manager提示
|
listener.ora参数
|
描述 |
Startup Wait Time
|
STARTUP_WAIT_TIME
|
定义监听器在响应lsnrctl命令行工具中的一条STATUS命令之前等待多长时间
|
Save Configuration on Shutdown |
SAVE_CONFIG_ON_STOP
|
指定在一个LSNRCTL会话期内所发生的修改在退出时是否应该被保存起来 |
|
INBOUND_CONNECT_TIMEOUT |
定义监听器在一个会话得到启动时将等待的有效响应时间。默认设置是10秒 |
Log File
|
LOG_FILE
|
指定一个监听器将把日志信息写到那里。这个参数默认情况下是ON,并默认为%ORACLE_HOME%\network\log\listener.log |
Trace Level
|
TRACE_LEVEL 默认OFF
|
设置跟踪的细节级别。有效值包括:OFF、USER、SUPPORT、ADMIN |
Trace File
|
TRACE_FILE
|
指定监听器跟踪信息存放位置。默认是$ORACLE_HOME\network\trace`\listener.trc
|
Require a Password for listener Operations
|
PASSWORDS
|
在LSNRCTL命令行工具中执行管理任务所需要的密码
|
手工添加上面的参数时,必需把监听器的名称附在后面。如设置默认监听器的STARTUP_WAIT_TIME,则被创建的参数应该是:STARTUP_WAIT_TIME_LISTENER
用lsnrctl管理监听器
lsnrctl命令综述
- change_password --允许用户修改关闭监听器所需要的密码
- exit -- 退出LSNRCTL
- quit -- 执行和EXIT相同的功能
- reload -- 重新读取listener.ora文件,但不关闭监听器。如果该文件发生了变化,它将重新刷新监听器
- save_config -- 当从lsnrctl工具中对listener.ora文件进行了修改时,保存配置,并复制一个叫listener.bak的listener.ora文件
- services -- 列举出服务的一个汇总表及为每一个协议服务处理程序所建立和拒绝的连接信息个数
- start listener -- 启动指定监听器
- status listener -- 显示指定监听器状态
- trace -- 打开监听器的跟踪特性
- version -- 显示ORACLE NET版本
lsnrctl命令中SET命令选项
- current_listener -- 把当前监听器设置成指定监听器,或显示当前监听器
- displaymod -- 把lsnrctl工具的显示模式设置成RAW、COMPACT、NORMAL或VERBOSE
- inbound_connect_timeout -- 以秒为单位指定一个客户在网络连接建成后完成一个监听器连接请求的时间。如果监听器在这个分配时间内不能收到该请求,一个ORA-12525错误将被生成
- log_status -- 显示是否为该监听器打开了日志特性
- log_file -- 显示或设置日志文件名称
- log_directory -- 显示日志目录位置
- rawmod -- 显示关于STATUS和SERVICES的较详细信息(当它们被设置成ON时)。值:ON或OFF
- startup_waittime -- 设置监听器等待响应lsnrctl 命令行工具中的一条STATUS命令的时间长度
- save_config_onstop -- 在退出lsnrctl工具时保存对listener.ora文件的修改
- trc_level -- 把跟踪级别设置成OFF、USER、ADMIN或SUPPORT
- trc_file -- 设置监听器跟踪文件的名称
- trc_directory -- 设置监听器跟踪目录的名称
动态注册服务
所有在监听器中手工添加的数据库服务称为静态注册服务。相对地,Oracle10g数据库能自动向一个现有监听器注册它们的出场性---我们称该特性为“动态注册服务”。通过它管理员能利用一些特性,如负荷均衡和自动故障切换。PMON负责向监听器注册这些信息。
使用该特性的步骤:
- 设置init.ora或spfile.ora中的local_listener参数。把它设置成需要动态注册的监听器正在监 听的地址。例:local_listener=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST=NETPLUS) (PORT=1522)))
- 设置INSTANCE_NAME,把它设置成管理员想向监听器注册的那个Oracle实例的名称。例如:想动态注册orcl这个数据库,则设置为 INSTANCE_NAME=orcl
- 设置SERVICE_NAMES,它等价于Global Database Name,如果没有使用域名称结构,则设置成跟INSTANCE_NAME一样
使用多个监听器时的附加配置
连接时故障切换特性
此特性允许客户在TNSNAMES。ORA中指定多个监听器,如果连接到第一个监听器失败,则尝试连接下一个监听器。
TNSNAMES.ORA示例如下:
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP) ( HOST = DBPROD ) ( PROT = 1521 ))
(ADDRESS = (PROTOCOL = TCP) ( HOST = DBFAIL ) ( PROT = 1521 )) ##多了一个监听器地址
)
(CONNECT_DATA = (SERVICE_NAME = PROD ) ( SERVER = DECIATED)
)
)
透明应用故障切换(Transparent Application Failover)特性
它用于高可用性环境,它允许客户应用软件在当前连接出现故障时,自动重新连接到数据库,而且可选的继续执行一条已在运行的SQL语句。
PROD的数据库在DBPROD和DBFAIL这两个服务器上必须相同,本例才能工作。具体示例如下:
ORCL =
(DESCRIPTION =
(FAILOVER = ON
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP) (HOST=DBPROD) (PORT = 1521))
(ADDRESS = (PROTOCOL = TCP ) ( HOST = DBFAIL) (PORT = 1521))
)
(CONNECT_DATA= (SERVICE_NAME = PROD) (SERVER = DEDICATED)
(FAILOVER_MODE= (TYPE=SELECT) ( METHOD = BASICE))
)
)
客户负载平衡(Client Load Balancing)
该特性允许客户从一个监听器列表中随机地挑选,以达到平衡连接请求的效果。
该用特性需要添加LOAD_BALANCE参数,具体示例如下
ORCL =
(DESCRIPTION =
(LOAD_BALANCE= ON)(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP) (HOST = MWEISHAN-DELL) (PORT=1522))
(ADDRESS = (PROTOCOL = TCP) (HOST = MWEISHAN-DELL) (PROT=1521))
)
(CONNECT_DATA =
(SERVICE_NAME=ORCL)
)
)
诊断服务器端连接问题
无法连接服务的可能原因有很多,但是原理诊断一般的网络问题差不多
服务器端计算机与数据库检查
检查服务器计算机
确保服务器计算机是活动的,并且网络是通的。 在TCP网络上,我们可使用PING。以下结果显示网络正常
D:\Documents and Settings\gdy>ping netplus
Pinging netplus [192.168.1.1] with 32 bytes of data:
Reply from 192.168.1.1: bytes=32 time<1ms ttl="128">
Reply from 192.168.1.1: bytes=32 time<1ms ttl="128">
Reply from 192.168.1.1: bytes=32 time<1ms ttl="128">
Reply from 192.168.1.1: bytes=32 time<1ms ttl="128">
Ping statistics for 192.168.1.1:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms
D:\Documents and Settings\gdy>
检查数据库 <-这个方法好像不行
确保数据正在运行。使用SQL*PLUS进行本地连接,这类连接不使用 ORACLE监听器。方法是定义环境变量ORACLE_SID成想连接的那个实例,然后尝试连接。如果得到ORA-01034错误指ORACLE实例没有 运行,ORA-27101指当然无实例可供指定ORACLE_SID连接到。
检查数据库对所有用户是开放的
数据库管理员可以用限制模式打开一个数据库,没有相应授权的用户将无法连接。ORA-01035指示没有限制模式访问权限。
检查用户权限
确保正尝试连接的用户有CREATE SESSION权限。ORA-01045指未没有create session权限。解决方法是:grant create session to user_nmae
服务器端网络检查
检查监听器
使用
lsnrctl status检查监听器工作正常,并且相应的ORACLE服务工作正常监听.
检查GLOBA_DBNAME
如果客户正在使用主机命名方法,确保
GLOBAL_DBNAME参数被设置成计算机的主机名。这个参数在
listener.ora中
检查监听协议
检查网络协议工作正常。如果使用TCP/IP协议,可以使用
PING命令测试
检查服务器协议适配器
大多数平台下可用Oracle Universal Install检查已安装协议的列表。UNIX下可以用
$ORACLE_HOME/BIN/adapters工具
检查连接超时设置
如果收到ORA-12535或ORA-12547,那么可能客户在一个有效连接建成以前已经超时。如果正在使用慢速网络,可以尝试给listener.ora文件中的INBOUND_CONNECT_TIMEOUT参数设置更大值
服务器上ORACLE NET日志和跟踪
unix系统listener日志文件位置默认在$ORACLE_HOME/network/log
windows系统listener日志文件位置默认在%ORACLE_HOME%/network/log
服务器跟踪文件通常位于%ORACLE_HOME%/NETWORK/TRACE.跟踪可以被设置成OFF、USER、ADMIN或SUPPORT几个级表。跟踪中有一些代码对比表,具体如下
包关键字 包类型
NSPTAC ACCEPT[接受]
NSPTRF REFUSE[拒绝]
NSPTRS RESEND[重发]
NSPDA Data [数据]
NSPCNL Control [控制]
NSPTMK marker [标记符]
代码 包类型
1 Connect [连接]
2 Accept [接受]
3 Acknowledge [收到通知]
4 Refuse [拒绝]
5 Redirect [重定向]
6 Data [数据]
7 Null [即空数据]
9 Abort [异常终止]
11 Resend [重发]
12 Marker [标记符]
13 Attention [注意信号]
14 Control information [控制信息]
配置客户的ORACLE NET
客户连接一个ORACLE时必需提供“用户ID”、“密码”和“网络服务名称“,网络服务名称用于在网络在查找ORACLE服务。网络服务名称解析有五种 方法:Oracle Internet Directory、Extername Naming、主机命名(Host-name method)、Oracle Easy Connect以及本地命名(localnaming method)。
主机命名方法
使用该方法有四条件
- 必须使用作为网络协议
- 不必使用任何网络特性,比如Oracle Connection Manager <-->
- 监听器必须设置成GLOBA_DBNAME参数等于计算机名称
- 必须有一个名部命名服务(比如DNS)或一个可供客户使用的HOST文件
如果想主机命名方法优先,在sqlnet.ora文件的NAMES.DIRECTORY_PATH参数中把HOSTNAME放在最前。例子如下:
# sqlnet.ora Network Configuration File: D:\oracle\product\10.2.0\db_1\network\admin\sqlnet.ora
# Generated by Oracle configuration tools.
# This file is actually generated by netca. But if customers choose to
# install "Software Only", this file wont exist and without the native
# authentication, they will not be able to connect to the database on NT.
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (HOSTNAME,TNSNAMES, EZCONNECT)NAMES.DEFAULT_DOMAIN = gdy.vicp.net
使用主机命名方法配置同一主机上多个服务
方法如下:
- 在HOST文件针对不同服务配置不同的项
- 在LISTENER中也针对不同服务配置不同的监听
Oracle Easy Connect Naming方法
这是10G新引进的特性,,增加了端口和服务名称指定的需要的参数。使用它需要满足一些条件:
- Oracle Net Services 10g 必须安装在客户机上
- Oracle Net TCP/IP服务必须在客户和服务器上同时得到启用和支持
- 不允放任何高级连接描述符特性,比如连接池或外部过程调用
它的连接供述符构件如下:
语法构件 描述
// 可选:在通过一个URL或JDBC建立连接时使用
主机 必需:要连接到的主机或IP地址
端口 可选:要连接到的端口,默认值是1521
服务名称 代表数据库的服务名称。默认设置是数据库所在计算机的主机名,如果数据库服务名与主机名不同,则输入服务名。
本地命名方法(localnaming method)
该方法使用tnsname.ora文件配置.它通常位于%ORACLE_HOME%/NETWORK/ADMIN目录下。如果想改变它的位置,可以通过设 置TNS_ADMIN环境变量,该变量在Hkey_local_machine/software/oracle有可能找得到,呵呵,just有可能。
该方法只要明白原理,其实很简单,所以我们只要解释一下几个名词
网络服务名(Net Service Name) -- 它代表着你想连接到的数据库服务,当你在连接描述符中输入数据库服务名就是它了。
主机名 -- 这个都不会你就不要学电脑了,它代表数据库服务器的主机名或IP地址。有一点要注意,由于主机名称的解释是那么的差的不稳定,我建议使用IP地址(作者本人,而不是ORACLE公司)
服务器(service name) -- 可以是SID或是全局数据库名
诊断并解决客户端连接问题
请按以下方向检查
- 证实客户能够联系服务器
- 确定客户到大服务器采取的网络路径
- 证实本地命名配置文件
- 检查多客户网络配置文件
- 检查网络文件位置(如果使用TNSNAME。ORA)
- 检查NAMES.DIRECTORY_PATH参数
- 检查NAMES.DEFAULT_DOMAIN参数
- 检查得到安装的客户协议适配器
- 检查任何常用客户端错误代码
检查客户/服务器联系
PING吧,不用多说了
确定客户正用来到达服务器的网络路由
TRACERT命令
检查客户/监听器联系
使用
TNSPING,它会尝试联系一个ORACLE监听器。它证实客户能联系监听器,但不证实能实际连接到ORACLE服务器。该工具还能显示联系监听器所花费的时间。在后面跟一个数字可以告诉它尝试连接的次数。如:tnsping orcl 3
检查本地命名配置文件
检查客户网络配置文件
通常客户只有网络文件(比如tnsnames.ora和sqlnet.ora)的一个副本,但是如果机器上装了很多ORACLE的软件,有可能有多个网络文件在工作,需要确保这些文件是一致的,以免产生意想不到的效果。
检查网络文件位置
如果网络文件不在TNS_ADMIN环境变量指定的目录下,则ORACLE会找不到这些文件
检查NAMES.DIRECTORY_PATH
检查SQLNET.ORA文件中该参数设置值正确,并且名称解释的优先顺序正确.
检查NAMES.DEFAULT_DOMAIN
如果该参数被设置,如"vicp.net",当输入sqlplus sys/sys@prod时,命名会被附加上默认域名,变成"sqlplus sys/sys@prod.vicp.net"。 如果正确服务名称只是prod,那当然不可能正确解释了。
检查客户协议适配器
检查客户端代码
以下是常见代码
- ORA-12154 -- 有可能TNSNAMES。ORA放在不正确的位置
- ORA-12198和ORA-12203 -- 指出tnsnames.ora是列出的服务无法联系到。有可能指定的服务名称错误。
- ORA-12533 -- 指出读者配置ADDRESS不正确
- ORA-12541 -- 指出指定端口未找到相应监听器。
总结:这一章废话很多,以我认为想速成只需理解以下几句。监听器是数据库对外服务的大耳朵,客户通过它联系数据库。客户进行服务名称解释的可选方法有 五种方法:Oracle Internet Directory、Extername Naming、主机命名(Host-name method)、Oracle Easy Connect以及本地命名(localnaming method)。常用的包括主机命名(Host-name method)、Oracle Easy Connect以及本地命名(localnaming method)。
附录:
超级无聊而且重复的数据库命名大清理
- 网络服务名(Net Service Name) -- 它代表着你想连接到的数据库服务,当你在连接描述符中输入数据库服务名就是它了。出现在tnsname.ora中
- 服务器(service name) -- 可以是SID或是全局数据库名。出现在tnsnames.ora或listener.ora中
- Instance_name -- 用于动态注册数据库服务。把它设置成管理员想向监听器注册的那个Oracle实例的名称。例如:想动态注册orcl这个数据库,则设置为 INSTANCE_NAME=orcl 出现在init.ora或spfile.ora中