• 使用Enterprise Manager 执行以下操作:
– 创建其它监听程序
– 创建Oracle Net 服务别名
– 配置连接时故障转移
– 控制Oracle Net 监听程序
• 使用tnsping测试Oracle Net 的连接
• 确定何时使用共享服务器以及何时使用专用服务器
- Oracle Net 服务
使用Oracle Net 服务可建立从客户机或中间层应用程序到Oracle 服务器的网络连接。建立网络会话之后,Oracle Net 充当客户机应用程序与数据库服务器的数据信使。它负责建立并维护客户机应用程序和数据库服务器之间的连接,并负责在二者之间交换消息。Oracle Net(或模拟Oracle Net 功能的程序,如Java 数据库连接)位于需要与数据库服务器通信的每台计算机上。
在客户机计算机上,Oracle Net 是供应用程序连接数据库的后台组件。
在数据库服务器上,Oracle Net 包含一个称为“Oracle Net 监听程序”的活动进程,该进程负责协调数据库与外部应用程序之间的连接。
Oracle Net 服务最常见的用法是传入数据库连接。通过配置其它网络服务,可允许访问外部代码库(EXTPROC) 以及通过Oracle 异构服务将Oracle实例连接到非Oracle 数据源,如Sybase、Informix、DB2 和SQL Server。
- Oracle Net 监听程序
Oracle Net 监听程序(简称监听程序)是将所有非本地用户连接到Oracle 实例的网关。
单个监听程序可用于多个数据库实例以及成千上万个客户机连接。
Enterprise Manager 是访问监听程序的一种方式。可以控制实际监听程序以及口令保护和日志文件位置等一般参数的配置。
高级管理员还可以根据需要,使用标准操作系统(OS) 文本编辑器(如vi或gedit)手动编辑配置文件来配置Oracle Net 服务。
注:安装了用于独立服务器的Grid Infrastructure 后,Oracle Net 监听程序从其软件安装目录(<Grid_home>) 启动。需要从这一软件安装中运行监听程序,以便能够连接到ASM 实例。默认使用这一监听程序监听安装在同一服务器上的所有数据库实例。
- 建立网络连接
要建立客户机或中间层连接,Oracle Net 要求客户机了解下列事项:
• 运行监听程序的主机
• 监听程序监视的端口
• 监听程序使用的协议
• 监听程序处理的服务名
如果要让应用程序通过Oracle Net 监听程序连接到某服务,应用程序必须拥有关于该服务的信息,包括监听程序所驻留的地址或主机、监听程序接受的协议,以及监听程序监视的
端口。在确定监听程序的位置之后,应用程序所需的最后一项信息就是它所要连接到的服务名。
Oracle Net“名称解析”就是确定该连接信息的过程。
- 建立连接
Oracle Net 名称解析完成之后,连接请求将从用户或中间层应用程序(以下称为“用户进程”)传递到监听程序。监听程序会接收一个CONNECT数据包,之后会检查此CONNECT数据包请求的Oracle Net 服务名是否有效。
如果没有请求服务名(例如tnsping请求),监听程序会确认连接请求,此外不执行任何其它操作。如果请求的服务名无效,则监听程序会将错误代码传输给该用户进程。
- 用户会话
如果CONNECT数据包请求了一个有效的服务名,则监听程序将衍生一个新的进程来处理该连接。此新进程称为“服务器进程”。监听程序会连接到该进程并传递初始化信息,包
括用户进程的地址信息。此时,监听程序不再处理连接,所有工作都会传递到服务器进程。服务器进程将检查用户的验证身份证明(通常为口令),如果身份证明有效,则创建一个
用户会话。
专用服务器进程:建立会话后,服务器进程随即充当服务器上的用户代理。服务器进程负责以下工作:
• 对通过应用程序发出的所有SQL 语句进行语法分析,然后运行
• 在数据库缓冲区高速缓存中查找执行SQL 语句所需的数据块
• 从磁盘上的数据文件中将必要的数据块读入到系统全局区(SGA) 的数据库缓冲区高速缓存部分(如果SGA 中没有这些数据块)
• 管理所有排序活动。排序区是用于处理排序的内存区;它包含在与程序全局区(PGA) 关联的内存部分中
• 将结果返回到用户进程,以便应用程序可以处理这些信息
• 读取审计选项并将用户进程报告给审计目标
- 配置和管理Oracle Network 的工具
• Enterprise Manager 的“Net Services Administration(网络服务管理)”页
• Oracle Net Manager
• Oracle Net Configuration Assistant
• 命令行
配置和管理Oracle Network 的工具
使用以下工具和应用程序管理Oracle Network 配置:
• Enterprise Manager:提供了配置和管理Oracle Net 服务的集成环境。使用Enterprise Manager 可针对多个文件系统上的Oracle 主目录配置Oracle Net 服务,还可管理监听程序。
• Oracle Net Manager:提供一个图形用户界面(GUI),通过此界面可针对本地客户机或服务器主机上的Oracle 主目录配置Oracle Net 服务。通过Oracle Net Manager,可
针对本地客户机或服务器主机上的Oracle 主目录配置Oracle Net 服务。可以使用Oracle Net Manager 配置以下网络组件:
- 命名:定义简单的名称和连接标识符,并将它们映射至连接描述符以确定网络位置和服务标识。Oracle Net Manager 支持在本地tnsnames.ora文件或集中式目录服务中配置连接描述符
- 命名方法:配置将连接标识符解析为连接描述符的不同方法
- 概要文件:配置用于在客户机或服务器上启用和配置Oracle Net 功能的首选项
- 监听程序:创建和配置监听程序以接收客户机连接
• Oracle Net Configuration Assistant:安装Oracle 软件时通过Oracle Universal Installer 启动。使用Oracle Net Configuration Assistant 可配置Oracle DB 的监听协议地址和
服务信息。在典型的数据库安装期间,Oracle Net Configuration Assistant 会自动配置一个名为LISTENER的监听程序,该监听程序具有数据库的TCP/IP 监听协议地址。
如果执行定制安装,则Oracle Net Configuration Assistant 会提示配置所选择的监听程序名称和协议地址。在安装数据库之后,使用Oracle Net Configuration Assistant 进行初始网络配置。然后,可以使用Oracle Enterprise Manager 和Oracle Net Manager 配置和管理你的网络。
• 命令行:用于启动、停止监听程序进程或查看监听程序进程的状态。由操作系统用户启动或停止监听程序。如果未启动监听程序,则无法使用Enterprise Manager。
- 监听程序控制实用程序
可以使用lsnrctl命令行实用程序(或通过EM)控制
Oracle Net 监听程序。
[oracle@rtest ~]$ . oraenv
ORACLE_SID = [test0924] ?
The Oracle base remains unchanged with value /u01/app/oracle
[oracle@rtest ~]$ lsnrctl
LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 10-OCT-2013 15:50:26
Copyright (c) 1991, 2011, Oracle. All rights reserved.
Welcome to LSNRCTL, type "help" for information.
LSNRCTL> help
The following operations are available
An asterisk (*) denotes a modifier or extended command:
start stop status
services version reload
save_config trace spawn
change_password quit exit
set* show*
监听程序控制实用程序
启动实例时,监听程序进程会建立一个指向Oracle DB 的通信路径。随后,监听程序可接受数据库连接请求。
使用监听程序控制实用程序可控制监听程序。使用lsnrctl,可以:
• 启动监听程序
• 停止监听程序
• 检查监听程序的状态
• 根据配置文件参数重新初始化监听程序
• 动态配置多个监听程序
• 更改监听程序口令
该实用程序的基本命令语法为:
LSNRCTL> command [listener_name]
发出lsnrctl命令时,如果没有指定其它监听程序名称或执行SET CURRENT_LISTENER命令,此命令将作用于默认的监听程序(名为LISTENER)。如果监听程序名为LISTENER,则可省略listener_name参数。
注:在Grid Infrastructure 主目录和Oracle DB 主目录中都有lsnrctl 实用程序。在使用此
实用程序之前,务必将环境变量设置为合适的主目录。
- 监听程序控制实用程序的语法
可以使用命令行或LSNRCTL 提示符发出监听程序控制实用
程序的命令。
• 命令行语法:
$ lsnrctl <command name>
$ lsnrctl start
$ lsnrctl status
• 提示符语法:
LSNRCTL> <command name>
LSNRCTL> start
LSNRCTL> status
LSNRCTL> status
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rtest.localdomain)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.3.0 - Production
Start Date 07-OCT-2013 18:12:21
Uptime 2 days 21 hr. 44 min. 3 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/rtest/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=rtest.localdomain)(PORT=1521)))
Services Summary...
Service "test0924" has 1 instance(s).
Instance "test0924", status READY, has 1 handler(s) for this service...
Service "test0924XDB" has 1 instance(s).
Instance "test0924", status READY, has 1 handler(s) for this service...
The command completed successfully
监听程序控制实用程序的语法
可以从实用程序内部(提示符语法)或命令行发出lsnrctl命令。以下两个命令具有
相同的效果,但分别使用的是命令行语法和提示符语法:
命令行语法:
$ lsnrctl start
[oracle@rtest ~]$ lsnrctl start
LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 10-OCT-2013 15:57:37
Copyright (c) 1991, 2011, Oracle. All rights reserved.
Starting /u01/app/oracle/product/11.2.0/dbhome_1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 11.2.0.3.0 - Production
System parameter file is /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Log messages written to /u01/app/oracle/diag/tnslsnr/rtest/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=rtest.localdomain)(PORT=1521)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rtest.localdomain)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.3.0 - Production
Start Date 10-OCT-2013 15:57:37
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/rtest/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=rtest.localdomain)(PORT=1521)))
The listener supports no services
The command completed successfully
提示符语法:
$ lsnrctl
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 30-JUN-
2009 01:00:01
Copyright (c) 1991, 2009, Oracle. All rights reserved.
Welcome to LSNRCTL, type "help" for information.
LSNRCTL> start
命令行语法通常用于执行单个命令或脚本命令。如果计划执行若干个连续的lsnrctl命令,则使用提示符语法更高效。请注意,上面省略了listener_name参数,因此stop 命令会影响名为LISTENER的监听程序。如果监听程序受到口令的保护,则必须使用提示符语法。
请注意,如果监听程序名称不是LISTENER,则在命令语法中必须包含监听程序名称,或者使用SET CURRENT_LISTENER命令。假设你的监听程序名为custom_lis。以下是
使用提示符语法停止名为custom_lis的监听程序的两个示例:
LSNRCTL> stop custom_lis
Connecting to
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=host01)(PORT=5521)))
The command completed successfully
该示例与以下示例产生的结果相同:
LSNRCTL> set cur custom_lis
Current Listener is custom_lis
LSNRCTL> stop
Connecting to
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=host01)(PORT=5521)))
The command completed successfully
注:在上面的语法中,current_listener缩写成了cur。
使用命令行语法可产生相同的结果:
$ lsnrctl stop custom_lis
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 30-JUN-
2009 01:01:53
Copyright (c) 1991, 2009, Oracle. All rights reserved.
Connecting to
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=host01)(PORT=5521)))
The command completed successfully
- 使用SRVCTL启动和停止监听程序
如果配置了Oracle Restart 来监视你的监听程序,则你应使用SRVCTL来管理该监听程序。
对于由Oracle Restart 管理的任何监听程序,可以使用SRVCTL启动、停止它并查看其状态。示例包括:
• 使用SRVCTL中提供的命令显示帮助:srvctl –h
• 启动默认监听程序:srvctl start listener
• 停止默认监听程序:srvctl stop listener
• 启动名为mylistener 的监听程序:srvctl start listener –l mylistener
• 显示默认监听程序的状态:srvctl status listener
- 监听程序主页
单击Enterprise Manager 的“Database(数据库)”主页上的“Listener(监听程序)”链接可访问“Listener(监听程序)”主页。
在此页上,可看到:
• 最近24 小时内监听程序的状态和可用性
• 监听程序版本和Oracle 主目录
• 监听程序的第一个监听地址
• 用于启动监听程序的配置文件的位置
• 监听程序的启动时间和主机信息
• Oracle Restart 状态
要启动监听程序,请转到“Database(数据库)”主页,单击监听程序名称以打开“Listener(监听程序)”主页。单击“Stop(停止)”可停止运行的监听程序;单击
“Start(启动)”可启动未运行的监听程序。请以可启动和停止监听程序的操作系统用户身份登录到主机。
- “Net Services Administration(网络服务管理)”页
使用“Net Services Administration(网络服务管理)”页可针对多个文件系统上的Oracle 主目录配置Oracle Net 服务。
此页还提供管理监听程序的公用管理功能。可以使用“Net Services Administration(网络服务管理)”页配置和管理以下各项:
• 监听程序:添加、删除、启动和停止监听程序,以及更改其跟踪特性和事件记录特性。此外,还可查看监听程序的控制状态报表。
• 目录命名:可以定义简单的名称和连接标识符,并将定义的内容映射至连接描述符以确定网络位置和服务标识。将数据库服务、Oracle Net 服务和Oracle Net 服务别名保存到集中式目录服务中。
• 本地命名:将Oracle Net 服务名保存在tnsnames.ora文件中。
• 概要文件:配置sqlnet.ora参数。
• 文件位置:更改Oracle Net 服务的配置文件的位置。
- 创建监听程序
要创建Oracle Net 监听程序,请单击“Listener(监听程序)”属性页“Related Links(相关链接)”区域中的“Net Services Administration(网络服务管理)”。然后执行以下步骤:
1. 从“Administer(管理)”下拉列表中选择“Listeners(监听程序)”,然后单击“Go(执行)”。
2. 如果未输入主机首选身份证明,则出现“Host Login(主机登录)”页。输入用户名和口令,然后单击“Login(登录)”。
输入oracle以及密码oracle。
3. 单击“Create(创建)”。
4. 输入一个监听程序名称。此名称对此服务器必须是唯一的。单击“Add(添加)”添加一个监听程序地址。每个监听程序必须至少有一个监听程序地址。
- 添加监听程序地址
创建监听程序工作流的下一步是创建监听程序地址:
5. 选择网络协议。TCP/IP 是最常用的协议,也是默认协议。可以选择其它协议,如Internal Process Communication(内部进程通信,IPC),此协议通常用于连接到本地应用程序(驻留于数据库服务器上),或者选择外部代码库(EXTPROC) 以及带有bSSL 的TCP/IP。
注:使用“Other Services(其他服务)”选项卡可配置EXTPROC 协议。
6. 输入监听程序要监视的端口。Oracle Net 的默认端口是1521。如果选择使用1521 之外的端口,该监听程序或实例还需要进行其它配置。
7. 输入监听程序将在其上运行的服务器的名称或IP 地址。
8. 对监听程序而言,其它所有配置步骤都是可选项。单击“OK(确定)”保存地址。
唯一必不可少的配置是监听地址和名称。
9. 在“Create Listener(创建监听程序)”页上,复查刚创建的地址的有关信息,然后单击“OK(确定)”保存更改。
10.要启动新的监听程序,请从“Actions(操作)”下拉列表中选择“Start/Stop(启动/停止)”,然后单击“Go(执行)”。
- 数据库服务注册
监听程序必须了解实例名称以及实例的ORACLE_HOME位置,然后才能将客户机连接转发到实例。监听程序可通过下列两种方式查找此信息:
• 动态服务注册:Oracle8i和更高版本的实例会在启动数据库时向默认监听程序自动进行注册。默认监听程序不需要其它的监听程序配置。
• 静态服务注册:Oracle DB 的早期版本并不自动向监听程序进行注册,因此,要求监听程序配置文件包含一个列表,其中含有监听程序为之提供服务的所有数据库服务。
在较新版本中,如果存在以下情况,仍然可以选择使用静态服务注册:
- 监听程序所在的端口不是默认的1521 端口,又不希望将实例配置为使用非默认端口进行注册
- 应用程序要求进行静态服务注册
要添加静态数据库服务,请单击“Edit Listener(编辑监听程序)”页上的“Static Database Registration(静态数据库注册)”,然后单击“Add(添加)”按钮。输入服务
名称(与全局数据库名<DB_NAME>.<DB_DOMAIN>相同)、ORACLE_HOME路径和SID(与实例名相同)。单击“OK(确定)”。要使这些更改生效,必须重新加载(使用RELOAD命令)或重新启动监听程序。
服务名
SERVICE_NAMES 初始化参数指定客户机可用来连接到实例的一个或多个名称。实例向监听程序注册其服务名。客户机请求服务时,监听程序确定哪些实例提供所请求的服务,并将客户机路由到相应的实例。
可以指定多个服务名以区分同一数据库的不同用法,如下面的示例所示:
SERVICE_NAMES = sales.example.com, eurosales.example.com
还可以使用服务名来标识两个不同的数据库通过复制提供的单个服务。
如果未在该参数中使用域来限定名称,则Oracle 会使用DB_DOMAIN 参数的值来限定它们。如果未指定DB_DOMAIN,则不会向非限定的SERVICE_NAMES 值应用任何域。
处理客户机连接请求时,监听程序尝试将该参数的值与客户机连接描述符中SERVICE_NAME 参数的值进行匹配。如果客户机连接描述符使用SID 参数,则监听程序
不会尝试映射这些值。该参数的值通常来自初始化参数文件中DB_NAME 和DB_DOMAIN 参数的组合(DB_NAME.DB_DOMAIN),但此值也可以包含客户机用于标
识服务的任何有效名称。
- 命名方法
• 本地命名:使用本地配置文件
• 目录命名:使用符合LDAP 的集中式目录服务器
• 外部命名:使用受支持的非Oracle 命名服务
命名方法
Oracle Net 支持以下几种命名方法:
• 简便连接命名:使用简便连接命名方法,客户机可使用如下所示的TCP/IP 连接字符串(由主机名、可选端口和服务名组成)连接到Oracle DB 服务器:
CONNECT username/password@host[:port][/service_name]
简便连接命名方法不需要进行配置。
• 本地命名:本地命名方法将连接描述符(由网络服务名标识)存储在客户机上的名为tnsnames.ora的本地配置文件中。
• 目录命名:为了访问数据库服务,目录命名方法将连接标识符存储在符合轻型目录访问协议(LDAP) 的集中式目录服务器中。
• 外部命名:外部命名方法将网络服务名存储在受支持的非Oracle 命名服务中。
受支持的第三方服务包括:
- 网络信息服务(NIS) 外部命名
- 分布式计算环境(DCE) 单元目录服务(CDS)
- 简便连接
• 默认启用此方式
• 不需要进行客户机配置
• 仅支持TCP/IP(无SSL)
• 不支持高级连接选项,如:
– 连接时故障转移
– 源路由
– 负载平衡
SQL> CONNECT
hr/hr@db.us.oracle.com:1521/dba11g
使用简便连接时,你需要在连接字符串中提供Oracle Net 连接所需的所有信息。简便连接
的连接字符串采用以下形式:
<username>/<password>@<hostname>:<listener port>/<service name>
监听程序端口和服务名为可选项。如果未提供监听程序端口,Oracle Net 假定使用的是默认端口1521。如果未提供服务名,Oracle Net 假定连接字符串中提供的数据库服务名与主机名是相同的。
假定监听程序使用TCP 监听端口1521,并使用SERVICE_NAMES=db和DB_DOMAIN=us.oracle.com实例参数,则显示的连接字符串可简化为:
SQL> connect hr/hr@db.us.oracle.com
注:SERVICE_NAMES初始化参数可接受多个逗号分隔的值。这些值中只能有一个db,此方案才能起作用。
- 本地命名
• 需要客户机名称解析文件
• 支持所有的Oracle Net 协议
• 支持高级连接选项,如:
– 连接时故障转移
– 源路由
– 负载平衡
SQL> CONNECT hr/hr@orcl
使用本地命名时,用户可为Oracle Net 服务提供别名。Oracle Net 会根据本地已知服务的列表来检查别名,如果发现匹配名称,会将别名转换为主机、协议、端口和服务名。
本地命名的一个优势是,数据库用户仅需要记住一个短别名,而不必记住简便连接所需的长连接字符串。
本地已知服务列表存储在以下文本配置文件中:
<oracle_home>/network/admin/tnsnames.ora
这是tnsnames.ora文件的默认位置,但是,也可以使用TNS_ADMIN环境变量将该文件放到其它位置。
如果组织的Oracle Net 服务配置不经常更改,则适合使用本地命名。
本地命名的tnsnames.ora如下:
TEST0924 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rtest.localdomain)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = test0924)
)
)
- 目录命名
• 需要加载了Oracle Net 名称解析信息的LDAP:
– Oracle Internet Directory
– Microsoft Active Directory Services
• 支持所有的Oracle Net 协议
• 支持高级连接选项
使用目录命名时,用户可为Oracle Net 服务提供别名。Oracle Net 会根据外部已知服务的列表来检查别名,如果发现匹配名称,会将别名转换为主机、协议、端口和服务名。与本地命名一样,数据库用户只需要记住短别名。
目录命名的一个优势是,一旦将新的服务名添加到LDAP 目录,此服务名便可供用户在连接时使用。使用本地命名时,必须先由数据库管理员(DBA) 分发更新的tnsnames.ora文件(这些文件包含已更改的服务名信息),用户才能连接到新服务或修改后的服务。如果组织的Oracle Net 服务配置经常更改,则适合使用目录命名。
- 外部命名方法
• 使用受支持的非Oracle 命名服务
• 包括:
– 网络信息服务(NIS) 外部命名
– 分布式计算环境(DCE) 单元目录服务(CDS)
外部命名方法
外部命名方法将Oracle Net 服务名存储在受支持的非Oracle 命名服务中。受支持的第三方服务包括:
• 网络信息服务(NIS) 外部命名
• 分布式计算环境(DCE) 单元目录服务(CDS)
从概念上讲,外部命名类似于目录命名。
- 配置服务别名
请通过选择“Directory Naming(目录命名)”而不是“Local Naming(本地命名)”,可配置目录命名的服务别名。
注:如果尚未配置目录命名,则无法选择“Directory Naming(目录命名)”选项。
1、要创建本地Oracle Net 服务别名,从“Net Services Administration(网络服务管理)”页上的“Administer(管理)”下拉列表中选择“Local Naming(本地命名)”,然后单击“Go(执行)”。
2、然后单击“Create(创建)”。
3、在“Create Net Service Name(创建网络服务名)”页的“Net Service Name(网络服务名)”字段中输入一个唯一名称。(此名称是用户输入的要使用的别名)。输入要连接到的数据库的服务名或系统标识符(SID)。
4、然后单击“Add(添加)”按钮,输入服务名的地址。
5、对于地址,输入监听程序连接所需服务要使用的协议、端口和主机。
/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
TEST1011 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.27.1.208)(PORT = 1522))
(LOAD_BALANCE = yes)
)
(CONNECT_DATA =
(SERVICE_NAME = test0924)
)
)
- 高级连接选项
对于本地命名和目录命名,Oracle Net 支持下列高级连接选项:
• 连接时故障转移
• 负载平衡
• 源路由
高级连接选项:可以通过多个监听程序协议地址访问某个数据库服务时,可以指定使用这些地址的顺序。
可以随机选择这些地址,也可以依次尝试这些地址。如果有多个监听程序可用(如Oracle Real Application Cluster (RAC) 配置),Oracle Net 可以利用监听程序故障转移和负载平衡功能以及Oracle Connection Manager 源路由功能。
如果启用了“连接时故障转移”,则一个别名下将列出两个或多个监听程序地址。如果第一个地址不可用,则尝试使用第二个地址。Oracle Net 会始终按列出的顺序试用地址,直至遇到起作用的监听程序,或者试用的所有地址均失败。
透明应用程序故障转移(TAF) 是一项客户机功能,它使客户机可以在数据库实例发生故障时重新连接到正常运行的数据库。服务器使用通知在客户机上触发TAF 回调。
如果启用了“负载平衡”,Oracle Net 会从地址列表中随机选择一个地址。运行时连接负载平衡功能可以在多个分派程序之间平衡活动的连接数,从而改进连接性能。在RAC 环境中,连接池负载平衡还能在多个实例之间平衡活动的连接数。
“源路由”与Oracle Connection Manager 一起使用,后者充当Oracle Net 通信的代理服务器,使Oracle Net 通信可以安全地通过防火墙进行路由。Oracle Net 将地址视为中继列表,首先连接到第一个地址,然后请求从第一个地址传递到第二个地址,直至到达目标位置。
它与故障转移或负载平衡的不同之处在于,每次进行连接时都会用到所有的地址。
- 测试Oracle Net 连接
tnsping实用程序测试Oracle Net 服务别名:
• 确保客户机与Oracle Net 监听程序之间的连接
• 不验证所请求的服务是否可用
• 支持简便连接名称解析:
tnsping host01.example.com:1521/orcl
• 支持本地命名和目录命名:
tnsping orcl
测试Oracle Net 连接
Oracle Net 中的tnsping相当于TCP/IP 的ping 实用程序。它提供了快速测试,可验证到目标位置的网络路径是否正常。例如,在命令行窗口中输入tnsping orcl。
该实用程序可验证主机名、端口以及协议是否可到达监听程序,它并不实际检查监听程序是否处理服务名。tnsping实用程序还会显示配置文件的位置。当系统中具有多个
ORACLE_HOME位置时,这很有用。
- 用户会话:专用服务器进程
使用专用服务器进程时,服务器进程与用户进程之间的比例是一比一。每个服务器进程都会使用系统资源,包括CPU 周期和内存。
在负荷很高的系统中,由于专用服务器进程占用了内存和CPU 资源,其成本可能难以承受,还可能对系统的可伸缩性产生负面影响。如果专用服务器体系结构的资源需求对系统产生了负面影响,则你有下列两种选择:
• 通过增加更多的内存和额外的CPU 容量来增加系统资源
• 使用Oracle 共享服务器进程体系结构
- 用户会话:共享服务器进程
每个参与共享服务器进程体系结构的服务均至少具有一个(通常为多个)分派程序进程。连接请求到达时,监听程序将不衍生专用服务器进程,而是维护一个可用于每个服务名的分派程序以及每个分派程序的连接负载(并发连接数量)列表。
连接请求将路由至负载最小的分派程序,该程序将为给定服务名提供服务。用户在会话持续时间内均一直连接至相同的分派程序。
与专用服务器进程不同,单个分派程序可以管理数以百计的用户会话。实际上分派程序并不处理用户请求的工作,而是将用户请求传递到位于SGA 共享池部分
的公用队列。
共享服务器进程接管专用服务器进程的大部分工作,将请求从队列中拉出并进行处理,直至完成该请求。
由于单个用户会话的请求可能由多个共享服务器进程来处理,因此通常存储在PGA 中的大部分内存结构必须位于共享内存位置(默认情况下在共享池中)。但是,如果配置了大型池,或者为自动内存管理设置了SGA_TARGET,则这些内存结构会存储在SGA 的大型池部分。
- SGA 和PGA
Oracle 共享服务器:在SGA 中存放用户会话数据。
调整SGA 大小时,务必将共享服务器内存要求考虑在内。
使用专用服务器或共享服务器时,SGA 和PGA 的内容不同:
• 所有SQL 语句的文本和语法分析形式均存储在SGA 中。
• 游标状态包含SQL 语句的运行时内存值,例如检索的行等。
• 用户会话数据包括安全性和资源用量信息。
• 堆栈空间包含进程的局部变量。
技术注释
SGA 和PGA 中的更改对用户而言是透明的;但是,如果要支持多个用户,则需要增大LARGE_POOL_SIZE初始化参数。每个共享服务器进程均必须访问所有会话的数据空间,以便任何服务器均可以处理来自任何会话的请求。在SGA 中为每个会话分配数据空间。
可通过设置PRIVATE_SGA资源限制参数来限制每个会话可以分配的空间数量,该参数位于用户概要文件“General(一般信息)”页的“Database Services(数据库服务)”区域中。
- 共享服务器:连接共享
使用连接共享功能,数据库服务器可以使空闲会话超时,从而使用其连接为活动会话提供服务。空闲会话逻辑上仍处于打开状态,当该会话下次发出请求时会自动重新建立物理连接。因此,Web 应用程序可使用现有硬件来满足大量并发用户的需求。连接共享是通过共享服务器进行配置的。
上图中,Oracle DB 服务器配置了255 个连接。某个客户机的空闲期已超出了指定时间。通过连接共享,此连接可用于第256 个传入的客户机连接。如果空闲客户机还有其它任务要执行,通过另一个客户机的空闲连接可为该客户机重新建立连接。
- 不能使用共享服务器的情况
不能使用共享服务器执行某些类型的数据库工作:
• 数据库管理
• 备份和恢复操作
• 批处理和批量加载操作
• 数据仓库操作
不能使用共享服务器的情况
Oracle 共享服务器体系结构是一个有效的进程和内存使用模型,但是并不适用于所有的连接。由于存在公共请求队列,并且大量用户会共享分派程序响应队列,所以当存在必须处理大批数据的操作时共享服务器的性能并不是很好,如处理仓库查询或执行批处理时。使用Oracle Recovery Manager 进行备份和恢复会话时,也会处理大量的数据集,因此也必须使用专用连接。
许多管理任务不能(无法)使用共享服务器连接执行,其中包括启动和关闭实例、创建表空间和数据文件、维护索引和表、分析统计信息,以及通常由DBA 执行的其它多个任务。所有DBA 会话都必须选择专用服务器。
- 配置数据库之间的通信
• 在站点之间发送数据或消息时需要在双方站点上进行网络配置。
• 必须配置以下项:
– 网络连接(例如TNSNAMES.ora)
– 数据库链接
CREATE DATABASE LINK <remote_global_name>
CONNECT TO <user> IDENTIFIED BY <pwd>
USING '<connect_string_for_remote_db>';
用于创建固定用户数据库链接的语法。
配置数据库之间的通信
数据库链接是一个数据库中的方案对象,通过该对象可以访问另一个数据库中的对象。另一个数据库不必是Oracle DB 系统。但是,要访问非Oracle 系统,必须使用Oracle 异构服务。
要创建专用数据库链接,必须具有CREATE DATABASE LINK系统权限。要创建公用数据库链接,必须具有CREATE PUBLIC DATABASE LINK系统权限。还必须具有对远程Oracle DB 的CREATE SESSION系统权限。
应用程序使用数据库链接访问远程数据库时,Oracle DB 会代表本地请求在远程数据库中建立一个数据库会话。创建数据库链接时使用的CONNECT TO子句确定了在远程数据库上建立连接的方式。可以创建固定用户、当前用户和已连接用户的数据库链接。当前用户链接只能通过Oracle 高级安全选件使用。创建数据库链接之后,可以使用它来引用另一个数据库上的表和视图。在SQL 语句中,可以通过将@dblink追加到表名或视图名来引用另一个数据库上的表或视图。可以查询另一个数据库上的表或视图,或对该表使用任意INSERT、UPDATE、DELETE或LOCK
TABLE语句。
- 连接到其它数据库
tnsnames.ora
REMOTE_ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)
(HOST = host02.example.com)
(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl.example.com)
)
)
显示了在创建数据库链接之前需要的tnsnames.ora条目。
SQL*Plus
CONNECT hr/hr@orcl;CREATE DATABASE LINK remote
CONNECT TO HR IDENTIFIED BY HR
USING 'REMOTE_ORCL';
SELECT * FROM
employees@remote
显示了一个名为REMOTE的固定用户数据库链接,它使用连接字符串REMOTE_ORCL连接到用户HR。
创建数据库链接之后,可以使用它来引用另一个数据库上的表和视图。
视图的说明如下所示:
SQL> DESC DBA_DB_LINKS
Name Null? Type
-------------------- -------- ----------------------------
OWNER NOT NULL VARCHAR2(30)
DB_LINK NOT NULL VARCHAR2(128)
USERNAME VARCHAR2(30)
HOST VARCHAR2(2000)
CREATED NOT NULL DATE
SQL> select owner, db_link, username from dba_db_links;
OWNER DB_LINK USERNAME
----------- ------------------- ---------
HR REMOTE.EXAMPLE.COM HR