Linux下Oracle单实例配置多监听
Oracle单实例配置多监听
一、前言
有时候我们项目中需要使用Oracle数据库,同时要需要不同的数据源,而Oracle不像Mysql那样直接建个库即可,Oracle是以账号为单位,可以理解为一个账号就是一个库,但实际有区别,项目中数据库连接数据源往往默认是安装Oracle时生成的ORCL(目前只有一个ORCL实例,称为“单实例”),这时候有人就想,那创建一个账号不就行了,的确是需要创建账号,但是本身数据源还是ORCL这一点始终没有变,在Oracle数据库中我们创建一个账号实现了相当于创建了一个库,但对于项目来说,还是一个ORCL数据源,无非就是账号和密码变了,对于他来说这一点是不行的,所以可以使用一下方法解决他
方案一
创建一个新实例,并将它注册到监听中即可(本篇文章暂不介绍,可自行百度)
方案二(本篇)
也就是标题说的,单个实例,配置多个监听,此时,对内实际还是使用同一个实例,对外看似是不同数据源和不同账号,实际上是同一实例,不同账号(可以理解为Mysql的不同库)罢了
二、单实例配置多监听
主要修改两个配置文件即可 在ORACLE_HOME目录下的/network/admin/目录下
listener.ora和tnsnames.ora文件,却有注释,可根据自身实际情况进行修改
listener.ora
#这是名称为LISTENER的监听器静态注册的服务
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
#服务名 多个监听不能配置相同,否则连接进来不知道具体在那个服务上
(GLOBAL_DBNAME = snorcl11g)
#oracle实例名称
(SID_NAME = snorcl11g)
(ORACLE_HOME = /oracle/home)
)
)
#LISTENER2监听器监听的静态实例注册
SID_LIST_LISTENER2 =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl11g)
#oracle实例名称
(SID_NAME = snorcl11g)
(ORACLE_HOME = /oracle/home)
)
)
#这是名称为LISTENER的监听器 默认
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.7)(PORT = 1521))
)
)
#LISTENER2的监听器
LISTENER2 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1522))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.7)(PORT = 1522))
)
)
#oracle安装目录
ADR_BASE_LISTENER = /oracle
tnsnames.ora
#SNORCL11G 随便起,建议见名知意
#snorcl11g是实例名
#表示使用TCP协议,连接IP地址为127.0.0.1,端口号为1521的数据库主机上服务名为snorcl11g的数据库
#如果有多个监听,可以手动添加
SNORCL11G =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.7)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = snorcl11g)
)
)
LISTENER2_SNORCL11G =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.7)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = snorcl11g)
)
)
至此配置就结束啦,我们来启动试试
启动监听服务
# 默认启动listener监听
# stop 停止
# status 监听状态
lsnrctl start
# 启动新监听LISTENER2
lsnrctl start listener2
可以看到默认配置的监听启动成功了,对外连接使用SNORCL11G,监听实例为SNORCL11G,监听端口1521
可以看到我们配置的第二个监听启动成功了,对外连接使用ORCL11G,监听实例为SNORCL11G,监听端口1522
# 测试实例是否被监听
tnsping snorcl11g
此处的端口号为默认的,可忽略,只要看到OK,就表示该实例已监听到了
这下可以通过远程连接根据监听的内容去尝试连接啦
无论风雨,和自己一决胜负吧