> 文章列表 > 数据库管理-第六十期 监听(20230309)

数据库管理-第六十期 监听(20230309)

数据库管理-第六十期 监听(20230309)

数据库管理 2023-03-09

  • 第六十期期 监听
    • 1 无法访问
    • 2 监听配置
    • 3 问题复现与解决
    • 4 静态监听
    • 5 记不住配置咋整
    • 总结

第六十期期 监听

不知不觉又来到了一个整10期数,我承认上一期有很大的划水的。。。嫌疑吧,本期内容是从帮群友解决ADG前置配置时候的一个问题展开,也算是一步一步进行实验测试。这里使用的环境是OL7.9+Oracle 19c,IP地址为10.10.10.102,sid为tdb。

1 无法访问

群友配置完静态监听后出现了两个问题:
第一个问题是:

ORA-01017: invalid username/password; logon denied

在处理完成之后又发现下面的问题:

ORA-12541:TNS:no listener

下面容我尝试复现一下。

2 监听配置

首先,为了避免动态监听的影响,我们把数据库给关了:

shutdown immediate

然后群友方式配置下静态监听:

LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.102)(PORT = 1521))(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))))SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(GLOBAL_DBNAME = TDB)(ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)(SID_NAME = TDB))(SID_DESC =(GLOBAL_DBNAME = PDB1)(ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)(SID_NAME = TDB)))
#重启监听
lsnrctl stop
lsnrctl start
lsnrctl status

数据库管理-第六十期 监听(20230309)

3 问题复现与解决

尝试访问数据库:
数据库管理-第六十期 监听(20230309)
出现了群友相同的报错。这里修改一下监听文件并重启监听:

LISTENER =(DESCRIPTION_LIST =(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.102)(PORT = 1521))(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))))SID_LIST_LISTENER =(SID_LIST =(SID_DESC =(GLOBAL_DBNAME = TDB)(ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)(SID_NAME = tdb))(SID_DESC =(GLOBAL_DBNAME = PDB1)(ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)(SID_NAME = tdb)))

数据库管理-第六十期 监听(20230309)
数据库管理-第六十期 监听(20230309)
这里访问数据库就成功了,对比配置文件发现问题其实sid大小写的问题,这里需要注意一点,service_name (GLOBAL_DBNAME)配置是不区分大小写的,访问也是不区分的,但是SID配置是区分大小写的,SID的错误配置让静态监听无法找到正确的实例并使用正确的密码文件,而空密码是无论如何也访问不上数据库的。

第二个问题的复现其实更简单一些:
数据库管理-第六十期 监听(20230309)
这里监听配置是写了监听端口配置的,通过127.0.0.1是无法正确命中监听的。

4 静态监听

通过上面的问题处理其实可以在数据库没有启动的状态下通过静态监听连接到对应的空闲实例上,同时也可以对实例进行启停操作:
数据库管理-第六十期 监听(20230309)
静态监听的作用就是在此,当一些情况下无法进入操作系统需要对数据库启停进行操作时,就需要静态监听。另一方面,静态监听配置也是DG的必须选项,因为在switchover的时候,原主库是会shutdown一次的,DG_Broker要去将这个库重新启动并将角色变更为standby就需要通过静态监听连接到空闲实例并进行后续操作。

5 记不住配置咋整

如果完全没有图形界面,记不住监听配置咋写,手边也没有可用文档咋整,在$ORACLE_HOME/network/admin/sample文件夹中有listener.ora的范例:

# <lsnr>
#   This parameter specifies both the name of the listener, and
#   it listening address(es). Other parameters for this listener
#   us this name in place of <lsnr>.  When not specified,
#   the name for <lsnr> defaults to "LISTENER", with the default
#   address value as shown below.
#
# LISTENER =
#  (ADDRESS_LIST=
#       (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))
#       (ADDRESS=(PROTOCOL=ipc)(KEY=PNPKEY)))   # SID_LIST_<lsnr>
#   List of services the listener knows about and can connect 
#   clients to.  There is no default.  See the Net8 Administrator's
#   Guide for more information.
#
# SID_LIST_LISTENER=
#   (SID_LIST=
#       (SID_DESC=
#                       #BEQUEATH CONFIG
#          (GLOBAL_DBNAME=salesdb.mycompany)
#          (SID_NAME=sid1)                      
#          (ORACLE_HOME=/private/app/oracle/product/8.0.3)
#                       #PRESPAWN CONFIG
#         (PRESPAWN_MAX=20)
#         (PRESPAWN_LIST=
#           (PRESPAWN_DESC=(PROTOCOL=tcp)(POOL_SIZE=2)(TIMEOUT=1))
#         )
#        )
#       )

其中有对应的说明,将注释和不需要的内容删除并根据环境配置即可。

总结

老规矩,知道写了些啥。