之前都是网上看过整理的,今天看到local_listener竟然一点印象都没有,太恐怖,索性再好好整理一下,避免再次忘记。

一.什么是注册

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

在数据库服务器启动过程中,数据库服务器会向监听程序注册相应的服务(无论何时启动一个数据库,默认地都有两条信息注册到监听器中:数据库服务器对应的实例和服务)

相当于是这样:在数据库服务器和客户端之间有一监听程序(Listener),在监听程序中,会记录相应数据库对应的服务名(一个数据库可能对应有多个服务名),当客户端需要连接数据库时,只需要提供服务名,就可以建立客户端和服务器之间的连接。

二、动态注册动态注册是在instance启动的时候PMON进程根据init.ora中的instance_name,service_names

(Service_name数据库创建之后默认情况下和数据库名一样,和sid名不一定一样)。

两个参数将实例和服务动态注册到listener中。首先要在init.ora中指定instance_name,service_names两个参数的值。

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

注册到监听器中的服务值从init.ora文件中的参数service_names取得。如果该参数没有设定值,数据库将拼接init.ora文件中的db_name和db_domain的值来注册自己。如果选择提供service_names值,您可以使用完全限定的名称(比如orcl.oracle.com)或缩写的名称(比如orcl)。如果选择缩写的名称并设置了db_domain参数,注册到监听器中的服务将是service_name值和db_domain值的拼接。例如下面的设置将导致服务orcl.oracle.com被注册到监听器中:db_domain=oracle.comservice_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_LMISNMG,并且用了非1521端口,为了用动态注册,源数据库启用了local_listener参数,但是我这边在用模板建库的时候,我是先创建了侦听listener,并且端口是1521,所以在用模板创建数据库的时候就遇到了这样的错误。

下面是更详细的原因:

