ORACLE 监听动态注册与静态注册 下载本文

内容发布更新时间 : 2024/5/19 2:31:18星期一 下面是文章的全部内容请认真阅读。

ORACLE 监听动态注册与静态注册

注册就是将数据库作为一个服务注册到监听程序中。客户端不需要知道数据库名和实例名,只需要知道该数据库对外提供的服务名就可以申请链接到数据库。这个服务名可以与数据库名一样,也有可能不一样。

在数据库服务启动的过程中,数据库服务器向监听程序中注册相应的服务。无论何时启动数据库,默认的都有两条信息注册到监听器中,即数据库服务器对应的实例和服务。客户端和服务器之间的链接,只需要提供一个服务名就可以了。

区分动态注册和静态注册 (1)使用listener.ora文件判断 动态注册

SID_LIST_LISTENER = (SID_LIST = (SID_DESC =

(PROGRAM = extproc) (SID_NAME = PLSExtProc) (ORACLE_HOME = D:oradataorcl) ) ) 静态注册

SID_LIST_LISTENER = (SID_LIST = (SID_DESC =

(PROGRAM = extproc) (SID_NAME = PLSExtProc) (ORACLE_HOME = D:oradataorcl) )

(SID_DESC =

(GLOBAL_DBNAME = orcl) (ORACLE_HOME = D:oradataorcl) (SID_NAME = ORCL) )

(SID_DESC =

(GLOBAL_DBNAME = orcl1) (ORACLE_HOME = D:oradataorcl) (SID_NAME = ORCL) )

)

通过查看虽然可以大致看出,但是这种方法并不能和明确的现实数据库在运行时的实际情况 (2)使用lsnrctl status命令 三、动态注册

动态注册是在instance启动的时候PMON(Process Monitor进程监视器)进程根据INIT.ORA中的instance_name,service_name两个参数将实例和服务注册到监听器中. 动态注册时的listener.ora的文件内容如下 SID_LIST_LISTENER = (SID_LIST = (SID_DESC =

(PROGRAM = extproc) (SID_NAME = PLSExtProc) (ORACLE_HOME = D:oradataorcl) ) )

由于动态注册需要pmon进程,所以监听必须在数据库启动之前启动,否则动态注册将失败;在数据库运行的过程中,如果重启监听也会造成动态注册失败

动态注册只是注册默认的监听器上(名称是listener、端口是1521、协议时TCP),如果需要向非默认的监听注册,则需要改变local_listener参数

将监听的信息添加到tnsnames.ora 文件中。 注意,是tnsnames.ora 文件, 因为pmon在动态注册监听时要从tnsnames.ora中读取相关信息。 LISTENER = (DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = DaveDai)(PORT = 1522)) )

然后以sys用戶运行:

SQL> alter system set local_listener=listener; SQL> alter system register; 或者:

SQL> alter system set LOCAL_LISTENER='(ADDRESS = (PROTOCOL = TCP)(HOST = DaveDai)(PORT = 1522))'; SQL> alter system register;

动态注册的好处是简单方便,但是容易发生注册失败 四、静态注册

静态注册就是实例启动时读取listener.ora文件的配置,将实例和服务注册到监听程序中 静态注册时的listener.ora中的内容如下 SID_LIST_LISTENER = (SID_LIST = (SID_DESC =

(PROGRAM = extproc) (SID_NAME = PLSExtProc)

(ORACLE_HOME = D:oradataorcl) )

(SID_DESC =

(GLOBAL_DBNAME = orcl) (ORACLE_HOME = D:oradataorcl) (SID_NAME = ORCL) )

(SID_DESC =

(GLOBAL_DBNAME = orcl1) (ORACLE_HOME = D:oradataorcl) (SID_NAME = ORCL) ) )

golbal_dbname是数据库对外提供的服务名,sid_name是实例名,该文件说明数据库是单实例数据库,实例名为orcl,向外提供了两个服务orcl和orcl1. 静态注册的好处可以总结为 1、监听不是最早启动

2、数据库运行期间,监听发成重启 3、oracle实例还没有open

当发生上述三种情况时,不会发生监听注册失败。

==============================================================

一、静态注册 静态注册指实例启动时读取listener.ora配置文件,将实例和服务注册到监听程序。无论何时启动一个数据库,默认都有两条信息注册到监听器中:实例和服务。 SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = rman) (ORACLE_HOME = /u01/oracle) (SID_NAME = rman) ) (SID_DESC = (GLOBAL_DBNAME = xienfei) (ORACLE_HOME = /u01/oracle) (SID_NAME = xff) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521)) ) ) 说明: 1)(ORACLE_HOME = /u01/oracle) oracle_home目录,测试不加也行 2)本静态监听两个数据库实例,每个实例的静态监听写到SID_DESC中 3)在数据库未open状态中,就可以远程连接到数据库,对数据库进行操作 4)使用静态监听时,客户端的tns最好配置为SERVICE_NAME,当然也可以同时配置SID和SERVICE_NAME,等数据库启动后,tns中无论是sid还是SERVICE_NAME均能访问数据库 二、动态注册 动态注册不需要显示的配置listener.ora文件,实例启动的时候,PMON进程根据instance_name,service_name参数将实例和服务动态注册到listerer中。如果没有设定instance_name,将使用db_name初始化参数值。如果没有设定service_names,将拼接db_name和db_domain参数值来注册监听。 SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /u01/oracle) (PROGRAM = extproc) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521)) (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0)) ) ) 说明:

1)不需要人工干预在lsnrctl start后,会自动注册数据库的instance_name,service_name,然后tns不论使用SID和SERVICE_NAME均可以连接上来 2)修改了SERVICE_NAME或者SID不用修改listener.ora文件

==============================================================

Oracle监听的动态注册和静态注册 动态监听

原文链接:http://www.linuxidc.com/Linux/2012-12/75812.htm 动态监听:

Oracle实例在启动时,或使用命令ALTER SYSTEM REGISTER ,或每隔一分钟,PMON进程会向监听进行动态注册,PMON进程根据init.ora中的instance_name,service_names两个参数将实例和服务动态注册到listener中;oracle监听器运行后,oracle实例在open时,会动态向监听程序注册其service_names和instance_name。可以使用show parameter instance_name和show parameter service_names来查看实例名和服务名,服务名可以有多个; 其中instance_name默认是:db_name

而service_names默认是:db_name.db_domain