原同事部署的一套HA监控oracle数据库,用户一直说window客户端无法访问。
问题1:HA启动oracle之后,本地可以sqlplus登录,远程客户端无法登录。
测试发现的确如此,而且本地加@orcl之后也无法登录,说明是侦听问题。侦听文件listener.ora中内容较少,只有:
-
LISITENER =
-
(DISCRIPTION_LIST =
-
(DESCRIPTION =
-
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.31.114.210)(PORT = 1521))
-
)
-
)
-
ADR_BASE_LISTENER = /opt/app/oracle
listener.ora中只有IP和端口信息,没有sid信息,所以启动后无法被客户端远程访问,相关资料可以参考:关于红旗HA监控Oracle10g的问题
解决办法有两种,简单的通过netca删除重建一下侦听即可。但是现场没有图形,所以采用修改listener.ora文件,在此文件中添加如下部分:
-
SID_LIST_LISTENER =
-
(SID_DESC =
-
(GLOBAL_DBNAME = orcl)
-
(SID_NAME = orcl)
-
(ORACLE_HOME = /data/app/oracle/product/10.2.0/db_1)
-
)
重启侦听服务即可。其实在本地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清除消息量的命令:
-
for i in `ipcs -m |grep oracle|awk '{print $2}'`
-
do
-
ipcrm -m $i
-
done
-
for j in `ipcs -s |grep oracle|awk '{print $2}'`
-
do
-
ipcrm -s $j
-
done
建议以后用HA自带的oracle的agent来监控。
阅读(3816) | 评论(0) | 转发(0) |