动态监听和静态监听主要区别是实例向监听注册的方式。注册,就是让监听能够找到数据库实例。
动态监听是数据库PMON通过配置设置(也可以是默认值)向指定的监听注册,静态监听没有这个过程。
以下两点要注意:
1、在非RAC环境中,监听和实例必须在同一台服务器上。
2、静态监是一种硬编码,将实例写在listener.ora上。
两种监听的状态对比:
docare是动态监听,是PMON注册到监听上的,状态是READY;
docarejt是静态监听,是在listener.ora上设置的,状态是UNKNOWN。
看一下静态监听的配置文件:
静态监听硬编码的部份是ORACLE_HOME以及ORACLE_SID
GLOBAL_DBNAME可随意设置,方便识别即可
数据库在启动时ORACLE_HOME和ORACLE_SID一起进行哈希,得到一个唯一值,attach到SGA。
试验验证动态监听与静态监听的区别
1、在client端建两个网络服务名,分别指向docare和docarejt
2、在数据库服务器上关闭数据库
3、在client端尝试用动态连接登陆数据库(登陆失败,监听不知道有docare这个服务)
4、在client端尝试用静态连接登陆数据库
登陆成功,并显示实例是一个idle instance,启动数据库
总结:
1、动态监听是数据库启动时注册到监听的,一旦数据库关闭,用户无法连接
2、静态监听是在listener.ora中配置的,即使数据库关闭,用户也能登陆数据库进行操作
3、动态监听无需修改配置文件,数据库通过自身配置动态注册
4、静态监听需要修改监听配置文件