ORACLE 监听动态注册与静态注

来源:互联网 发布:adobe软件 编辑:程序博客网 时间:2024/05/16 09:38

http://blog.csdn.net/zhaowenzhong/article/details/6118478

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

 

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

 

区分动态注册和静态注册
(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
当发生上述三种情况时,不会发生监听注册失败


4、查询某服务是静态注册还是动态注册 
  可以使用命令lsnrctl status来查看某服务是静态注册还是动态注册。 
  实例状态为UNKNOWN值时表明此服务是静态注册的设置。这时监听器用来表明它不知道关于该实例的任何信息,只有当客户发出连接请求时,它才检查该实例是否存在。 
  动态注册的数据库通过状态信息中的状态READY或状态BLOCKED(对于一个备用数据库)来指明。不管关闭何时数据库,动态注册的数据库都会动态地从 监听器注销,
而与之相关的信息将从状态列表中消失。这样,不管数据库是在运行还是已经关闭,监听器总是知道它的状态。该信息将被用于连接请求的回退 (fallback)和负载平衡。


0 0
原创粉丝点击