Oracle将监听服务注册到集群中,Oracle Listener 动态注册

动态注册是在instance启动的时候PMON进程根据init.ora中的instance_name,service_names两个参数将实例和服务动态注册到listener中。sql

首先要在init.ora中指定instance_name,service_names两个参数的值。在sqlplus下经过show parameter service_names 和show parameter instance_name能够查看这两个参数的值。数据库

注册到监听器中的实例值从init.ora文件中的instance_name参数取得。若是该参数没有设定值,那么它将取init.ora文件中的db_name的值。若是在RAC中配置,您必须将集群中每一个实例的instance_name参数设置为一个惟一的值。服务器

注册到监听器中的服务值从init.ora文件中的参数service_names取得。若是该参数没有设定值,oracle

数据库将拼接init.ora文件中的 db_name和db_domain的值来注册本身。若是选择提供service_names值,负载均衡

您可使用彻底限定的名称(好比 orcl.oracle.com)或缩写的名称(好比orcl)。dom

若是选择缩写的名称并设置了db_domain参数,注册到监听器中的服务将是 service_name值和db_domain值的拼接。进程

例以下面的设置将致使服务orcl.oracle.com被注册到监听器中:it

db_domain=oracle.com集群

service_names=orcl ;配置

采起动态注册方法时,listener.ora中的内容以下:

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = PLSExtProc)

(ORACLE_HOME = D:/oracle/product/10.2.0/db_1)

(PROGRAM = extproc)

)

)

可选择的是,您能够在service_names参数中指定多个服务值,值之间用逗号格开,这对于共享服务器配置是颇有用的。

动态注册默认只注册到默认的监听器上(名称是LISTENER、端口是152一、协议是TCP),由于pmon只会动态注册port等于1521的监听,

不然pmon不能动态注册listener,若是须要向非默认监听注册,则须要配置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;

系统已更改。

$lsnrctl status listener

若是没有显式设置service_names和instance_name的值,那么仅当数据库在监听器运行以后启动时,动态注册才会发生;

在这种状况下,若是监听器后来发生了重启,动态注册信息将会丢失。显然,最好在全部的数据库启动以前先启动监听器,

这样就会避免没有显式设置 service_names和instance_name的值时,若重启监听器带来的动态注册信息丢失的状况。

为初始化参数service_names和instance_name设置显式的值是个很好的实践,尽管若是您没有设置它们,

Oracle也会为动态注册而生成默认值(基于db_name和db_main)。这样作的缘由是,若是监听器在数据库启动以后从新启动,

其动态注册行为将会有一些微妙的区别.若是监听器在数据库运行以后从新启动,

大家仅当您在init.ora文件中显式地设置了service_names和instance_name的值时,每一个数据库的PMON进程才会在很短的时间以后

自动注册数据库。

若是须要执行链接时故障转移或负载均衡,或者想要在RAC中配置在实例之间透明地分布链接,那么使用service_names参数将是必要的。

为启用这些功能,您只须要将每一个实例的数据库参数文件中的service_names设置为同一个值,并在客户端链接请求的service_name设置

中引用该值。

若是没有显式设置service_names和instance_name的值,那么仅当数据库在监听器运行以后启动时,动态注册才会发生;在这种状况下,

若是监听器后来发生了重启,动态注册信息将会丢失。显然,最后在启动任何数据库以前启动服务器上的监听器,并彻底避免监听器的重启。

另外,您还能够在SQL*PLUS中使用命令:

SQL>ALTER SYSTEM REGISTER;

在数据库打开时的任什么时候候,手工地在监听器中注册服务值。这个命令对于替换因监听器重启而丢失地服务值颇有用,

而且它所注册地值与在数据库启动时由动态注册所设置的值彻底同样。

动态监听:

oracle监听器运行后,oracle实例在open时,会动态向监听程序注册其service_names和instance_name。

其中instance_name默认是:db_name

而service_names默认是:db_name.db_domain

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值