作者:宣泽春,新炬网络高级技术专家。
做oracle数据库运维,有时会经常要看一周内数据库运行的情况,而通过性能曲线图最能展现数据库系统的性能变化情况了。如果有安装oracle的EM,看这个也不是问题。但有些数据库是没安装的,而且EM的是较难以实现定制化的报表需求的,难以把图表发给用户。
先来看一下要生成的数据效果图:
还有些附加的要求,如生成报表的工具需要在UNIX/LINUX下执行,能一键直接生成exel报表,可以方便地插入到word中。
本文正是如何使用python实现这一过程的,主要面向oracle dba且对编程语言有一定了解的读者。
如果说到为什么要使用python,只要稍微了解一下自动化运维,就会明白python是这一领域编程的王者。业界最有名的自动化运维工具SaltStack及ansible都是基于python实现的。
接下讲在已经安装好oracle数据库11g DB的Linux环境下,如何一步一步实现最终目标。
在大部份linux及unix下本身会自带python环境,但版本可能过旧,可能会导致后面使用到的一些包不兼容,因此建议进行新安装。安装时可以考虑使用root账号进行安装,如果没有root权限,使用主机账号oracle也可以进行安装。
Python的版本选择了最新的2.7.10版本,未选3.5主要原因是考虑到3.x下的软件包还不如2.x下丰富。
以oracle账号安装python示例:
推荐使用源代码方式进行安装,主要的是从 http://www.python.org/ftp/python/下载 Python 的源代码。选择最新的版本,下载.tgz 文件,执行通常的 configure, make, make install 步骤。
参考如下:
本文设定的python主安装目录为/home/oracle/opt/python2.7.10/
切换至oracle用户并创建安装目录
设置python环境变量
下载安装包
解压安装包并进入目录
执行configure命令
执行make命令
执行make install命令
验证python
到此python的2.7.10 for linux已安装完成
安装cx_Oracle的主要目的是使python能连接oracle数据库,用于获取数据库中的会话记录
前提条件为
oracle数据库软件或客户端已经安装好,版本10g以上,关键环境变量ORACLE_HOME, LD_LIBRARY_PATH已正确配置
本文的关键设置如下:
刷新环境变量
python 版本建议是2.6以上
cx_Oracle的下载地址为https://pypi.python.org/pypi/cx_Oracle/#downloads,到本文截止时最的安装包为cx_Oracle-5.2.tar.gz
安装及测试过程如下:
下载
解压
执行安装
测试cx_Oracle模块是否正常
如出现以下ImportError提示,表示数据库软件未正常安装或关键环境变更设置不正确
测试使用python连接oracle数据库
vi test_cx_oracle.py
执行测试脚本
出现类似如下结果,表明python已正常连接数据库,并成功获取数据,打印出来
到此,连接oracle的cx_Oracle模块安装测试完成
为什么要安装xlsxwirter模块呢,主要是用来以python方式读写xlsx文件,也就是excel文件,并操作excel生成图表
以下为安装及测试过程
下载地址:https://pypi.python.org/pypi/XlsxWriter#downloads
测试xlsxwriter模块是否正常
测试写xlsx文件
vi test_xlsx.py
下载生成的文件hello.xlsx,用excel打开可以看到,生成结果如下:
从上图可以看到,已在A1单元格正确写入Hello world。
到此,xlsxwriter模块安装完成。
数据从何而来?
要生成曲线图,总有得有数据。
通过以下语句便可以查询oracle数据库AWR报告中会话变化情况数据(事先给相应账号授权,如:grant select any dictionary to scott):
上图中的INST_2没有数据,是因为本次连接的数据库为单实例数据库,所以数据为空。
打开xlsxwriter官方网站,http://xlsxwriter.readthedocs.org/,看看是如何生成excel曲线图的。
在首页找到Chart Examples,再进入Example: Line Chart页面。
http://xlsxwriter.readthedocs.org/example_chart_line.html
以下的官方给出的例子:
结合cx_Oracle的模块部分代码,再稍作修改,便可得出以下代码:
保存为chart_line.py
执行python chart_line.py
打开生成的excel文件chart_line.xlsx,便可看到生成的如下图表
以上图只有一条线,是因为连接的单实例数据库,如果连接到rac数据库,便可生成两个节点的图表。
本文以python的方式从无到有实现的python连接oracle数据库,一键式生成excel图表,仅供各位运维的同学参考,有很多不完善的地方,还请多多包涵,如有需要可自行扩充。
当然,以java或其他方式也可以实现,但Python的简单易用,以很少的代码量,让我们很容易就实现了自己想要的功能。毕竟,人生有很多选择,选择一种自己喜欢的过吧。
至于个人是如何想这样做的呢,主要是参考了刘天斯的《Python自动化运维:技术与最佳实践》,一步步百度、GOOGLE而来的。
上一篇:浅谈应用性能的剖析方法 下一篇:Solaris的DISM——被忽略的重要特性