Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5602283
  • 博文数量: 745
  • 博客积分: 10075
  • 博客等级: 上将
  • 技术积分: 7716
  • 用 户 组: 普通用户
  • 注册时间: 2005-04-29 12:09
文章分类

全部博文(745)

文章存档

2019年(1)

2016年(1)

2010年(31)

2009年(88)

2008年(129)

2007年(155)

2006年(197)

2005年(143)

分类: Oracle

2009-09-14 17:29:33

下面说一下监听,这就是以前做实验的时候被卡门时间最长的地方,也是《大话ORACLE RAC》作者没有交代清楚的地方。很多文档都提到了实验做到一定程度要配置监听和TNS,以方便主、备节点互通有无。但却忽略提到一点那就是监听也有动态监听和静态监听之分,在oracle data guard实验中我们必须要用到静态监听,否则实验就没法进行下去。
 
先抄摘一点有关动态监听和静态监听的概念:
静态监听指实例启动时读取listener.ora配置文件,将实例和服务注册到监听程序。无论何时启动一个数据库,默认都有两条信息注册到监听器中:实例和服务
SID_LIST_LISTENER =
  ( SID_LIST =
      (SID_DESC =
         (GLOBAL_DBNAME = Ora8)
         (SID_NAME = test)
      )
  )

LISTENER =
  ( DESCRIPTION =
     (ADDRESS = (HOST = 192.168.0.88)(PROTOCOL = TCP)(PORT = 1522))
  )
这是一个最简单的静态监听配置文件,SID_LIST_LISTENER部分的GLOBAL_DBNAME表示向外提供的服务名,SID_NAME是提供注册的实例。在tnsnames.ora文件中的CONNECT_DATA部分,可分别选择SERVICE_NAME=Ora8或SID=test为客户端提供连接。
动态注册不需要显示的配置listener.ora文件,实例启动的时候,PMON进程根据instance_name,service_name参数将实例和服务动态注册到listerer中。如果没有设定instance_name,将使用db_name初始化参数值。如果没有设定service_names,将拼接db_name和db_domain参数值来注册监听。
 
如果对上述一番话还是不太明白,我再简单说一下一个最为关键的区别,在oracle data guard实验中,有时候我们需要将备节点启动到mount模式下,以此来接受主节点的redo日志文件完成自身的同步过程。而这个过程的前提就是两者在网络上要有一个互动,即你能凝望着我,我也能关切到你。如果是配置的动态监听,只要有实例没有启动到open状态,那就无法通过网络将服务注册到数据库,而只有静态监听可以完成这个任务。很多文档都指出需要修改listener.ora文件,但却不贯彻什么是静态监听什么是动态监听,所以具体操作起来就容易犯错误,继而去怀疑是不是参数文件配置有问题,这可真是无妄之灾。
 
下面显示的是我配置的静态监听内容以及TNS文件内容:
$ cat listener.ora
# listener.ora Network Configuration File: /u1/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS_LIST =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 128.199.36.152)(PORT = 1521))
      )
    )
  )
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /home/db/oracle/10g)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = ora)
      (ORACLE_HOME = /home/db/oracle/10g)
      (SID_NAME = ora)
    )
  )
和动态监听所不同的是,这里手工指定了ORACLE_HOME路径以及SID名称。
 
$ cat tnsnames.ora
# tnsnames.ora Network Configuration File: /home/db/oracle/10g/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
10GPRI =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 128.199.36.152)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ora)
    )
  )
ORA =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 128.199.36.152)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = ora)
    )
  )
10GSTANDBY =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 128.199.36.53)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ora)
    )
  )
两个服务分别是10GPRI以及10GSTANDBY。
 

 
阅读(1652) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~