本文主要是介绍【达梦数据库】shell脚本获取集群内确认监视器地址,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
- 1、需求
- 2、想法
- 3、实现代码
- 4、检验效果
- 4.1、集群内任意节点使用`非dmdba用户`执行
- 4.2、集群内任意节点使用`dmdba用户`执行
- 4.2.1、数据库主备节点执行
- 4.2.1、数据库确认监视器节点执行
- 4.3、非集群内节点执行
1、需求
有确认监视器的集群,在集群的任何一个集群上执行脚本都能知道确认监视器的地址是哪台,达到效果就行。
2、想法
- 找到dmserver然后去库里面去查确认监视器节点:
SELECT MON_IP FROM "SYS"."v\$dmmonitor" WHERE MON_CONFIRM='TRUE';
- 或者直接找到dmmonitor:
ps -ef|grep '[d]mmonitor'
,然后进一步确认
3、实现代码
#!/bin/bash
#############################脚本描述,区域开始##############################
## Filename :
## Write by lpb
## Descript : 寻找集群中确认监视器所在服务器IP,本脚本必须以dmdba用户执行
#############################脚本描述,区域结束###########################################################配置数据库信息-必填##############################
USER=SYSDBA #用户名
PASSWORD=SYSDBA #密码
HOST=localhost #主机名,默认使用localhost
PORT=5236 #端口号,默认5236
#############################配置数据库信息-必填###########################################################内部逻辑处理##############################
# 检查是否为dmdba用户
if [ ! "x$(whoami)" = "xdmdba" ]; then echo "必须以dmdba用户执行此脚本!" >&2 exit 1
fi# 检查dmmonitor进程是否存在
if pgrep -x dmmonitor > /dev/null; then DMMONITOR_EXIST=true
else DMMONITOR_EXIST=false
fi # 检查dmserver进程是否存在
if pgrep -x dmserver > /dev/null; then DMSERVER_EXIST=true
else DMSERVER_EXIST=false
fi # 逻辑判断
if [ "$DMMONITOR_EXIST" = "false" ] && [ "$DMSERVER_EXIST" = "false" ]; then # 打印结果echo "此节点不存在dmmonitor和dmserver服务,或dmmonitor和dmserver服务未启动,请更换节点执行此脚本!"# 根据需要设置退出状态,0正常退出,1异常退出exit 0
fi# 逻辑判断
if [ "$DMSERVER_EXIST" == "true" ]; then# 执行 disql 命令并捕获输出result=$(disql "${USER}/${PASSWORD}@${HOST}:${PORT}" -E "SELECT MON_IP FROM "SYS"."v\$dmmonitor" WHERE MON_CONFIRM='TRUE';")# 可以使用更简单的 grep 和 sed 组合 ip_address=$(echo "${result}" | grep -oP '::ffff:([0-9.]+)' | head -n 1) # 检查ip_address变量是否为空 if [ -z "$ip_address" ]; then # 打印结果echo "集群内没有确认监视器!" else # 打印 IP 地址echo "确认监视器 IP 地址为: ${ip_address}" fi# 根据需要设置退出状态,0正常退出,1异常退出exit 0
fi
#disql命令可以直接在命令行中执行SQL查询并返回结果
#等价于: disql SYSDBA/SYSDBA@localhost:5236 -E "SELECT MON_IP FROM "SYS"."v\$dmmonitor" WHERE MON_CONFIRM='TRUE';"
#disql "${USER}/${PASSWORD}@${HOST}:${PORT}" -E "SELECT MON_IP FROM "SYS"."v\$dmmonitor" WHERE MON_CONFIRM='TRUE';"# 逻辑判断
if [ "$DMMONITOR_EXIST" == "true" ] && [ "$DMSERVER_EXIST" == "false" ]; then# 打印 IP 地址echo "本机疑似存在确认监视器,请通过 ps -ef|grep '[d]mmonitor' 进一步确认!" # 根据需要设置退出状态,0正常退出,1异常退出exit 0
fi
4、检验效果
4.1、集群内任意节点使用非dmdba用户
执行
[root@localhost0 opt]# sh MonitorSearch5.sh
4.2、集群内任意节点使用dmdba用户
执行
4.2.1、数据库主备节点执行
[root@localhost0 opt]# sh MonitorSearch5.sh
4.2.1、数据库确认监视器节点执行
[root@localhost0 opt]# sh MonitorSearch5.sh
4.3、非集群内节点执行
[root@localhost0 opt]# sh MonitorSearch5.sh
这篇关于【达梦数据库】shell脚本获取集群内确认监视器地址的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!