下面说一下监听,这就是以前做实验的时候被卡门时间最长的地方,也是《大话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。
阅读(1690) | 评论(0) | 转发(0) |