动态监听和静态监听
动态监听和静态监听主要区别是实例向监听注册的方式。“注册”意思,就是让监听能够找到数据库实例。
动态监听是数据库PMON通过配置设置(也可以是默认值)向指定的监听注册,而静态监听没有这个过程。
以下几点要注意:1.在非RAC环境中,监听和实例必须在同一台服务器上。
2.静态监听实质上是一种“硬编码”,将实例写死在listener.ora上。
我们看一下状态对比:

ocp是动态监听,是PMON注册到监听上的,其状态是READY,而ocps是直接在listener.ora上硬编码的,所以其状态是UNKNOWN也不难理解了。
我们再看一下配置文件:

静态监听“硬编码”的部份是ORACLE_HOME,以及ORACLE_SID.
我们知道,数据库在启动时ORACLE_HOME和ORACLE_SID一起进行哈希,得到一个唯一的键值,attach到SGA。这个静态监听是不是也有这个作用呢?
我们做一个小试验,我们建两个网络服务名,分别指向ocp和ocps,如下图:

我们通过网络服务名ocp连上,尝试关闭数据库。

退出,尝试用动态连接登陆启动数据库:

错误显示,登陆失败,监听不知道有ocp这个服务存在。
尝试用静态连接登陆:

登陆成功,并显示实例是一个idle instance,执行startup:

通过以上能看出:
1.动态监听是数据库启动时注册到监听的,一旦数据库关闭,用户无法连接(貌似合理,数据库关闭了,用户连接又能做什么呢?)
2.静态监听是硬编码到listener的配置项,即使数据库关闭,用户也能登陆到数据库上进行操作(这类操作无非是启动数据库了)。
3.动态监听无需修改配置文件,数据库通过自身配置动态注册,比较灵活。
4.静态监听需要修改监听配置文件。
使用场景区别:
1.动态监听适合普通不带DBA操作的应用(大多数应用)。
2.静态监听适合带DBA操作的应用或数据库连接。试想想,DBA进行数据库启停操作无需向SA(系统管理员)打报告申请主机oracle权限,直接本机 sqlplus xxxx/xxxx@xxx as sysdba进行操作是何等惬意!是不是有点心动了?




