Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2104256
  • 博文数量: 220
  • 博客积分: 8531
  • 博客等级: 中将
  • 技术积分: 4976
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-18 13:33
文章分类

全部博文(220)

文章存档

2017年(1)

2015年(1)

2014年(5)

2013年(6)

2012年(6)

2011年(30)

2010年(37)

2009年(53)

2008年(41)

2007年(40)

分类: LINUX

2013-09-23 11:39:55

    原同事部署的一套HA监控oracle数据库,用户一直说window客户端无法访问。
   
    问题1:HA启动oracle之后,本地可以sqlplus登录,远程客户端无法登录。
    测试发现的确如此,而且本地加@orcl之后也无法登录,说明是侦听问题。侦听文件listener.ora中内容较少,只有:

点击(此处)折叠或打开

  1. LISITENER =
  2. (DISCRIPTION_LIST =
  3.  (DESCRIPTION =
  4.   (ADDRESS = (PROTOCOL = TCP)(HOST = 172.31.114.210)(PORT = 1521))
  5.  )
  6. )
  7. ADR_BASE_LISTENER = /opt/app/oracle
    listener.ora中只有IP和端口信息,没有sid信息,所以启动后无法被客户端远程访问,相关资料可以参考:关于红旗HA监控Oracle10g的问题
   解决办法有两种,简单的通过netca删除重建一下侦听即可。但是现场没有图形,所以采用修改listener.ora文件,在此文件中添加如下部分:

点击(此处)折叠或打开

  1. SID_LIST_LISTENER =
  2. (SID_DESC =
  3.  (GLOBAL_DBNAME = orcl)
  4.  (SID_NAME = orcl)
  5.  (ORACLE_HOME = /data/app/oracle/product/10.2.0/db_1)
  6. )
    重启侦听服务即可。其实在本地tnsname.ora配置正确的话(使用fip),本地通过sqlplus wangjx/111111@orcl即模拟客户端远程登录,不加@orcl则只登录本地数据库。
   
    问题2:oracle OEM(OracleEnterpriseManager基于web管理数据库的工具)无法使用。
    Oracle企业管理器简称OEM,是数据库启动后,通过执行命令emctl start dbconsole来启动的,HA是不负责这部分的。这部分启动停止都非常耗时。
    OEM在db1启动之后,通过访问时提示数据库没有启动,所以无法使用。通过排查主要原因是:数据库安装时默认创建OEM,是和主机名严格绑定的,而使用HA之后侦听启动在fip上,而OEM是找主机名db1上的1521,没有,所以OEM提示数据库没有启动。解决还是简单的:首先在listener.ora中再添加一行IP信息(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))即可,这样侦听启动后,在fip和lo上都有1521打开。之所以使用不使用本机IP,是因为这个HA使用镜像版本,镜像的是/opt目录,所以两台机器的listener.ora文件一模一样,如果改成db1的本地IP之后,当切换到db2上,会因为此IP不存在而无法启动侦听,所以使用127.0.0.1,HA切换到任何一台,都可以正常启动侦听。
    这是第一步,还有一个第二步也非常重要,刚才说了,OEM是和主机名绑死的,所以127.0.0.1要和主机名对应起来,这需要修改/etc/hosts文件,在第一行127.0.0.1对应localhost前面加上db1即可(如127.0.0.1   db1 localhost localhost.localdomain localhost4 localhost4.localdomain4)。
通过这两步之后,OEM即可正常。

   
    问题3:HA切换过程中发现,切换一次之后oracle无法启动。
    奇怪的现象,当HA无法启动数据库的时候,手工启动数据库提示:ORA-01012: not logged on。
    因为以前配置HA从来没有遇到过,所以网上搜索了一下,基本确定是oracle没有停止干净导致的。后来发现此HA配置时用的不是agent脚本,而是自己写的脚本。
    HA自带的oracle的agent停止数据库有很多步骤,不单单是shutdown immediate,还有很多ipcs的清理。而自己写的脚本中只调用shutdown immediate,很多ipcs信息没有清除。
    解决也很简单,不修改HA配置(当时时间太紧)的情况下,在停止脚本最后和启动脚本之前都添加ipcrm清除消息量的命令:

点击(此处)折叠或打开

  1. for i in `ipcs -m |grep oracle|awk '{print $2}'`
  2. do
  3.  ipcrm -m $i
  4. done
  5. for j in `ipcs -s |grep oracle|awk '{print $2}'`
  6. do
  7.  ipcrm -s $j
  8. done
    建议以后用HA自带的oracle的agent来监控。

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