一次多个数据库tnsping及登录单点登录需求
【环境介绍】
系统环境:Linux + Oracle 11.2.0.4.0 + python 2.7.10
【背景描述】
需求:因为涉及生产数据库较多,业务夸多个数据库使用。当收到业务有些影响时,数据库侧期间如果BOMC并没有马上收到相关的告警,那么如果要判断哪个数据库有问题时就只能很多数据库都查一遍。显然这样的命中率会很低同时时间也是比较长。对于这个问题有可能是网络问题太慢反映,同时要测试数据库连接是否正常。
【监控优化过程及思路】
对于上面描述的问题,还是比较清晰:
1, 数据库当前是否能连接。 ----连接多个数据库查询数据库状态
2, 数据库连接没有问题,可能是网络问题。 ----使用tnsping进行判断网络
基于这两种方法,运用命令实现:
1, 多个数据库连接数据库运行SQL语句。 -----使用Python实现
2, Tnsping监听判断网络。 -----使用Oracle自带Tnsping
【测试结果及脚本】
通过测试库测试脚本。然后在监控服务器进程测试,结果如下:
1,Python实现连接多个数据库查询数据库状态信息,最终结果截图如下:
2,Tnsping监听判断网络,最终结果截图如下:
【通用日志处理】
主要实现功能的脚本如下:
1,Python实现连接多个数据库查询数据库状态信息:
cat > select.py
# -*- coding:UTF-8 -*-
import xlsxwriter, cx_Oracle, sys
print('*' * 50)
print('NOTE: when you add sql_text,the ; sign is after the sql_text')
print('*' * 50)
reload(sys)
sys.setdefaultencoding('utf-8')
database_list = {
'xxxdb': 'xj_exp_data/xxxxxx@172.xx.xx.xx/xxdb',
……》》》省略部分IP内容
'xxxdb': 'xj_exp_data/xxxxx@172.xx.xx.xx/xxxdb
}
》》》》连接数据库列表
sql=raw_input("Enter your sql_text: ");》》》提示输入SQL语句
while True:
line=raw_input()
if line==';':
break
sql = sql + ' ' +line
for d in database_list:
print('*' * 50)
print(d)
conn = cx_Oracle.connect(database_list[d]) #connect database
c = conn.cursor() # get cursor
x = c.execute(sql) #sql_text 》》》》执行SQL语句
row = x.fetchall()
for r in row:
print r》》》》进行循环输出结果
c.close()
conn.close()
Tnsping监听判断网络:
cat >tnsping_check.sh
######################################################################
# tnsping_check.sh
# This script is tnsping check
# Author CZT
######################################################################
#!/bin/sh
. ~/.bash_profile
####################tnsping function######################################
TNS_ECHO()
{
if [ `tnsping $1 | sed -n '$p' | awk '{print $1}'` = OK ];then
NowTime=`date +%T`
avg_time=`tnsping $i $2 | grep OK | awk '{print $2}' | awk -F'(' '{print $2}' | awk '{sum += $1};END{print sum/NR}'`
echo "$NowTime: tnsping against $name $i check OK $avg_time seconds"
else
echo "$NowTime: tnsping against $name $i check ERROR"
fi
}
####################database ip list######################################
##crm_xxqd
arr_lis_xxqd=("172.xx.xx.xxx:1521" "172.16.xx.xx:1521" "172.16.xx.xxx:1521" "172.16.xx.xx:1521" "172.16.xx.xx:1521")
.........》》》省略IP列表信息内容
##other_xxxdb
arr_lis_xxxdb=("172.xx.xx.xx:1521" "172.xx.xx.xx:1521")
########################select database list########################
name=$1
#if [ !-n $1 ]
#then
#fi
case $name in
'')
name=$(uname -n)
;;
esac
case $name in
CRMDB-xxxDB|dzqd)
for i in ${arr_lis_dzqd[*]}
do
TNS_ECHO $i $2
done
;;
……》》》》省略同样的部分内容
help)
echo '[usage:] sh tnsping_check.sh yydb 100 '
echo '[instance name] [type name] '
echo 'xxxd -- CRMDB-xxxD
……》》》省略部分重复内容'
echo 'xxxdb -- OTHER-xxx3DB '
;;
esac
【问题思考】
1, 对于脚本的选择和方式要根据方便的需求和对目标的本身进行结合,比如tnsping是数据库自带的功能,从而更好的实现各种需求功能。
2, 对于tnsping的脚本中的一个延迟标准制定,需要结合业务和实际的网络情况来制定阈值对业务的影响;
3, 对于数据库登录查询状态中,也可以用其他查询语句,有时需要查询多个数据库的信息,可以更好的实现批量查询信息的需求。
【总结】:
1, 对数据库自带功能要有很好的了解,必能事半功倍;
2, 对于网络延迟问题,制定阈值是对功能效果的体现,不然只是数据查询而已;
3, 对于实现功能的语言有很多总,选择正确的语言实现,对跨平台部署有很多的帮助。
一次多个数据库tnsping及登录单点登录需求的更多相关文章
- Asp.net中实现同一用户名不能同时登录(单点登录)
Web 项目中经常遇到的问题就是同一用户名多次登录的问题,相应的解决办法也很多,总结起来不外乎这几种解决办法: 将登录后的用户名放到数据库表中: 登录后的用户名放到Session中: 登录后的用户名放 ...
- 登录&单点登录介绍
COOKIE & SESSION & TOKEN 主要用来跟踪会话,识别用户所用.cookie 是客户端,session 是服务端的. 因为 http 是无状态协议,每一次的访问都不知 ...
- 轻型目录访问协议 ldap 公司内部网站的登录 单点登录
https://zh.wikipedia.org/wiki/轻型目录访问协议 轻型目录访问协议(英文:Lightweight Directory Access Protocol,缩写:LDAP,/ˈɛ ...
- 通过SessionID和用户名来保证同一个用户不能同时登录(单点登录)
可以通过SessionID和用户名来保证同一个用户不能同时登录的问题,下面程序模仿了QQ的登录,当登录后判断当前帐号是否已经登录,如果登录.则踢掉以前登录的用户. 1.通过Application全局变 ...
- 点单登录原理和java实现简单的单点登录
引用自:http://blog.csdn.net/zuoluoboy/article/details/12851725 摘要: 单点登录(SSO)的技术被越来越广泛地应用到各个领域的软件系统当中.本文 ...
- cas sso单点登录系列7_ 单点登录cas常见问题系列汇总
转:http://blog.csdn.net/matthewei6/article/details/50709252 单点登录cas常见问题(一) - 子系统是否还要做session处理?单点登录ca ...
- 单点登录CAS使用记(三):实现自定义验证用户登录
问题: CAS自带的用户验证逻辑太过简单,如何像正常网站一样,通过验证DB中的用户数据,来验证用户以及密码的合法性呢? 方案1:CAS默认的JDBC扩展方案: CAS自带了两种简单的通过JDBC方式验 ...
- 不需要客户端插件PHP也能实现单点登录
分析CAS原理,构建PHP单点登录 单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户 只需要登录一次就 ...
- OAuth2.0 原理流程及其单点登录和权限控制
2018年07月26日 07:21:58 kefeng-wang 阅读数:5468更多 所属专栏: Java微服务构架 版权声明:[自由转载-非商用-非衍生-保持署名]-转载请标明作者和出处. h ...
随机推荐
- [SQL Server] 时间处理:获取今天的00:00:00/获取今天的23:59:59
获取今天的00:00:00 SELECT CONVERT(DATETIME,CONVERT(VARCHAR(10),GETDATE(),120)) 获取今天的23:59:59 1.SELECT DAT ...
- SQL Server数据库————增删改查
--增删改查--增 insert into 表名(列名) value(值列表) --删 delect from 表名 where 条件 --改 update 表名 set 列名=值1,列名2=值2 w ...
- mysql 基础sql语句
1.mysqladmin语句: # 查看mysql版本 mysqladmin version # 更改root用户密码 mysqladmin -u root -p原密码 password '新密码 ...
- Python Learning: 03
An inch is worth a pound of gold, an inch of gold is hard to buy an inch of time. Slice When the sca ...
- 「Python」为什么Python里面,整除的结果会是小数?
2018-06-08 参考资料:Python学习笔记(4)负数除法和取模运算 先来看三个式子(!这是在Python3.0下的运算结果): 输出结果: ‘//’明明是整除,为什么结果不是整数,而会出现小 ...
- Rabbitmq集群高可用
转载:https://www.cnblogs.com/flat_peach/archive/2013/04/07/3004008.html RabbitMQ是用erlang开发的,集群非常方便,因为e ...
- 一。Hibernate 开发流程
一.hibernate和mybatis都是orm产品1.orm:object-realation-mapping对象关系映射 二.开发步骤1.导入相关jar 包括hibernate和oracle的驱动 ...
- codeforces#1139D. Steps to One (概率dp+莫比乌斯反演)
题目链接: http://codeforces.com/contest/1139/problem/D 题意: 在$1$到$m$中选择一个数,加入到一个初始为空的序列中,当序列的$gcd$和为$1$时, ...
- Windows服务器上使用phpstudy部署PHP程序
一.下载并安装PHPStudy 官网地址:http://phpstudy.php.cn/(安装包下载地址:链接:https://pan.baidu.com/s/1WOmbOwmLuUPt3_nmY6- ...
- jmeter 安装
3.1 windows10环境下测试工具jmeter安装与配置 3.1.1下载安装java 浏览器中打开链接:http://down-www.7down.net/pcdown/soft/xiazai/ ...