TNSNAMES.ORA, LISTENER.ORA and SQLNET.ORA

Oracle uses three files (listener.ora, tnsnames.ora & sqlnet.ora) for network configuration.

TNSNAMES.ORA, LISTENER.ORA and SQLNET.ORA_第1张图片

TNSNAMES.ORA, LISTENER.ORA and SQLNET.ORA_第2张图片

Oracle Net is configured by configuration files. These include (but are not limited to):

    • TNSNAMES.ORA - This file contains a list of service names, which translate into the instances the client can connect to. It (tnsnames.ora) is used on outgoing requests.
    • SQLNET.ORA - this file is used to configure Oracle Net on the client. For example, tracing can be turned on.
    • LISTENER.ORA - This file configures the listener on the host (server).

TNSNAMES.ORA

类似于unix 的hosts文件,提供的tnsname到主机名或者ip的对应

TNSNAMES.ORA, LISTENER.ORA and SQLNET.ORA_第3张图片

TNSNAMES.ORA, LISTENER.ORA and SQLNET.ORA_第4张图片



LISTENER.ORA

接受远程对数据库的接入申请并转交给oracle的服务器进程

TNSNAMES.ORA, LISTENER.ORA and SQLNET.ORA_第5张图片

TNSNAMES.ORA, LISTENER.ORA and SQLNET.ORA_第6张图片


SQLNET.ORA

this file is used to configure Oracle Net on the client. For example, tracing can be turned on.

TNSNAMES.ORA, LISTENER.ORA and SQLNET.ORA_第7张图片

当客户端发出一条connhr/hr@sid命令的时候,其实是一个比较复杂的过程,清楚了这个连接过程以后,当发现连接异常的时候,就可以很准确的定位问题的原因了。
客户端配置:sqlnet.ora, tnsnames.ora
服务器端配置:listener.ora(四要素:IP+TCP/IP+PORT+SID)
连接过程:
1. 读取 SQLNET.ORA 选择解析方法
当客户端发出conn命令时,查找客户端的sqlnet.ora 文件
E:\oracle\product\10.2.0\client_1\NETWORK\ADMIN\sqlnet.ora NAMES.DIRECTORY_PATH= (TNSNAMES)
通过客户端的sqlnet.ora来选择解析的方法(主机命名、本地命名、目录命名、外部命名、ORACLE NAMES、easy connect(10g))。

2. 若是本地命名,读取TNSNAMES.ORA寻找三要素
如果选择的是TNSNAMES本地命名,那么到
E:\oracle\product\10.2.0\client_1\NETWORK\ADMIN\tnsnames.ora下去解析服务名
DEVDB2 = /*服务名*/
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.230.69)(PORT = 1521)) /*监听地址:协议+IP+PORT*/
(CONNECT_DATA = (SERVER = DEDICATED)
(SERVICE_NAME = devdb)))/*SID*/

3. 建立到Server端 LISTENER 的连接
根据IP+PROT+TCP/IP建立与监听程序的连接,并向该监听程序发送一个CONNECT数据包 (见图中符号1)

4. Server端的 LISTENER 检查有效性
当Server端接到请求以后,检查是否有已经注册的SID与client端发出的请求有匹配的SID, 如果有,LISTENER分派一个新的SERVER PROCESS进程来处理该连接,此时会在LISTENER程序和 SERVER PROCESS之间建立一个继承连接,以传送初始化信息,传送完毕后,LISTENER程序和SERVER PROCESS之间的连接关闭,剩下的连接就是SERVER PROCESS和client端的连接了,这也就是为什么关闭 LISTENER只会影响新请求的client端,不会影响已经连接上的session的原因了。(见图中符号2)

5. SERVER PROCESS将RESEND数据包发送回客户机。见图中符号3)

6. CLIENT 继续向 SERVER PROCESS 发送新的CONNECT 数据包。(见图中符号4)

7. 该专用服务器进程接受传入的连接,处理完成后,将ACCEPT 消息转发回client端。见图中符号5)


Reference1:http://heis.vuv.cz/sluzby/oradoc/doc8/network.804/a55913/apc.htm

Reference2:http://oraclecoursebooks.com/books/oracle9i_admin/22_9i_dba/22_oracle9iadmin.html

Reference3:http://space.itpub.net/9252210/viewspace-578120

你可能感兴趣的:(tnsnames.ora)