对于默认的监听名称:listener,默认的端口号:1521,
当采用动态监听的时候,即使没有listener.ora文件,监听进程依然可以正常工作。
1、动态监听是数据库启动时注册到监听的,一旦数据库关闭,用户无法连接
2、静态监听是在listener.ora中配置的,即使数据库关闭,用户也能登陆数据库进行操作
3、动态监听无需修改配置文件,数据库通过自身配置动态注册
4、静态监听需要修改监听配置文件
如何查询某服务是静态监听注册还是动态监听注册
可以使用命令lsnrctl status来查看某服务是静态注册还是动态注册。
实例状态为UNKNOWN值时表明此服务是静态注册的设置。
这时监听器用来表明它不知道关于该实例的任何信息,只有当客户发出连接请求时,它才检查该实例是否存在。
动态监听的状态是READY。
静态监听硬编码的部份是ORACLE_HOME以及ORACLE_SID
静态注册时
listener.ora中的GLOBAL_DBNAME向外提供服务名
listener.ora中的SID_NAME提供注册的实例名
LISTENER=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=MES)(PORT=1523))
)
)
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=orcl)
(ORACL_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME=orcl)
)
)
配置本地监听位置
alter system set local_listener='(ADDRESS = (PROTOCOL = TCP)(HOST = MES)(PORT = 1523))';
动态监听
动态注册是在instance启动的时候PMON进程根据参数文件中的instance_name,service_names
两个参数将实例和服务动态注册到listener中
配置文件
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(HOST = EXTPROC1521)
(ADDRESS = (PROTOCOL = TCP)(HOST = jyjgrz)(PORT = 1521))
)
)
ADR_BASE_LISTENER = /u01/app/oracle
动态注册默认只注册到默认的监听器上(名称是LISTENER、端口是1521、协议是TCP),
如果需要向非默认监听注册,则需要配置local_listener参数!
SYS@PROD> alter system set local_listener = ''; --此时默认注册到1521端口
静态监听
静态注册指实例启动时读取listener.ora配置文件,将实例和服务注册到监听程序。
优点:
无论何时启动一个数据库,默认都有两条信息注册到监听器中:实例和服务。
在数据库未open状态中(前提是已经在nomount或mount状态),就可以远程连接到数据库,对数据库进行操作--当然了要配置密码文件。
接下来改为静态监听
#cat /opt/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# listener.ora Network Configuration File: /opt/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /opt/oracle/product/11.2.0/dbhome_1)
(SID_NAME = orcl)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = jyjgrz)(PORT = 1521))
)
)
ADR_BASE_LISTENER = /opt/oracle
动态监听和静态监听
动态监听和静态监听主要区别是实例向监听注册的方式。“注册”意思,就是让监听能够找到数据库实例。
动态监听是数据库PMON通过配置设置(也可以是默认值)向指定的监听注册,而静态监听没有这个过程。
以下几点要注意:1.在非RAC环境中,监听和实例必须在同一台服务器上。
2.静态监听实质上是一种“硬编码”,将实例写死在listener.ora上。
ocp是动态监听,是PMON注册到监听上的,其状态是READY,而ocps是直接在listener.ora上硬编码的,所以其状态是UNKNOWN也不难理解了。
我们再看一下配置文件:
三、动态注册
动态注册是在instance启动的时候PMON进程根据init.ora中的instance_name,service_names两个参数将实例和服务动态注册到
listener中。
首先要在init.ora中指定instance_name,service_names两个参数的值。在sqlplus下通过show parameter service_names 和show
parameter instance_name可以查看这两个参数的值。
注册到监听器中的实例值从init.ora文件中的instance_name参数取得。如果该参数没有设定值,那么它将取init.ora文件中的
db_name的值。
注册到监听器中的服务值从init.ora文件中的参数service_names取得。如果该参数没有设定值,数据库将拼接init.ora文件中的
db_name和db_domain的值来注册自己。如果选择提供service_names值,您可以使用完全限定的名称(比如 orcl.oracle.com)或缩写
的名称(比如orcl)。如果选择缩写的名称并设置了db_domain参数,注册到监听器中的服务将是 service_name值和db_domain值的拼
接
静态监听“硬编码”的部份是ORACLE_HOME,以及ORACLE_SID.
我们知道,数据库在启动时ORACLE_HOME和ORACLE_SID一起进行哈希,得到一个唯一的键值,attach到SGA。这个静态监听是不是也有这个作用呢?
1.动态监听是数据库启动时注册到监听的,一旦数据库关闭,用户无法连接(貌似合理,数据库关闭了,用户连接又能做什么呢?)
2.静态监听是硬编码到listener的配置项,即使数据库关闭,用户也能登陆到数据库上进行操作(这类操作无非是启动数据库了)。
3.动态监听无需修改配置文件,数据库通过自身配置动态注册,比较灵活。
4.静态监听需要修改监听配置文件。
使用场景区别:
1.动态监听适合普通不带DBA操作的应用(大多数应用)。
2.静态监听适合带DBA操作的应用或数据库连接。试想想,DBA进行数据库启停操作无需向SA(系统管理员)打报告申请主机oracle权限,直接本机 sqlplus xxxx/xxxx@xxx as sysdba进行操作是何等惬意!是不是有点心动了?