【达梦数据库】shell脚本获取集群内确认监视器地址

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、数据库主备节点执行

[dmdba@localhost0 opt]# sh MonitorSearch5.sh

在这里插入图片描述

4.2.2、数据库确认监视器节点执行

[dmdba@localhost0 opt]# sh MonitorSearch5.sh

在这里插入图片描述

4.3、非集群内节点执行

[dmdba@localhost0 opt]# sh MonitorSearch5.sh

在这里插入图片描述

5、参考链接

链接: 深度学习开发必读:Shell速成[万字详解,附源码]
链接: Linux ps命令详解
链接: Linux 系统 grep 命令超详细讲解
链接: inux awk命令 | 参数说明 | 超详细

6、补充

--显示数据库信息。
select * from V$database;

--显示实例信息。
select * from V$INSTANCE;

--显示全局实例信息。
select * from GV$INSTANCE;

--显示守护进程实例
SELECT * FROM V$DMWATCHER;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值