python 生成监控oracle数据库利用率的xml格式报文

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28847617/article/details/87866401

(1)、直接上代码:

#coding=gbk

'''
        该脚本主要是完成监控(集客一体化)数据库表空间的使用情况
'''
import cx_Oracle

try:
        condb_ref=cx_Oracle.connect("数据用户名","数据库密码","tns字符串标识")

        select_cursor=condb_ref.cursor()

        sql_text=r'SELECT a.tablespace_name "tablespace_name",total / (1024 * 1024 * 1024) "tablespace_total_size(G)",free / (1024 * 1024 * 1024) "tab
lespace_free_size(G)",(total - free) / (1024 * 1024 * 1024) "tablespace_use_size(G)",round((total - free) / total, 4) * 100 "rate" FROM (SELECT tables
pace_name, SUM(bytes) free FROM dba_free_space GROUP BY tablespace_name) a,(SELECT tablespace_name,SUM(bytes) total FROM dba_data_files GROUP BY table
space_name) b WHERE a.tablespace_name = b.tablespace_name'

        select_cursor.execute(sql_text)

        data_list=select_cursor.fetchall()

        select_cursor.close()

except Exception as error:

        print("链接数据异常")

else:
        condb_ref.close()

        print("数据库返回值:",data_list)

####################################################
#                                                  #
#       ----以下是生成XML文件的方法-----           #
#                                                  #
####################################################

import time

import xml.dom.minidom as Dom

file_time=time.strftime("%Y-%m-%d-%H-%M",time.localtime())

doc=Dom.Document()

root_node=doc.createElement("monitor_info")

doc.appendChild(root_node)

'''
        执行xml文件
'''
row_number=0

for tablespace_name,tablespace_total_size,tablespace_free_size,tablespace_use_size,rate in data_list:

        node_name="node_name"+str(row_number)

        node_name=doc.createElement("tablespace")

        root_node.appendChild(node_name)

        ###########完成子标签节点下的孙元素信息############

        name="name"+str(row_number)

        name=doc.createElement("name")

        node_name.appendChild(name)

        name.setAttribute('remark','表空间名')

        name_text="name_text"+str(row_number)

        name_text=doc.createTextNode(str(tablespace_name))

        name.appendChild(name_text)

        total="total"+str(row_number)

        total=doc.createElement("total")

        node_name.appendChild(total)

        total.setAttribute('remark','分配总大小')

        total_text="total_text"+str(row_number)

        total_text=doc.createTextNode(str(tablespace_total_size))

        total.appendChild(total_text)

        free="free"+str(row_number)

        free=doc.createElement("free")

        node_name.appendChild(free)

        free.setAttribute('remark','剩余大小')

        free_text="free_text"+str(row_number)

        free_text=doc.createTextNode(str(tablespace_free_size))

        free.appendChild(free_text)

        use="use"+str(row_number)

        use=doc.createElement("use") 

        node_name.appendChild(use)

        use.setAttribute('remark','使用大小')

        use_text="use_text"+str(row_number)

        use_text=doc.createTextNode(str(tablespace_use_size))

        use.appendChild(use_text)

        rate_node="rate_node"+str(row_number)

        rate_node=doc.createElement("rate") 

        node_name.appendChild(rate_node)

        rate_node.setAttribute('remark','使用率')

        rate_text="rate_text"+str(row_number)

        rate_text=doc.createTextNode(str(rate))

        rate_node.appendChild(rate_text)

        row_number+=1

xml_file="monitor_tablespace_"+file_time+".xml"

file=open(xml_file,mode='w',encoding='gb2312')#####写入xml文件中的字符串编码格式

write_data=doc.toprettyxml(indent="\t",newl="\n",encoding="utf-8").decode()

print("转换后的数据是:",write_data)

file.write(write_data)

file.close()

(2)、执行脚本输出结果:

生成文件:monitor_tablespace_2019-02-21-18-32.xml

查看文件内容:

