nkj827
作者nkj827·2020-04-29 19:17
项目经理·长春长信华天

ORACLE网络结构

字数 2749阅读 714评论 0赞 10

网络结构

三个配置文件

listener.ora 、 sqlnet.ora 、 tnsnames.ora ,都是放在 $ORACLE_HOME\network\admin 目录下。

重点 : 三个文件的作用和使用

#-----------------------

sqlnet.ora----- 作用类似于 linux 或者其他 unix 的 nsswitch.conf 文件,通过这个文件来决定怎么样找一个连接中出现的连接字符串,

例如我们客户端输入

sqlplus sys/oracle@orcl

假如我的 sqlnet.ora 是下面这个样子

SQLNET.AUTHENTICATION_SERVICES= (NTS)

NAMES.DIRECTORY_PATH= (TNSNAMES,HOSTNAME)

那么,客户端就会首先在 tnsnames.ora 文件中找 orcl 的记录 . 如果没有相应的记录则尝试把 orcl 当作一个主机名,通过网络的途径去解析它的 ip 地址然后去连接这个 ip 上 GLOBAL_DBNAME=orcl 这个实例,当然我这里 orcl 并不是一个主机名

如果我是这个样子

NAMES.DIRECTORY_PATH= (TNSNAMES)

那么客户端就只会从 tnsnames.ora 查找 orcl 的记录

括号中还有其他选项,如 LDAP 等并不常用。

#------------------------

Tnsnames.ora------ 这个文件类似于 unix 的 hosts 文件,提供的 tnsname 到主机名或者 ip 的对应,只有当 sqlnet.ora 中类似

NAMES.DIRECTORY_PATH= (TNSNAMES) 这样,也就是客户端解析连接字符串的顺序中有 TNSNAMES 是,才会尝试使用这个文件。

例子中有两个, ORCL 对应的本机, SALES 对应的另外一个 IP 地址,里边还定义了使用主用服务器还是共享服务器模式进行连接,一句一句说

# 你所要连接的时候输入得 TNSNAME

ORCL =

(DESCRIPTION =

(ADDRESS_LIST =

# 下面是这个 TNSNAME 对应的主机,端口,协议

(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))

)

(CONNECT_DATA =

# 使用专用服务器模式去连接需要跟服务器的模式匹配,如果没有就根据服务器的模式

# 自动调节

(SERVER = DEDICATED)

# 对应 service_name , SQLPLUS>show parameter service_name;

# 进行查看

(SERVICE_NAME = orcl)

)

)

# 下面这个类似

SALES =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.188.219)(PORT = 1521))

)

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = sales)

)

)

#----------------------

客户端完了我们来看服务器端

listener.ora------listener 监听器进程的配置文件

关于 listener 进程就不多说了,接受远程对数据库的接入申请并转交给 oracle 的服务器进程。所以如果不是使用的远程的连接, listener 进程就不是必需的,同样的如果关闭 listener 进程并不会影响已经存在的数据库连接。

Listener.ora 文件的例子

#listener.ora Network Configuration File: #E:\oracle\product\10.1.0\Db_2\NETWORK\ADMIN\listener.ora

# Generated by Oracle configuration tools.

# 下面定义 LISTENER 进程为哪个实例提供服务

# 这里是 ORCL ,并且它对应的 ORACLE_HOME 和 GLOBAL_DBNAME

# 其中 GLOBAL_DBNAME 不是必需的除非使用 HOSTNAME 做数据库连接

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(GLOBAL_DBNAME = boway)

(ORACLE_HOME = E:\oracle\product\10.1.0\Db_2)

(SID_NAME = ORCL)

)

)

# 监听器的名字,一台数据库可以有不止一个监听器

# 再向下面是监听器监听的协议, ip ,端口等,这里使用的 tcp1521 端口,并且使 # 用的是主机名

LISTENER =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = boway)(PORT = 1521))

)

上面的例子是一个最简单的例子,但也是最普遍的。一个 listener 进程为一个 instance(SID) 提供服务。

监听器的操作命令

$ORACLE_HOME/bin/lsnrctl start, 其他诸如 stop,status 等。具体敲完一个 lsnrctl 后看帮助。

上面说到的三个文件都可以通过图形的配置工具来完成配置

$ORACLE_HOME/netca 向导形式的

$ORACLE_HOME/netmgr

本人比较习惯 netmgr,

profile 配置的是 sqlnet.ora 也就是名称解析的方式

service name 配置的是 tnsnames.ora 文件

listeners 配置的是 listener.ora 文件,即监听器进程

具体的配置可以尝试一下然后来看一下配置文件。

这样一来总体结构就有了,是当你输入 sqlplus sys/oracle@orcl 的时候

  1. 查询 sqlnet.ora 看看名称的解析方式,发现是 TNSNAME
  2. 则查询 tnsnames.ora 文件,从里边找 orcl 的记录,并且找到主机名,端口和 service_name
  3. 如果 listener 进程没有问题的话,建立与 listener 进程的连接。
  4. 根据不同的服务器模式如专用服务器模式或者共享服务器模式, listener 采取接下去的动作。默认是专用服务器模式,没有问题的话客户端就连接上了数据库的 server process 。
  5. 这时候网络连接已经建立, listener 进程的历史使命也就完成了。

---------------

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

10

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

X社区推广