什么是监听
如果你做过网络开发,对于监听listen就比较熟悉了,监听是什么,在网络开发中,就是监听某个端口,等待客户端的连接。同理,在Oracle中,监听的意思也和这差不多。
在Oracle数据库服务器中,通过一个叫“监听器”的组件接收来自客户端的连接请求,它是客户端和 服务器端中间的桥梁。监听器虽然在Oracle服务器端,但是它和Oracle主进程并不绑定,它是一个独立运行在服务器端的后台进程,独立于数据库运行。它负责对客户端传入的连接请求进行监听,并且对服务器端的连接负荷进行调整。当客户端准备建立一个到服务器端的连接时,监听器接收客户端的连接请求, 然后再将这个客户端连接请求交给服务器进行处理,一旦客户端和服务器建立连接,客户端和服务器以后就直接进行通信,而不再需要监听器的参与,这就好比师傅 领进门,修行靠个人。就如下图所示:
- 客户端向服务器端发出连接请求,监听器监听到客户端的连接请求;
- 监听器把客户端的连接请求交给数据库服务器进行处理;
- 经过监听器建立连接以后,客户端与服务器端就可以直接进行通信,而不再需要监听器的参与了。
以上就是监听器干的活,也就是说,你对数据库服务器的第一次,肯定会给监听器,如果监听器没有配好,你就甭想连数据库了。那么,怎么才能配好监听器呢?主要涉及以下三个文件:
listener.ora、sqlnet.ora和tnsnames.ora文件
listener.ora文件
打开listener.ora文件看看,贴上一部分有代表性的内容。
1 | #这是一个名为LISTENER1的监听器 |
sqlnet.ora文件
打开sqlnet.ora文件看看,内容如下:
1 | SQLNET.AUTHENTICATION_SERVICES= (NTS) |
这个sqlnet.ora文件实际上就是一个配置文件,主要是和接下来说的tnsnames.ora配合使用。
tnsnames.ora文件
tnsnames.ora文件存放于客户端机器上,和sqlnet.ora文件配合使用。可以简单的看看tnsnames.ora文件中的内容。
1 | #ORCL是个别名 |
服务器端配置
直接编辑listener.ora,就像下面这样,配置一个新的监听器:
1 | LISTENER = |
你想在哪个数据库上配置一个新的监听,就修改对应的内容即可。
常用命令
启动监听器
1 | lsnrctl start <监听器的名字> |
当我们不指定监听器的名字时,就默认启动LISTENER监听器;
关闭监听器
1 | lsnrctl stop <监听器的名字> |
当我们不指定监听器的名字时,就默认关闭LISTENER监听器;
查看监听器的状态
1 | lsnrctl status <监听器的名字> |
当我们不指定监听器的名字时,就默认查看LISTENER监听器的状态。
测试连通性
可以使用工具TNSPING