<?xml version="1.0" encoding="utf-8"?>
<monitor_info>
        <tablespace>
                <name remark="表空间名">DATAQUALITY_V5</name>
                <total remark="分配总大小">4.8828125</total>
                <free remark="剩余大小">4.8802490234375</free>
                <use remark="使用大小">0.0025634765625</use>
                <rate remark="使用率">0.05</rate>
        </tablespace>
        <tablespace>
                <name remark="表空间名">GLCPERF</name>
                <total remark="分配总大小">251.796875</total>
                <free remark="剩余大小">230.50152587890625</free>
                <use remark="使用大小">21.29534912109375</use>
                <rate remark="使用率">8.46</rate>
        </tablespace>
        <tablespace>
                <name remark="表空间名">GLCPERF_SPACE_PAR</name>
                <total remark="分配总大小">117.1875</total>
                <free remark="剩余大小">24.66156005859375</free>
                <use remark="使用大小">92.52593994140625</use>
                <rate remark="使用率">78.96</rate>
        </tablespace>
        <tablespace>
                <name remark="表空间名">IDATA</name>
                <total remark="分配总大小">0.125</total>
                <free remark="剩余大小">0.1240234375</free>
                <use remark="使用大小">0.0009765625</use>
                <rate remark="使用率">0.78</rate>
        </tablespace>
        <tablespace>
                <name remark="表空间名">IRMS_CQ_SCHEDULE_SPACE</name>
                <total remark="分配总大小">0.125</total>
                <free remark="剩余大小">0.09197998046875</free>
                <use remark="使用大小">0.03302001953125</use>
                <rate remark="使用率">26.42</rate>
        </tablespace>
        <tablespace>
                <name remark="表空间名">METADB_V2</name>
                <total remark="分配总大小">29.296875</total>
                <free remark="剩余大小">10.0098876953125</free>
                <use remark="使用大小">19.2869873046875</use>
                <rate remark="使用率">65.83</rate>
        </tablespace>
        <tablespace>
                <name remark="表空间名">NEWGLC_SPACE</name>
                <total remark="分配总大小">901.1406097412109</total>
                <free remark="剩余大小">572.5855712890625</free>
                <use remark="使用大小">328.55503845214844</use>
                <rate remark="使用率">36.46</rate>
        </tablespace>
        <tablespace>
                <name remark="表空间名">NEWGLC_SPACE_PAR</name>
                <total remark="分配总大小">322.265625</total>
                <free remark="剩余大小">235.24468994140625</free>
                <use remark="使用大小">87.02093505859375</use>
                <rate remark="使用率">27</rate>
        </tablespace>
        <tablespace>
                <name remark="表空间名">SYSAUX</name>
                <total remark="分配总大小">8.75</total>
                <free remark="剩余大小">6.5811767578125</free>
                <use remark="使用大小">2.1688232421875</use>
                <rate remark="使用率">24.79</rate>
        </tablespace>
        <tablespace>
                <name remark="表空间名">SYSTEM</name>
                <total remark="分配总大小">4</total>
                <free remark="剩余大小">3.0810546875</free>
                <use remark="使用大小">0.9189453125</use>
                <rate remark="使用率">22.97</rate>
        </tablespace>
        <tablespace>
                <name remark="表空间名">TEST20190111</name>
                <total remark="分配总大小">0.1953125</total>
                <free remark="剩余大小">0.1943359375</free>
                <use remark="使用大小">0.0009765625</use>
                <rate remark="使用率">0.5</rate>
        </tablespace>
        <tablespace>
                <name remark="表空间名">UNDOTBS1</name>
                <total remark="分配总大小">62.74607849121094</total>
                <free remark="剩余大小">56.39752197265625</free>
                <use remark="使用大小">6.3485565185546875</use>
                <rate remark="使用率">10.12</rate>
        </tablespace>
        <tablespace>
                <name remark="表空间名">UNDOTBS2</name>
                <total remark="分配总大小">47.99998474121094</total>
                <free remark="剩余大小">35.6944580078125</free>
                <use remark="使用大小">12.305526733398438</use>
                <rate remark="使用率">25.64</rate>
        </tablespace>
        <tablespace>
                <name remark="表空间名">USERS</name>
                <total remark="分配总大小">0.010986328125</total>
                <free remark="剩余大小">0.00335693359375</free>
                <use remark="使用大小">0.00762939453125</use>
                <rate remark="使用率">69.44</rate>
        </tablespace>
        <tablespace>
                <name remark="表空间名">YN_AUTHDB_TABLESPACE</name>
                <total remark="分配总大小">2.9296875</total>
                <free remark="剩余大小">2.86346435546875</free>
                <use remark="使用大小">0.06622314453125</use>
                <rate remark="使用率">2.26</rate>
        </tablespace>
</monitor_info>

猜你喜欢

转载自blog.csdn.net/qq_28847617/article/details/87866401