动态监听和静态监听的区别
动态监听和静态监听主要区别是实例向监听注册的方式。注册,就是让监听能够找到数据库实例。
一、动态监听
1.动态注册不需要显示的配置listener.ora文件,实例启动的时候,
PMON进程根据instance_name,service_name参数将实例和服务动态注册到listerer中。
如果没有设定instance_name,将使用db_name初始化参数值。
如果没有设定service_names,将拼接db_name和db_domain参数值来注册监听。
注意:Oracle_SID从ORACLE 10G开始,参数文件不再记录INSTANCE_NAME,此时INSTANCE_NAME动态从系统ORACLE_SID获得来保持一致。
优点:
1)lsnrctl start后不需要人工干预,会自动注册数据库的instance_name,service_name,然后tns不论使用SID和SERVICE_NAME均可以连接上来
2)修改了SERVICE_NAME或者SID不用修改listener.ora文件
3)动态注册的数据库通过状态信息中的状态READY或状态BLOCKED(对于一个备用数据库)来指明。
缺点:
1)动态监听是数据库启动时注册到监听的,一旦数据库关闭,用户无法连接
二、静态监听
1.静态注册指实例启动时读取listener.ora配置文件,将实例和服务注册到监听程序。
静态监是一种硬编码,静态监听硬编码的部份是ORACLE_HOME以及ORACLE_SID
三、两种监听的对比
如果说看完这幅图还不清楚GLOBAL_DBNAME是什么意思,那我也无语了,有些人说GLOBAL_DBNAME是我们在dbca时让我们输入的GLOBAL DABASE NAME,那完全是不对的,这里的GLOBAL_DBNAME只是一个服务名而已,说到这里我想大家都明白了,还不明白可以给我回贴,我用实验演示给给你看。
四、示例
说明:1521、1524端口静态监听,1522、1523端口动态监听
listener.ora配置
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = test01) (ORACLE_HOME = D:\Oracle\product\11.2.0\dbhome_1) (SID_NAME = DOCARE) ) ) SID_LIST_LISTENER1524 = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = test04) (ORACLE_HOME = D:\Oracle\product\11.2.0\dbhome_1) (SID_NAME = DOCARE) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = HISDB)(PORT = 1521)) ) ) ) LISTENER1522 = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = HISDB)(PORT = 1522)) ) ) ) LISTENER1523 = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = HISDB)(PORT = 1523)) ) ) ) LISTENER1524 = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = HISDB)(PORT = 1524)) ) ) )
tnsnames.ora 配置
test01 = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = HISDB)(PORT = 1521)) ) ) ) test02 = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = HISDB)(PORT = 1522)) ) ) ) test03 = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = HISDB)(PORT = 1523)) ) ) ) test04 = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = HISDB)(PORT = 1524)) ) ) )
注释:tnsname.ora的名称需要跟listener.ora的global_name要相对应,tnsname.ora文件中test01 、test04在listener.ora中的静态监听已经声明了(GLOBAL_DBNAME的值),
而test02、test03则在动态监听service_name参数(或local_listener参数)定义了,所以tnsname.ora声明的连接符都可以使用(如在service_name没有声明,有可能用不了)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!