获取Oracle数据文件创建的时间

上节讲到如何建立一个Oracle命令的界面

这节讲述如何利用Django获取Oracle数据文件的建立时间并显示出来

开发环境

操作系统:CentOS 7.3

Python版本 :2.7

Django版本: 1.10.5

操作系统用户:oracle

建立页面的步骤

我们还是通过这张图的步骤来说明如何建立页面

Alt text

urls.py页面

首先编辑 monitor/urls.py

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^oracle_command/$',views.oracle_command, name='oracle_command'),
    url(r'^commandresult/$',views.commandresult, name='commandresult'),
]

oracle_command为执行Oracle命令的页面

commandresult为执行完Oracle命令显示结果的页面

views.py

首先import后面用到的函数

from monitor.command.getoraclecommandresult import *

下面为commandresult对应的函数在views.py里面的写法

def commandresult(request):
    ipaddress  = str(request.GET['ipaddress']).split('-')[0]
    tnsname=str(request.GET['ipaddress']).split('-')[1]
    command_content  = str(request.GET['operate'])
    result=oraclelist.objects.all().order_by('tnsname')
    for i in result:
        if i.ipaddress==ipaddress:
            username =i.username
            password=i.password
            port=i.port
            break
    if command_content=='check_datafile_time':
        try:
            db = cx_Oracle.connect(username+'/'+password+'@'+ipaddress+':'+port+'/'+tnsname ,mode=cx_Oracle.SYSDBA)
        except Exception , e:
            content= (ipaddress+' is Unreachable,The reason is '+ str(e)).strip()
            return HttpResponse(content)
        else:
            cursor = db.cursor()
            row=getdatafilecreationtime(cursor)
            cursor.close()
            db.close()
            title='数据文件创建时间-'+ipaddress+'-'+tnsname
            tr=['数据文件名称','文件大小','表空间','自动扩展','创建时间']
            dic ={'title':title,'tr':tr,'row':row}
            #return render_to_response('oracle_command_result1.html',dic)
            html= render_to_string('oracle_command_result_5.html',dic)
            return HttpResponse(html)
  1. 首先获取到表单中的数据,如 ipaddress,tnsname以及执行的命令

  2. 然后通过ipaddress,tnsname从数据库中查找获得用户密码用于连接

  3. 再判断命令内容,如果是check_datafile_time则执行下面语句

这里的getdatafilecreationtime函数获取Oracle文件的建立时间,详情看具体代码

  1. 最后把页面的标题以及表格的数据放到dic变量中传到oracle_command_result_5.html模板文件中

getdatafilecreationtime函数

这里我们引用getdatafilecreationtime函数来获取Oracle数据文件的建立时间

导入方法见上面views.py文件的讲解

在monitor目录下建立 command目录用于存放相关程序

注意:这里需要建立一个名为init.py的空文件,否则会提示无法找到函数

def getdatafilecreationtime(cursor):
    fp=open('/home/oracle/mysite/oracle/command/oracle_command/getdatafilecreationtime.sql','r')
    fp1=fp.read()
    s=cursor.execute(fp1)
    fp.close()
    row=s.fetchall()
    return row

getdatafilecreationtime.sql

这个SQL是查询所有数据文件的相关信息并按照时间倒序排序

select a.file_name,
       a.bytes / 1024 / 1024 Bytes,
       a.tablespace_name,
       a.autoextensible,
       to_char(b.creation_time, 'yyyy-mm-dd') creation_time
  from dba_data_files a, v$datafile b
 where a.file_id = b.file#
 order by creation_time desc

template文件

这里我们用到ajax的功能,其实页面还是oracle_command.html页面,只是将oracle_command_result_5.html页面嵌入了oracle_command.html页面中,全程无页面跳转。

oracle_command_result_5.html

<div id='newadd'>
<h3>{{title}}</h3>
<table class="table">
  <thead>
    <tr>
{% for i in tr %}
        <th>{{i}}</th>
{%endfor%}
    </tr>
  </thead>
{% for a,b,c,d,e in row %}
<tbody>
            <tr>
                <td>{{a}}</td>
                <td>{{b}}</td>
                <td>{{c}}</td>
                <td>{{d}}</td>
                <td>{{e}}</td>
            </tr>
</tbody>
{% endfor %}
</table>
</div>

该模板是一个table ,通过将传过来的变量显示在前端页面

实际效果

http://10.65.202.218:8081/monitor/oracle_command/

Alt text

源码地址

源码请查看我的GitHub主页

https://github.com/bsbforever/wechat_monitor

下期将介绍如何如何通过Django获取表的分析时间然后显示出来