原同事部署的一套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信息,所以启动后无法被客户端远程访问,相关资料可以参考:
解决办法有两种,简单的通过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来监控。
阅读(3619) | 评论(0) | 转发(0) |