------------------------------------------------------------------------------------------------------------------------------------动态注册默认只注册到默认的监听器上(名称是LISTENER、端口是1521、协议是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

三、静态注册静态注册就是实例启动时读取listener.ora文件的配置,将实例和服务注册到监听程序,也可以是实例启动后,listener中的配置会注册到侦听中。无论何时启动一个数据库,默认地都有两条信息注册到监听器中:数据库服务器对应的实例和服务。静态注册时,listener.ora中的GLOBAL_DBNAME向外提供服务名,listener.ora中的SID_NAME提供注册的实例名。采取静态注册方法时,listener.ora中的内容如下:SID_LIST_LISTENER

=(SID_LIST

=(SID_DESC

=(SID_NAME

= PLSExtProc)(ORACLE_HOME

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

= extproc))(SID_DESC

=(GLOBAL_DBNAME

=orcl)(ORACLE_HOME

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

=orcl))(SID_DESC

=(GLOBAL_DBNAME

=orcl1)(ORACLE_HOME

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

=orcl)))该文件表明数据库是单实例的,实例名为orcl,向外提供了两个服务:orcl和orcl1

静态监听:

oracle实例运行后,监听程序启动时,根据listener.ora的配置注册相应的服务。

其中global_dbname对应的是oracle对外的服务名,即初始化参数里的service_names

而sid_name对应的是oralce实例的名称,即初始化参数里的instance_name

既然有动态监听为什么还要静态监听呢?原因如下:

1.监听器不是最早启动,oracle实例先启动

2.监听器重启

3.oracle实例没有open

四、查询某服务是静态注册还是动态注册可以使用命令lsnrctl

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

oracle 静态监听 端口,侦听动态注册静态注册local_listener参数端口PORT相关推荐

  1. 解决Python Socket UDP端口侦听线程内更新UI界面卡顿、奔溃的问题

    网络读卡器介绍:WIFI无线网络RFID云读卡器远程网络开关物流网NB-IoT4G刷卡阅读器-淘宝网 (taobao.com) Python使用PyQt5做UI界面,开启线程侦听UDP端口,端口接收到 ...

  2. vue 侦听器侦听对象属性_Spring中的异步和事务性事件侦听器

    vue 侦听器侦听对象属性 内置的事件发布功能从Spring的早期版本开始存在,并且对于处理同一应用程序上下文中Spring组件之间的基本通信仍然有用. 通常,应用程序可以生成应用程序事件(可以是任意 ...

  3. vue 侦听器侦听对象属性_不删除侦听器–使用ListenerHandles

    vue 侦听器侦听对象属性 听一个可观察的实例并对它的变化做出React很有趣. 做一些必要的事情来打断或结束这种聆听会变得很有趣. 让我们看看问题的根源和解决方法. 总览 这篇文章将首先讨论这种情况 ...

  4. vue 侦听器侦听对象属性_SQL Server始终处于侦听器状态

    vue 侦听器侦听对象属性 This article on SQL Server Always On Listeners includes an overview and various connec ...

  5. Linux 端口侦听不到,在linux上,如何在不尝试连接的情况下检查端口是否处于侦听状态...

    如果本地计算机上的端口(如果通过IP或接口也需要)处于侦听状态,我如何检查?我不想连接到这个端口进行检查,因为我不想激怒这个端口后面的服务. 我想用它来将缺少的net.tcp.listen项添加到Za ...

  6. 计算机监听的端口,侦听计算机的指定端口并分析其数据包,监听,本,解析

    # 可以用80端口进行试验,只要打开浏览器浏览网页即可捕获数据包 import os ###################################### ########## ####### ...

  7. oracle tns和sid,oracle – TNS-12505:TNS:侦听器当前不知道连接描述符中给出的SID

    我试图从NetBeans连接到Oracle 10.2.0,使用以下连接字符串: jdbc:oracle:thin:@localhost:1521:XE 最奇怪的部分是,一切工作正常,直到一个重新启动. ...

  8. 5.Vue 计算属性和侦听器

    Hello,我是 Alex 007,一个热爱计算机编程和硬件设计的小白,为啥是007呢?因为叫 Alex 的人太多了,再加上每天007的生活,Alex 007就诞生了. 5.Vue 计算属性和侦听器 ...

  9. vue的侦听器,过滤器和过度动画的了解

    目录 侦听器 普通监听 深度监听 百度搜索案例 过滤器 局部过滤器 全局过滤器 全局过滤器和局部过滤器的区别 封装时间过滤器 总结 计算属性和 watch 的区别 vue过渡动画 transition ...

最新文章

  1. 技术前沿:Redis推出性能碾压ES和Mongo的大杀器
  2. MyEclipse6.0下代码提示(alt+/)无法使用的解决方法
  3. python画人口迁徙图_echarts 手把手教你画迁徙图(城市内部级别+百度地图支持)2...
  4. Java集合框架源码剖析:LinkedHashSet 和 LinkedHashMap
  5. 关于分布式锁的面试题都在这里了
  6. python怎么输出表格中随机数_python 输出一个随机数
  7. python第三库安装方法记录
  8. opencv常用函数整理(二)
  9. 解码H264帧要注意的两个问题
  10. 人工智能与心理学(人工智能最终方向)
  11. JS 数据容量转换/换算
  12. 计算机vb输入框函数,VB基本函数大全
  13. 公务员考试辅导:申论写作套路万能模板
  14. 可胜任任何网吧技术主管的绝招
  15. 台式电脑计算机怎么看是固态硬盘,怎么看电脑是机械硬盘还是固态硬盘
  16. 基于android2.3.5系统:源码下载及android体系架构
  17. Redis设置过期时间为当月月底-----自动计算
  18. 一直没搞懂灰盒测试的我,收藏了这篇文章
  19. 单片机:数字电压表TLC2543 C程序代码
  20. 必看的十大黑客电影,你看了几部?

热门文章

  1. python3.8.0安装_Python3.8.0
  2. vs12新建ajax,VS2012下WebService 的创建,部署和使用
  3. go实现数组切片洗牌函数Shuffle
  4. SSM框架整合中遇到重复的问题Ambiguous handler methods mapped for HTTP
  5. pagefile.sys and heberfil.sys
  6. Objective-C学习笔记(一)–类
  7. 100C之13:他该如何存款?
  8. [linux]Ubuntu12.1下打开terminal的方式
  9. Iterator_迭代器模式_PHP语言描述
  10. centos一键安装redmine