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,就表示该实例已监听到了

这下可以通过远程连接根据监听的内容去尝试连接啦

 

posted @ 2022-02-28 10:25  阿尔法哲  阅读(2380)  评论(0编辑  收藏  举报