(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>