【DB笔试面试837】在Oracle中,动态注册和静态注册有什么区别?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【DB笔试面试837】在Oracle中,动态注册和静态注册有什么区别?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含9384字,纯文字阅读大概需要14分钟。
内容图文
在Oracle中,什么是动态注册和静态注册,它们之间有什么区别?
? ? ? ? ? ?答案 ? ? ? ? ?
Oracle的注册就是将数据库作为一个服务注册到监听程序,而客户端不需要知道数据库名和实例名,只需要知道该数据库对外提供的服务名就可以申请连接到数据库。这个服务名可能与实例名一样,也有可能不一样。在数据库服务器启动过程中,数据库服务器会向监听程序注册相应的服务,根据注册方式的不同,目前Oracle支持动态注册和静态注册这两种注册方式。
动态注册是实例启动的时候PMON进程根据参数文件中的INSTANCE_NAME,SERVICE_NAMES两个参数将实例和服务动态注册到LISTENER中。动态注册默认只注册到默认的监听器上(名称为LISTENER、端口为1521),如果要向非默认监听器动态注册,那么需要配置LOCAL_LISTENER参数。需要注意的是,动态注册默认端口在数据库启动后大约1分钟之后才可以查询(lsnrct status),但可以在数据库中使用SQL语句“ALTER SYSTEM REGISTER;”立即注册数据库。
当使用动态注册时,若数据库处于NOMOUNT状态,则监听器中的状态为BLOCKED,此时,即使使用SYS用户也不能远程通过监听器连接到数据库。若将数据库启动到MOUNT状态,则监听器中的状态为READY,此时,只能使用SYS用户远程通过监听器连接到数据库。
有两种使用LOCAL_LISTENER的方式,下面分别介绍。
第一种方式,在Oracle用户下的$ORACLE_HOME/network/admin/tnsnames.ora文件中配置监听器的名称,然后配置LOCAL_LISTENER参数的值,如下所示:
1LISTENER_LHR?=
2??(DESCRIPTION?=
3????(ADDRESS?=?(PROTOCOL?=?TCP)(HOST?=?192.168.59.130)(PORT?=?1522))
4??)
? ? ?其中,LISTENER_LHR可以是任意名称,即使该名称的监听器不存在,依然可以动态注册数据库,但是需要保证HOST的值是正确的,另外需要保证PORT端口号是一个已经存在的监听器的端口号。
接下来以SYS用户设置LOCAL_LISTENER参数的值:
1ALTER?SYSTEM?SET?LOCAL_LISTENER=LISTENER_LHR;
2ALTER?SYSTEM?REGISTER;
? ? ?第二种方式,直接配置LOCAL_LISTENER参数的值,如下所示:
1ALTER?SYSTEM?SET?LOCAL_LISTENER='(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.59.130)(PORT=1522))';--配置1个端口
2ALTER?SYSTEM?SET?LOCAL_LISTENER='(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.59.130)(PORT=1522))','(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.59.130)(PORT=1523))';--配置多个端口
3ALTER?SYSTEM?REGISTER;
? ? ?这里的LOCAL_LISTENER参数后的值可以直接从命令lsnrctl status中获取,如下所示:
1[oracle@OCPLHR?admin]$?lsnrctl?status???
2
3LSNRCTL?for?Linux:?Version?11.2.0.3.0?-?Production?on?07-MAR-2018?22:16:52
4
5Copyright?(c)?1991,?2011,?Oracle.??All?rights?reserved.
6
7Connecting?to?(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.59.155)(PORT=1521)))
8STATUS?of?the?LISTENER
9------------------------
10Alias?????????????????????LISTENER
11Version???????????????????TNSLSNR?for?Linux:?Version?11.2.0.3.0?-?Production
12Start?Date????????????????07-MAR-2018?22:10:21
13Uptime????????????????????0?days?0?hr.?6?min.?31?sec
14Trace?Level???????????????off
15Security??????????????????ON:?Local?OS?Authentication
16SNMP??????????????????????OFF
17Listener?Parameter?File???/u01/app/oracle/product/11.2.0/dbhome_1/network/admin/listener.ora
18Listener?Log?File?????????/u01/app/oracle/diag/tnslsnr/OCPLHR/listener/alert/log.xml
19Listening?Endpoints?Summary...
20??(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.59.155)(PORT=1521)))
21Services?Summary...
22Service?"+ASM"?has?1?instance(s).
23??Instance?"+ASM",?status?READY,?has?1?handler(s)?for?this?service...
24Service?"OCPLHR1"?has?1?instance(s).
25??Instance?"OCPLHR1",?status?UNKNOWN,?has?1?handler(s)?for?this?service...
26The?command?completed?successfully
? ? ?需要注意的是,若将LOCAL_LISTENER设置为空,则在下一次数据库启动的时候会自动配置该参数的值。若LOCAL_LISTENER的值为空,则Oracle会默认动态注册默认监听器。若修改了LOCAL_LISTENER的值,且LOCAL_LISTENER的值中不包含默认监听器的配置,则Oracle不会再将当前数据库动态注册到默认监听器中。
静态注册就是在监听启动的时候,不管实例启动了没有,实例的名字都已经注册到监听中了,主要用于DBA远程启动数据库实例。在DG的搭建过程中也必须配置静态监听。静态注册主要在$ORACLE_HOME/network/admin/listener.ora文件中配置,静态注册的示例如下所示:
1LISTENER?=
2??(DESCRIPTION_LIST?=
3????(DESCRIPTION?=
4??????(ADDRESS?=?(PROTOCOL?=?TCP)(HOST?=?192.168.59.130)(PORT?=?1522))
5????)
6??)
7
8SID_LIST_LISTENER?=
9??(SID_LIST?=?
10????(SID_DESC?=
11??????(GLOBAL_DBNAME?=?orcl.lhr.com)
12??????(SID_NAME?=?orcl)
13??????(ORACLE_HOME?=?/u01/app/oracle/product/11.2.0/dbhome_1)
14????)
15????(SID_DESC?=
16??????(GLOBAL_DBNAME?=?rman.lhr.com)
17??????(SID_NAME?=?rman)
18??????(ORACLE_HOME?=?/u01/app/oracle/product/11.2.0/dbhome_1)
19????)
20??)
? ? ?其中,SID_LIST_XXX,这里的XXX必须是某一个已经存在的监听器的名称。
那么,如何查询某服务是静态注册还是动态注册呢?可以使用命令lsnrctl status来查看某服务是静态注册还是动态注册。实例状态为UNKNOWN时表明此服务是静态注册。这时监听器用来表明它不知道关于该实例的任何信息,只有当客户发出连接请求时,它才检查该实例是否存在。动态注册的数据库通过状态信息中的状态READY或状态BLOCKED(动态监听在NOMOUNT状态下为BLOCKED)来指明。不管何时关闭数据库,动态注册的数据库都会动态地从监听器注销,而与之相关的信息将从状态列表中消失。所以,不管数据库是在运行还是已经关闭,监听器总是知道它的状态。该信息将被用于连接请求的回退和负载平衡。
例如,数据库名为lhrdb,其LOCAL_LISTENER的配置如下所示:
1SYS@lhrdb>?ALTER?SYSTEM?SET?LOCAL_LISTENER='(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.59.13)(PORT=1530))';
2System?altered.
3SYS@lhrdb>?ALTER?SYSTEM?REGISTER;
4System?altered.
5SYS@lhrdb>?show?parameter?LOCAL_LISTENER
6NAME?????????????????????????????????TYPE????????VALUE
7------------------------------------?-----------?---------------------------------------------------------
8local_listener???????????????????????string??????(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.59.13)(PORT=1530))
? ? ?其LISTENER.ORA的配置如下所示:
1LISTENER_LHRTEST?=
2??(DESCRIPTION_LIST?=
3????(DESCRIPTION?=
4??????(ADDRESS?=?(PROTOCOL?=?TCP)(HOST?=?192.168.59.13)(PORT?=?1530))
5????)
6??)
7
8SID_LIST_LISTENER_LHRTEST?=
9(SID_LIST?=
10????(SID_DESC?=
11?????(GLOBAL_DBNAME?=?lhrdb)
12?????(ORACLE_HOME?=?/oracle/app/oracle/product/11.2.0/db)
13?????(SID_NAME?=?lhrdb)
14????)
15???)
? ? ?需要说明的是,该库既配置了动态监听,也配置了静态监听,执行lsnrctl status LISTENER_LHRTEST后可以看到:
1[ZFZHLHRDB1:grid]:/home/grid>lsnrctl?status??LISTENER_LHRTEST
2
3LSNRCTL?for?IBM/AIX?RISC?System/6000:?Version?11.2.0.4.0?-?Production?on?12-OCT-2016?17:35:35
4
5Copyright?(c)?1991,?2013,?Oracle.??All?rights?reserved.
6
7Connecting?to?(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.59.13)(PORT=1530)))
8STATUS?of?the?LISTENER
9------------------------
10Alias?????????????????????LISTENER_LHRTEST
11Version???????????????????TNSLSNR?for?IBM/AIX?RISC?System/6000:?Version?11.2.0.4.0?-?Production
12Start?Date????????????????12-OCT-2016?17:26:44
13Uptime????????????????????0?days?0?hr.?8?min.?51?sec
14Trace?Level???????????????off
15Security??????????????????ON:?Local?OS?Authentication
16SNMP??????????????????????OFF
17Listener?Parameter?File???/oracle/app/11.2.0/grid/network/admin/listener.ora
18Listener?Log?File?????????/oracle/app/grid/diag/tnslsnr/ZFZHLHRDB1/listener_lhrtest/alert/log.xml
19Listening?Endpoints?Summary...
20??(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.59.13)(PORT=1530)))
21Services?Summary...
22Service?"lhrdb"?has?2?instance(s).
23??Instance?"lhrdb",?status?UNKNOWN,?has?1?handler(s)?for?this?service...
24??Instance?"lhrdb",?status?READY,?has?1?handler(s)?for?this?service...
25Service?"lhrdbXDB"?has?1?instance(s).
26??Instance?"lhrdb",?status?READY,?has?1?handler(s)?for?this?service...
27The?command?completed?successfully
28[ZFZHLHRDB1:grid]:/home/grid>lsnrctl??
29
30LSNRCTL?for?IBM/AIX?RISC?System/6000:?Version?11.2.0.4.0?-?Production?on?12-OCT-2016?17:38:48
31
32Copyright?(c)?1991,?2013,?Oracle.??All?rights?reserved.
33
34Welcome?to?LSNRCTL,?type?"help"?for?information.
35
36LSNRCTL>?services?LISTENER_LHRTEST
37Connecting?to?(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.59.13)(PORT=1530)))
38Services?Summary...
39Service?"lhrdb"?has?2?instance(s).
40??Instance?"lhrdb",?status?UNKNOWN,?has?1?handler(s)?for?this?service...
41????Handler(s):
42??????"DEDICATED"?established:0?refused:0
43?????????LOCAL?SERVER
44??Instance?"lhrdb",?status?READY,?has?1?handler(s)?for?this?service...
45????Handler(s):
46??????"DEDICATED"?established:0?refused:0?state:ready
47?????????LOCAL?SERVER
48Service?"lhrdbXDB"?has?1?instance(s).
49??Instance?"lhrdb",?status?READY,?has?1?handler(s)?for?this?service...
50????Handler(s):
51??????"D000"?established:0?refused:0?current:0?max:1022?state:ready
52?????????DISPATCHER?<machine:?ZFZHLHRDB1,?pid:?7012814>
53?????????(ADDRESS=(PROTOCOL=tcp)(HOST=ZFZHLHRDB1)(PORT=41041))
54The?command?completed?successfully
? ? ?从上面的内容可以看出,监听器中既有UNKNOWN也有READY,UNKNOWN表示静态监听,READY表示动态监听,establicshed表示累计的连接总数,而不是当前连接数。
& 说明:
有关监听更多的内容可以参考我的BLOG:http://blog.itpub.net/26736162/viewspace-1423799/
本文选自《Oracle程序员面试笔试宝典》,作者:小麦苗
DB宝分享的IT资料:https://mp.weixin.qq.com/s/Iwsy-zkzwgs8nYkcMz29ag?
● 本文作者:小麦苗,只专注于数据库的技术,更注重技术的运用
● 作者博客地址:http://blog.itpub.net/26736162/abstract/1/
● 本系列题目来源于作者的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解
● 版权所有,欢迎分享本文,转载请保留出处
● QQ:646634621 QQ群:230161599、618766405
● 微信:lhrbestxh
● 微信公众号:DB宝
● 提供Oracle OCP、OCM、高可用(rac+dg+ogg)和MySQL最实用的技能培训
● 题目解答若有不当之处,还望各位朋友批评指正,共同进步
长按下图识别二维码或微信扫描下图二维码来关注小麦苗的微信公众号:DB宝,学习最实用的数据库技术。
本文分享自微信公众号 - DB宝(lhrdba)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
内容总结
以上是互联网集市为您收集整理的【DB笔试面试837】在Oracle中,动态注册和静态注册有什么区别?全部内容,希望文章能够帮你解决【DB笔试面试837】在Oracle中,动态注册和静态注册有什么区别?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。