转载自:http://blog.csdn.net/leshami/article/details/5917103
Oracle 客户端连接到Oracle 数据库服务器貌似不同于SQL serve中的网络配置,其实不然,只不过所有的SQL server 运行于Windows平台,故很多配置直接集成到了操作系统之中。所以无需配置客户端即可连接到服务器。Oracle 客户端连接到数据库依赖于Oracle Net。Oracle提供了很多基于客户端或服务器的配置工具,需要搞清的是Oracle Net 中的相关术语。术语明白了,其实配置方法与SQL server 大同小异。
一、什么是Oracle Net
Oracle Net 用于客户端和服务器之间创建一个连接会话,并负责维护该会话。 Oracle Net 在客户端作为应用程序的一个后台进程组件,而在服务器端则包含称为侦听器的活动进程, 负责客户端和服务器之间的交互。 Oracle Net 同时也支持异构数据库的连接,如连接到Sybase,Informix,DB2,SQL Server等 通常基于下列配置来实现 网络配置(网络必须是联通的) 节点所在的位置(IP/Hostname) 应用程序 所使用的协议(TCP/IP、/TCP/IP with SSL、SDP、Named Pipes) --Oracle Net支持的连接类型 客户端-服务器模式(如SQLPlus) Java 应用程序(JDBC等) Web 客户端应用程序 使用基于Web的应用程序(App Server)作为中间件来实现,可以配置JDBC Oracle Call Interface (OCI) driver 或thin JDBC driver 通过HTTP直接连接到Oracle 服务器,如OEM --Oracle Net实现机制 用户发出连接请求实现与用户进程进行交互 用户进程通过Oracle Net 来与服务器进程交互 服务器进程则与实例进行交互(由Oracle Net维护) 实例通过后台进程交互来完成数据库的读写操作 --Oracle Net 连接方式 本地客户端连接的数据库(即客户端与数据库位于同一台服务器)。 本地连接同样使用到了Oracle Net,因为任何与数据的交互都通过Oracle Net来完成。 不需要使用到Listener,因为本地连接使用的是IPC协议,而IPC协议允许主机内进程间相互通信,由操作系统提供。 本地连接不需要进行任何配置,且本地服务器上可以运行若干个实例。 本地连接是唯一一个不需要侦听器的连接类型。 连接方法:CONNECT username/password 所有非本地客户端连接到数据库 服务器端启用Listener进程 客户端通过TNSNAME或Easy connect或LDAP等名称解析方式来解析连接字符串 一旦连接成功,即是Listener服务停止,不影响该会话。 --Oracle Net Listener(侦听器) 运行于服务器端,用于侦听所有来自客户端的连接请求,并提供处理数据库服务方面的请求 位置:$ORACLE_HOME/network/admin/listerer.ora --对应于netmgr中(GUI界面)的Listeners项下建立的缺省侦听器(Listener) $ORACLE_HOME/network/admin/sqlnet.ora --对应于netmgr中(GUI界面)的Profile 服务器端配置tnsnames 位置:ORACLE_HOME/network/admin/tnsnames.ora --对应于netmgr中(GUI界面)的Service Naming Listener提供的信息包括,IP地址、端口号、协议、服务名(service_name)等 一个Listener能够为多个数据库实例提供服务
二、客户端到服务器建立会话的过程及相关术语
执行如下的命令来建立连接 SQL> CONNECT username/[email protected]_service_name 连接字符串(connect string):username/[email protected]_service_name 包含了用户名、密码、连接标识符 如:SQL> conn scott/[email protected] 字符串分解 用户名scott 密码为tiger "/" 用于分割用户与密码 "@" 指示网络连接所需的用户进程 orcl 连接标识符 连接标识符(connect identifier) @后面的即为连接标识符,如上例中的orcl。 连接标识符的名字是一个映射到连接描述符的简化 连接标识符可以为网络服务名/别名、数据库服务名等 (net service name, database service name, or net service alias.) 连接描述符(connect discriptor) 使用一种特殊格式来描述连接的具体信息,信息包含了、数据库所在的位置(IP地址)、服务名、端口号等 如tnsnames中的: orcl = --网络服务名,数据库别名,等同于连接标识符(屏蔽客户端如何连接到服务器端的细节) (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.128)(PORT = 1521)) --IP地址,端口号,协议 ) (CONNECT_DATA = (SERVICE_NAME = orcl.robinson.com) --服务名 ) ) 以上所有DESCRIPTION内的信息即为连接描述信息 描述符之上等于号左边的可以为网络服务名,网络服务别名等,此等同于连接标识符。 --服务名(service_name) 客户端连接到实例的服务名,可以为该参数指定一个或多个服务名。该参数从9i引入,service_name通常可以使用SID代替。 9i之后,Oracle推荐使用service_name而不是SID。可以通过定义多不不同的服务名来区分不同的用户连接,该参数缺省的格式为db_name.domain_name。 实例将所定义的服务名注册到侦听器,当客户端请求服务时,侦听器根据服务名决定将使用哪个实例提供所请求的服务并与之建立连接 基于相同的数据库可以定义多不不同的服务名来区分不同的使用情况 如定义service_name为service_names = sales.robinson.com,hr.robinsn.com 则sales部门通过sales服务名来建立连接,hr部门通过hr服务名来建立连接, 而无须关心连接的是哪一个数据库。 --演示连接过程(非本地连接) 环境:服务器为RHEL 5 + Oracle 10g ,客户端Winxp + 10g Client 查看服务器listener是否启动 [[email protected] admin]$ lsnrctl --启动lsnrctl 侦听器程序 LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 03-SEP-2010 13:31:06 Copyright (c) 1991, 2005, Oracle. All rights reserved. Welcome to LSNRCTL, type "help" for information. LSNRCTL> status --查看侦听器状态,侦听器没有启动 Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521)) TNS-12541: TNS:no listener TNS-12560: TNS:protocol adapter error TNS-00511: No listener Linux Error: 111: Connection refused --启动缺省的侦听器 --在下面列出的信息中没有侦听器的路径及listener.ora文件,此处listener.ora 不存在 LSNRCTL> start Starting /u01/app/oracle/10g/bin/tnslsnr: please wait... TNSLSNR for Linux: Version 10.2.0.1.0 - Production Log messages written to /u01/app/oracle/10g/network/log/listener.log Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=robinson.com)(PORT=1521))) Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521)) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 10.2.0.1.0 - Production Start Date 03-SEP-2010 13:31:14 Uptime 0 days 0 hr. 0 min. 0 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Log File /u01/app/oracle/10g/network/log/listener.log Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=robinson.com)(PORT=1521))) The listener supports no services The command completed successfully LSNRCTL> service --已经看到了已注册的实例信息,因为10g支持动态注册 Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521)) Services Summary... Service "orcl.robinson.com" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:0 refused:0 state:ready LOCAL SERVER Service "orclXDB.robinson.com" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service... Handler(s): "D000" established:0 refused:0 current:0 max:1022 state:ready DISPATCHER <machine: robinson, pid: 3246> (ADDRESS=(PROTOCOL=tcp)(HOST=robinson.com)(PORT=51473)) Service "orcl_XPT.robinson.com" has 1 instance(s). Instance "orcl", status READY, has 1 handler(s) for this service... Handler(s): "DEDICATED" established:0 refused:0 state:ready LOCAL SERVER The command completed successfully --查看客户端tnsnames.ora的信息 C:/>type F:/oracle/product/10.2.0/client_1/NETWORK/ADMIN/tnsnames.ora # tnsnames.ora Network Configuration File: F:/oracle/product/10.2.0/client_1/NET WORK/ADMIN/tnsnames.ora # Generated by Oracle configuration tools. orcl = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.128)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = orcl.robinson.com) ) ) C:/>sqlplus /nolog SQL*Plus: Release 10.2.0.1.0 - Production on 星期五9月3 13:42:02 2010 Copyright (c) 1982, 2005, Oracle. All rights reserved. SQL> conn scott/[email protected] Connected. --将tnsnames.ora中服务别名改为oral后再连接,可以正常连接,即网络服务名可以随便取。 SQL> conn system/[email protected] Connected. --查看数据库中的服务名 SQL> show parameter service_names; NAME TYPE VALUE ------------------------------------ ----------- -------------------------- service_names string orcl.robinson.com
三、服务注册与名称解析
四、常用的配置文件
ldqp.ora -->用于配置LDAP目录名称解析 cman.ora -->用于配置Oracle 连接管理参数 tnsnames.ora -->用于配置本地客户端或远程客户端的本地名称解析 listener.ora -->用于配置侦听器的相关注册信息 sqlnet.ora -->用于配置服务器或客户端所支持的解析方式 netmgr(Net Manager)中的几个配置模块 Profile 分支 -->对应于sqlnet.ora文件,可以设置客户端和服务器端同时应用的Oracle选项 Sevice Naming 分支 -->用于配置客户端的名称解析,对应于tnsnames.ora文件 Listener 分支 -->用于配置服务器端的数据库侦听器,对应于listener.ora文件
五、侦听器配置程序(lsnrctl) 及TNSPING命令
[[email protected] admin]$ lsnrctl LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 03-SEP-2010 21:30:52 Copyright (c) 1991, 2005, Oracle. All rights reserved. Welcome to LSNRCTL, type "help" for information. LSNRCTL> help --使用help 查看lsnrctl 的扩展命令 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* lsnrctl命令用法 LSNRCTL> command [listener_name] lsnrctl命令演示参照前面例子中的使用 tnsping命令用于测试网络的可联通性 C:/>tnsping orcl TNS Ping Utility for 32-bit Windows: Version 10.2.0.1.0 - Production on 03-9月-2010 21:52:45 Copyright (c) 1997, 2005, Oracle. All rights reserved. Used parameter files: F:/oracle/product/10.2.0/client_1/network/admin/sqlnet.ora Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = 192.168.1.128)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = orcl.robinson.com))) OK (0 msec)
六、总结