oracle监听 动态注册与静态注册
一、什么是注册
注册就是将数据库作为一个服务注册到监听程序中。客户端不需要知道数据库名和实例名,只需要知道该数据库对外提供的服务名就可以申请链接到数据库。这个服务名可以与数据库名一样,也有可能不一样。
在数据库服务启动的过程中,数据库服务器会像监听程序注册相应的服务,无论何时启动数据库,默认的都有两条信息注册到监听器中,数据库服务器对应的实例和服务,客户端和服务器之间的链接,只需要提供一个服务名就可以了。
二、区分动态注册和静态注册
(1)使用listener.ora文件判断
动态注册
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(PROGRAM = extproc)
(SID_NAME = PLSExtProc)
(ORACLE_HOME = D:\oradata\orcl)
)
)
静态注册
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(PROGRAM = extproc)
(SID_NAME = PLSExtProc)
(ORACLE_HOME = D:\oradata\orcl)
)
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = D:\oradata\orcl)
(SID_NAME = ORCL)
)
(SID_DESC =
(GLOBAL_DBNAME = orcl1)
(ORACLE_HOME = D:\oradata\orcl)
(SID_NAME = ORCL)
)
)
通过查看虽然可以大致看出,但是这种方法并不能和明确的现实数据库在运行时的实际情况
三、动态注册
动态注册是在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:\oradata\orcl)
)
)
由于动态注册需要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:\oradata\orcl)
)
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = D:\oradata\orcl)
(SID_NAME = ORCL)
)
(SID_DESC =
(GLOBAL_DBNAME = orcl1)
(ORACLE_HOME = D:\oradata\orcl)
(SID_NAME = ORCL)
)
)
golbal_dbname是数据库对外提供的服务名,sid_name是实例名,该文件说明数据库是单实例数据库,实例名为orcl,向外提供了两个服务orcl和orcl1.
静态注册的好处可以总结为
1、监听不是最早启动
2、数据库运行期间,监听发成重启
3、oracle实例还没有open
当发生上述三种情况时,不会发生监听注册失败。