最近线上有个数据表一个月竟然没有数据,都没有监控,老大让我做一个监控,让Python写脚本监控oracle数据是否正常。
【注意】要把原来的Python2.7 升级到Python3.3以上。不然会报错。
一、涉及软件包
1、cx_Oracle
我下载的是最新版的cx_Oracle-5.1.2.tar.gz
2、Oracle_client
使用cx_Oracle必须要安装Oracle_client端,或者你已经安装了Oracle数据库
oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
oracle-instantclient11.2-jdbc-11.2.0.4.0-1.x86_64.rpm
oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm
oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm
oracle-instantclient11.2-odbc-11.2.0.4.0-1.x86_64.rpm
oracle-instantclient11.2-tools-11.2.0.4.0-1.x86_64.rpm
软件包都下载完后,我们开始来安装。
二、源码安装
1、Oracle_client端安装:
#rpm -ivh oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-jdbc-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-odbc-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-tools-11.2.0.4.0-1.x86_64.rpm#echo /usr/lib/oracle/11.2/client64/lib/ >> /etc/ld.so.conf#ldconfig
如果不进行ldconfig配置,在运行cx_Oracle时会报以下错误:
libclntsh.so.11.1: cannot open shared object file: No such file or directory
2、设置相应用户的环境变量:
在这里需要说明下,你使用哪个帐户装cx_Oracle就需要配置哪个帐户的环境变量,以下已root帐户为例;
如果不配置环境变量、或环境变量配置不正确,在安装cx_Oracle时,会报各种错误,比如说:
oci.h: No such file ordirectory#vi ~/.bashrc
export TNS_ADMIN="/usr/lib/oracle"export ORACLE_HOME="/usr/lib/oracle/11.2/client64"export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${ORACLE_HOME}/lib"export PATH="${PATH}:${ORACLE_HOME}"
#source ~/.bashrc
3、源码安装
#tar -zxvf cx_Oracle-5.1.2.tar.gz#cd cx_Oracle-5.1.2#python setup.py install
4、安装成功后相应检查
[root@HAProxy01 Scripts]#python
Python 3.3.0 (default, Sep 14 2017, 14:53:20)
[GCC4.8.5 20150623 (Red Hat 4.8.5-11)] on linux
Type"help", "copyright", "credits" or "license" formore information.>>> importcx_Oracle>>>
三、脚本实例:
#!/usr/bin/python#-*- coding: UTF-8 -*-
importcx_Oracle as dbimportos
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
defqueryOracle(sql):
username= "US_ORDER" #用户名
passwd = "******" #用户密码
host = "192.168.1.203" #服务器IP
port = "1521" #oracle端口
sid = "ORCL" #oracle的
dsn =db.makedsn(host, port, sid)
con=db.connect(username, passwd, dsn)
cur=con.cursor()
cur.execute(sql)
result=cur.fetchall()
cur.close()
con.close()returnresultif __name__=="__main__":
sql= "select sysdate from dual" #需要执行的SQL
result =queryOracle(sql)print(result)
执行结果:
[root@HAProxy01 Scripts]#./check_oracle_tables.py
[(datetime.datetime(2017, 9, 15, 12, 1, 51),)]