Oracle学习笔记——配置监听

什么是监听

如果你做过网络开发,对于监听listen就比较熟悉了,监听是什么,在网络开发中,就是监听某个端口,等待客户端的连接。同理,在Oracle中,监听的意思也和这差不多。

在Oracle数据库服务器中,通过一个叫“监听器”的组件接收来自客户端的连接请求,它是客户端和 服务器端中间的桥梁。监听器虽然在Oracle服务器端,但是它和Oracle主进程并不绑定,它是一个独立运行在服务器端的后台进程,独立于数据库运行。它负责对客户端传入的连接请求进行监听,并且对服务器端的连接负荷进行调整。当客户端准备建立一个到服务器端的连接时,监听器接收客户端的连接请求, 然后再将这个客户端连接请求交给服务器进行处理,一旦客户端和服务器建立连接,客户端和服务器以后就直接进行通信,而不再需要监听器的参与,这就好比师傅 领进门,修行靠个人。就如下图所示:

  1. 客户端向服务器端发出连接请求,监听器监听到客户端的连接请求;
  2. 监听器把客户端的连接请求交给数据库服务器进行处理;
  3. 经过监听器建立连接以后,客户端与服务器端就可以直接进行通信,而不再需要监听器的参与了。
    以上就是监听器干的活,也就是说,你对数据库服务器的第一次,肯定会给监听器,如果监听器没有配好,你就甭想连数据库了。那么,怎么才能配好监听器呢?主要涉及以下三个文件:

listener.ora、sqlnet.ora和tnsnames.ora文件

listener.ora文件

打开listener.ora文件看看,贴上一部分有代表性的内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#这是一个名为LISTENER1的监听器
#监听的协议是TCP协议
#监听的主机IP是127.0.0.1
#监听的端口是1521端口
LISTENER1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)

#记录了监听器LISTENER1服务的全局数据库名、数据库路径和数据库实例名
SID_LIST_LISTENER1 =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = C:\Oracle11g\product\11.2.0\dbhome_1)
(SID_NAME = ORCL)
)
)

sqlnet.ora文件

打开sqlnet.ora文件看看,内容如下:

1
2
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

这个sqlnet.ora文件实际上就是一个配置文件,主要是和接下来说的tnsnames.ora配合使用。

tnsnames.ora文件

tnsnames.ora文件存放于客户端机器上,和sqlnet.ora文件配合使用。可以简单的看看tnsnames.ora文件中的内容。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#ORCL是个别名
#这条信息记录了我们使用TCP协议,去连接IP地址为127.0.0.1,端口号为1521的数据库主机上服务名为orcl的数据库
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
以后,我们还会配置更多的数据库连接信息,比如我要连接192.168.10.2主机上的数据库,我们只需要在tnsnames.ora中继续追加新的连接信息即可,比如:

STDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.10.2)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = stdb)
)
)

服务器端配置

直接编辑listener.ora,就像下面这样,配置一个新的监听器:

1
2
3
4
5
6
7
8
9
10
11
12
13
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
)

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(ORACLE_HOME = C:\Oracle11g\product\11.2.0\dbhome_1)
(SID_NAME = ORCL)
)
)

你想在哪个数据库上配置一个新的监听,就修改对应的内容即可。

常用命令

启动监听器

1
2
3
4
lsnrctl start <监听器的名字>

// 启动名为LISTENER的监听器
lsnrctl start LISTENER

当我们不指定监听器的名字时,就默认启动LISTENER监听器;

关闭监听器

1
2
3
4
lsnrctl stop <监听器的名字>

// 关闭名为LISTENER的监听器
lsnrctl stop LISTENER

当我们不指定监听器的名字时,就默认关闭LISTENER监听器;

查看监听器的状态

1
2
3
4
lsnrctl status <监听器的名字>

// 查看名为LISTENER的监听器的运行状态
lsnrctl status LISTENER

当我们不指定监听器的名字时,就默认查看LISTENER监听器的状态。

测试连通性
可以使用工具TNSPING

参考

赏个包子钱~~