您的位置:首页 > 数据库 > Oracle

oracle注册

2013-12-29 15:14 274 查看
一、注册类型和区别

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目录下,这个原因废了我好长时间找到,不了解新特性的弊端啊

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: