【环境介绍】

系统环境: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及登录单点登录需求的更多相关文章

  1. Asp.net中实现同一用户名不能同时登录(单点登录)

    Web 项目中经常遇到的问题就是同一用户名多次登录的问题,相应的解决办法也很多,总结起来不外乎这几种解决办法: 将登录后的用户名放到数据库表中: 登录后的用户名放到Session中: 登录后的用户名放 ...

  2. 登录&单点登录介绍

    COOKIE & SESSION & TOKEN 主要用来跟踪会话,识别用户所用.cookie 是客户端,session 是服务端的. 因为 http 是无状态协议,每一次的访问都不知 ...

  3. 轻型目录访问协议 ldap 公司内部网站的登录 单点登录

    https://zh.wikipedia.org/wiki/轻型目录访问协议 轻型目录访问协议(英文:Lightweight Directory Access Protocol,缩写:LDAP,/ˈɛ ...

  4. 通过SessionID和用户名来保证同一个用户不能同时登录(单点登录)

    可以通过SessionID和用户名来保证同一个用户不能同时登录的问题,下面程序模仿了QQ的登录,当登录后判断当前帐号是否已经登录,如果登录.则踢掉以前登录的用户. 1.通过Application全局变 ...

  5. 点单登录原理和java实现简单的单点登录

    引用自:http://blog.csdn.net/zuoluoboy/article/details/12851725 摘要: 单点登录(SSO)的技术被越来越广泛地应用到各个领域的软件系统当中.本文 ...

  6. cas sso单点登录系列7_ 单点登录cas常见问题系列汇总

    转:http://blog.csdn.net/matthewei6/article/details/50709252 单点登录cas常见问题(一) - 子系统是否还要做session处理?单点登录ca ...

  7. 单点登录CAS使用记(三):实现自定义验证用户登录

    问题: CAS自带的用户验证逻辑太过简单,如何像正常网站一样,通过验证DB中的用户数据,来验证用户以及密码的合法性呢? 方案1:CAS默认的JDBC扩展方案: CAS自带了两种简单的通过JDBC方式验 ...

  8. 不需要客户端插件PHP也能实现单点登录

    分析CAS原理,构建PHP单点登录 单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户 只需要登录一次就 ...

  9. OAuth2.0 原理流程及其单点登录和权限控制

    2018年07月26日 07:21:58 kefeng-wang 阅读数:5468更多 所属专栏: Java微服务构架   版权声明:[自由转载-非商用-非衍生-保持署名]-转载请标明作者和出处. h ...

随机推荐

  1. 移动端click延迟和tap事件

    一.click等事件在移动端的延迟 click事件在移动端和pc端均可以触发,但是在移动端有延迟现象. 1.背景 由于早期移动设备浏览网页时内容较小,为了增强用户体验,苹果公司专门为移动设备设计了双击 ...

  2. 如莲开发平台(MIS基础框架、Java技术、B/S结构)

    关于     「如莲」是一套MIS类系统基础框架,主要用于各类“管理信息系统”的开发,也适合做网站后台开发.可省去开发时的框架搭建.规范约定.权限管理等基础工作,直接专注于业务功能实现.     「如 ...

  3. 第一次java作业

    学习了c语言半个学期,好像刚开始并不担心Java,因为Java也是类同于C语言的一种语言,可是Java学到现在也将近一个月,在我脑子里现在却还没有一个框架,有点着急了.

  4. marathon传参一

    今天试了下marathon传参,新建一个job,增加一个参数,然后用cmd方式,echo出来 定义的json: { "id": "test1", "l ...

  5. ABP之Caching

    简介 ABP提供缓存抽象,默认使用MemoryCache.但是可以替换成其他缓存程序,比如 Abp.RedisCache 是使用Redis实现缓存. ICacheManager 缓存的主要接口是ICa ...

  6. Python链表的实现与使用(单向链表与双向链表)

    参考[易百教程]用Python实现链表及其功能 """ python链表的基本操作:节点.链表.增删改查 """ import sys cl ...

  7. C#技巧记录——持续更新

    作为一名非主修C#的程序员,在此记录下学习与工作中C#的有用内容,持续更新 对类型进行约束,class指定了类型必须是引用类型,new()指定了类型必须具有一个无参的构造函数 where T : cl ...

  8. Centos6.5 pppoe-server

    [root@localhost network-scripts]# rpm -q rp-pppoepackage rp-pppoe is not installed ----------------- ...

  9. 深度解读Tomcat中的NIO模型(转载)

    转自https://www.jianshu.com/p/76ff17bc6dea 一.I/O复用模型解读 Tomcat的NIO是基于I/O复用来实现的.对这点一定要清楚,不然我们的讨论就不在一个逻辑线 ...

  10. 为什么qt成为c++界面编程的第一选择

    为什么qt成为c++界面编程的第一选择 一.前言 为什么现在QT越来越成为界面编程的第一选择,笔者从事qt界面编程已经有接近8年,在这之前我做C++界面都是基于MFC,也做过5年左右.当时为什么会从M ...