AIX下遭遇TNS-12531

AIX下遭遇TNS-12531

上周做HACMP的时候,由于修改了/etc/hosts中的内容,将原来的IP变成了HA的service IP,后面的名字也就从原来的hostname改成了hostname_SVC,也就是/etc/hosts中没有了IP和hostname的对应记录,然后启动监听的时候发现监听无法起来,一直挂起在那里:

$lsnrctl start

LSNRCTL for IBM/AIX RISC System/6000: Version 9.2.0.6.0 - Production on 24-NOV-2007 17:45:25

Copyright (c) 1991, 2002, Oracle Corporation. All rights reserved.

Starting /u01/oracle/product/9.2/bin/tnslsnr: please wait…

TNSLSNR for IBM/AIX RISC System/6000: Version 9.2.0.6.0 - Production
System parameter file is /u01/oracle/product/9.2/network/admin/listener.ora
Log messages written to /u01/oracle/product/9.2/network/log/listener.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.168.168)(PORT=1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC)))

查看 /u01/oracle/product/9.2/network/log/listener.log,发现全是TNS-12531错误,并且在不停的增加中:

TNS-12531: TNS:cannot allocate memory
24-NOV-2007 17:53:10 * 12531
TNS-12531: TNS:cannot allocate memory
24-NOV-2007 17:53:10 * 12531
TNS-12531: TNS:cannot allocate memory
24-NOV-2007 17:53:10 * 12531
TNS-12531: TNS:cannot allocate memory
24-NOV-2007 17:53:10 * 12531
TNS-12531: TNS:cannot allocate memory

开玩笑,系统已经切换到备库,怎么可能连起监听的内存都没有了,显然不是内存不足的问题。后来还是piner想起以前也出现过相同的状况,就是/etc/hosts中缺乏hostname的记录引起的,果然一加上就正常了。注意到listener.ora中用的是IP,不是hostname。

今天又测试了一把,在AIX5.3和Oracle9206中该问题是可以重现的,在Redhat Linux Enterprise 4中没有问题。查metalink,Note:219206.1上说Unix平台都有这个问题,另外还有一个可能的原因就是oracle用户没有权限读取/etc/hosts文件。有其他平台如HP-UX,Solaris的朋友可以帮忙测试一下^_^

Oracle10gR2 Streams(五)全库复制之三

在《Oracle10gR2 Streams(四)全库复制之二》中利用maintain_global配置了一个downstream的全库复制,本例将在该试验的基础上修改成real-time downstream的全库复制。

所谓实时异地捕获,其实和普通的异地捕获基本上是一致的,所不同的,就是传递到捕获进程所在库的不再是归档日志,而是通过lgwr进程直接传送当前redo。这和data guard中使用arch还是lgwr来传送日志的机制是一样的。

一、在捕获进程所在库创建standby redo logfile

STRMADM@dest>alter database add standby logfile
  2  'F:\oracle\oradata\dest\stdbyredo01.log' size 5m;

Database altered.

STRMADM@dest>alter database add standby logfile
  2  'F:\oracle\oradata\dest\stdbyredo02.log' size 5m;

Database altered.

STRMADM@dest>alter database add standby logfile
  2  'F:\oracle\oradata\dest\stdbyredo03.log' size 5m;

Database altered.

STRMADM@dest>alter database add standby logfile
  2  'F:\oracle\oradata\dest\stdbyredo04.log' size 5m;

Database altered.

[继续阅读全文]

Oracle10gR2 Streams(四)全库复制之二

上一篇中展示了使用pre_instantiation_setup/post_instantiation_setup结合rman做初始化的方式实现全库复制的过程,可以说是非常的简单。本例将使用maintain_global来配置一个单向的远程捕获的全库复制。Maintain_global使用expdp/impdp来进行初始化,所以需要目标库已经存在。如果源库比较大,采用data pump初始化可能需要比较长的时间。

源库:ning.test
目标库:dest.test

一、配置directory

因为是使用expdp/impdp来执行初始化,所以需要为expdp/impdp创建响应的directory。当然这不是必须的,data pump可以直接通过网络执行导入。

STRMADM@ning>create directory dir_source as 'f:\oracle\source';

Directory created.

STRMADM@dest>create directory dir_dest as 'f:\oracle\dest';

Directory created.

[继续阅读全文]

Oracle10gR2 Streams(三)全库复制之一

在Oracle10gR2中,配置全库复制有两种方式,都是使用dbms_streams_adm中的过程来配置:

一种是pre_instantiation_setup/post_instantiation_setup结合rman来做初始化;另外一种方式是通过maintain_global结合expdp/impdp来做初始化。这一篇展示第一种配置方式,下一篇再来试验第二种方式。

pre_instantiation_setup/post_instantiation_setup这种方式只能配置本地捕获的全库复制,采用rman的duplicate来进行目标库的初始化,所以一开始目标库是不存在的。这两个过程都在源库中执行。

源库:ning.test
目标库:dest.test

一、执行pre_instantiation_setup

STRMADM@ning>DECLARE
  2    empty_tbs  DBMS_STREAMS_TABLESPACE_ADM.TABLESPACE_SET;
  3  BEGIN
  4    DBMS_STREAMS_ADM.PRE_INSTANTIATION_SETUP(
  5      maintain_mode        => 'GLOBAL',
  6      tablespace_names     => empty_tbs,
  7      source_database      => 'ning.test',
  8      destination_database => 'dest.test',
  9      perform_actions      => true,
 10      bi_directional       => true,
 11      include_ddl          => true,
 12      start_processes      => true,
 13      exclude_schemas      => NULL,
 14      exclude_flags        => DBMS_STREAMS_ADM.EXCLUDE_FLAGS_UNSUPPORTED +
 15                              DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DML +
 16                              DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DDL);
 17  END;
 18  /

PL/SQL procedure successfully completed.

[继续阅读全文]