oracle注册

一、注册类型和区别

1、  注册概念,类型

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

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

到监听器中:数据库服务器对应的实例和服务。)

2、  类型

注册分为静态注册,动态注册

静态注册:

1)        在数据库没有open状态时,也可以连接到数据库,进行操作,不安全但是可以启动关闭之

2)        启动过程可以晚于database,并且可以在数据库运行期间重启

动态注册:

1)  启动过程最好是在数据库启动之前

2)  如果是向非默认端口注册,需要配置local_listener参数

3、  区分

1)  使用lsnrcel status

如果提示实例状态unknown表明是静态注册,直到客户端发送连接请求,监听才检查实例是否存在

如果状态ready或者是blocked(备用数据库),表明是动态注册,监听其会动态获知数据库的状态信息,该信息将被用于连接请求的回退和负载平衡

2)  查看listener.ora文件

如果文件中包含比如以下内容,就是静态注册,否则是动态注册

(SID_DESC=

      (GLOBAL_DBNAME = orcl)

      (ORACLE_HOME = XXX)

      (SID_NAME = ORCL)

    )

二、静态注册

静态注册就是实例启动时读取listener.ora文件的配置,将实例和服务注册到监听程序中

SID_LIST_LISTENER=

  (SID_LIST =

    (SID_DESC =

      (PROGRAM = extproc)

      (SID_NAME = PLSExtProc)

      (ORACLE_HOME =XXX)

    )

    (SID_DESC =

      (GLOBAL_DBNAME = orcl)

      (ORACLE_HOME = XXX)

      (SID_NAME = ORCL)

    )

    (SID_DESC =

      (GLOBAL_DBNAME = orcl1)

      (ORACLE_HOME =XXX)

      (SID_NAME = ORCL)

    )

  )

golbal_dbname是数据库对外提供的服务名,sid_name是实例名,该数据库只有一个实例,但是又两个服务名,集群可以提供多个实例

以下是监听两个实例

LISTENER=

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST =XXX)(PORT= 1521))

    )

  )

SID_LIST_LISTENER=

  (SID_LIST =

    (SID_DESC = 

     (GLOBAL_DBNAME =orcl1_server)

     (ORACLE_HOME =XXX)

     (SID_NAME = orcl1)

    )

   (SID_DESC =

     (GLOBAL_DBNAME = orcl2_server)

     (ORACLE_HOME =XXX)

     (SID_NAME = orcl2)

     )

  )

 

静态注册时,listener.ora中的GLOBAL_DBNAME向外提供服务名,listener.ora中的SID_NAME提供注册的实例名

三、动态注册

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

 首先要在init.ora中指定instance_name,service_names两个参数的值。在sqlplus下通过showparameter service_names 和show parameter instance_name可以查看这两个参数的值。

  注册到监听器中的实例值从init.ora文件中的instance_name参数取得。如果该参数没有设定值,那么它将取init.ora文件中的db_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.com

service_names=orcl ;

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

  动态注册默认只注册到默认的监听器上(名称是LISTENER、端口是1521、协议是TCP),如果需要向非默认监听注册,则需要配置

local_listener参数!

比如要注册

LISTENER=

(DESCRIPTION=

(ADDRESS= (PROTOCOL = TCP)(HOST = XXX)(PORT = 1522))

)

以sys用户登陆,执行:

altersystem set local_listener=listener;

alter system register;

或者

alter system set LOCAL_LISTENER='(ADDRESS = (PROTOCOL = TCP)(HOST = XXX)(PORT= 1522))';

alter system register;

 

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

情况 下,如果监听器后来发生了重启,动态注册信息将会丢失。显然,最好在所有的数据库启动之前先启动监听器,这样就会避免没

有显式设置 service_names和instance_name的值时,若重启监听器带来的动态注册信息丢失的情况。

  为初始化参数service_names和instance_name设置显式的值是个值得可取的方法和建议。因为如果监听器在数据库运行过程中要

重新启 动,仅当你在init.ora文件中显式地设置了service_names和instance_name的值时,每个数据库的PMON进程才会在很短的 时

间之内完成动态注册。

四、疑问

比如在我的机器上注册的文件为

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = loge-PC)(PORT = 1521))
    )
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
SID_LIST_LISTENER =
  (SID_LIST =
   
     (SID_DESC =
      (SID_NAME = orcl)
      (ORACLE_HOME = G:\app\Administrator\product\11.2.0\dbhome_1)
      (GLOBAL_DBNAME = orcl)
     )
    )

ADR_BASE_LISTENER = G:\app\Administrator\product\11.2.0\dbhome_1\log

 这就提供了两个动态注册和静态注册,看看状态

LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 15-APR-2014 22:12
:19

Copyright (c) 1991, 2010, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=loge-PC)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Produ
ction
Start Date                15-APR-2014 22:06:30
Uptime                    0 days 0 hr. 5 min. 51 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   D:\instantclient_11_2\listener.ora
Listener Log File         g:\app\administrator\product\11.2.0\dbhome_1\log\diag\
tnslsnr\loge-PC\listener\alert\log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=loge-PC)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
Services Summary...
Service "orcl" has 2 instance(s).
  Instance "orcl", status UNKNOWN, has 1 handler(s) for this service...
  Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orclXDB" has 1 instance(s).
  Instance "orcl", status READY, has 1 handler(s) for this service...
The command completed successfully

unknown表示静态注册

五、问题

如果出现查看坚挺时候提示:The listener supports no services

或者表示动态监听,或者表示监听目前有问题,如果是第一种情况检查数据库服务,,如果是第二种那就有很多原因了

一下是可供参考的原因

主机改动过ip地址,linux下修改hosts文件即可

asm创建的数据库,监听默认放在grid用户下的network目录下,这个原因废了我好长时间找到,不了解新特性的弊端啊

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朝闻道-夕死可矣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值