Oracle 自動化運維-Python表空間郵件預警
Oracle 自動化運維-Python表空間郵件預警
一:建立查詢表空間SQL
二:Python呼叫表空間SQL
三:Python設定發郵件指令碼
四:Python表空間郵件預警
參考:http://www.zhaibibei.cn/python1/1.1/
一:建立查詢表空間SQL
[oracle@jumplinux01 ~]$ mkdir script
[oracle@jumplinux01 ~]$ cd /home/oracle/script/
[oracle@jumplinux01 script]$ vim tablespace.sql
select a.tablespace_name,
a.bytes / 1024 / 1024 "Sum MB",
(a.bytes - b.bytes) / 1024 / 1024 "used MB",
b.bytes / 1024 / 1024 "free MB",
round(((a.bytes - b.bytes) / a.bytes) * 100, 2) "percent_used%"
from (select tablespace_name, sum(bytes) bytes
from dba_data_files
group by tablespace_name) a,
(select tablespace_name, sum(bytes) bytes, max(bytes) largest
from dba_free_space
group by tablespace_name) b
where a.tablespace_name = b.tablespace_name
#結尾不能有分號
#否則Python呼叫時會有錯誤:
#cx_Oracle.DatabaseError: ORA-00933: SQL command not properly ended
二:Python呼叫表空間SQL
[oracle@jumplinux01 script]$ vim tablespace.py
#!/usr/bin/python
#coding=utf8
import cx_Oracle
def oraclesql(cursor):
#這裡我們使用python的open方法開啟檔案並讀取檔案內容作為SQL語句執行
#可使用絕對路徑或相對路徑
fp=open('/home/oracle/script/tablespace.sql','r')
#fp=open('./tablespace.sql','r')
fp1=fp.read()
cursor.execute(fp1)
data=cursor.fetchall()
return data
if __name__=="__main__":
ipaddress='192.168.2.222'
username='sys'
password='oracle'
port='1521'
tnsname='cjcpdb01'
#這裡我們利用Python的異常處理來捕獲異常,具體用法請參考文章開始提到的教程
try:
#這裡我們使用sysdba許可權連線oracle資料庫(和上期連線普通使用者的不同)
db = cx_Oracle.connect(username+'/'+password+'@'+ipaddress+':'+port+'/'+tnsname ,mode=cx_Oracle.SYSDBA)
except Exception as e:
content= (tnsname+' is Unreachable,The reason is '+ str(e)).strip()
print (content)
else:
cursor = db.cursor()
data=oraclesql(cursor)
cursor.close()
db.close()
#由於上面獲取的是一個列表(多行),這裡使用for迴圈來遍歷
#注意i也是一個列表
print ('表空間名稱 總大小(M) 已使用(M) 剩餘空間(M) 使用率')
for i in data:
print (i)
執行結果:
[oracle@jumplinux01 script]$ python tablespace.py
表空間名稱 總大小(M) 已使用(M) 剩餘空間(M) 使用率
('SYSTEM', 320, 314.625, 5.375, 98.32000000000001)
('CJCTBS', 10, 1, 9, 10)
('SYSAUX', 480, 452.0625, 27.9375, 94.18)
('UNDOTBS1', 230, 211.125, 18.875, 91.79)
('USERS', 5, 1.0625, 3.9375, 21.25)
獲取感興趣的列
我們是利用fetchall方法來獲取資料的,返回的是一個列表(list),我們可以使用i[0]的方式只取感興趣的列,如下圖我們只獲取表空間的名稱
只需將程式碼最後一行改成:print (i[0])
[oracle@jumplinux01 script]$ python tablespace1.py
表空間名稱 總大小(M) 已使用(M) 剩餘空間(M) 使用率
SYSTEM
CJCTBS
SYSAUX
UNDOTBS1
USERS
三:Python設定發郵件指令碼
如何利用Python的email模組傳送郵件
環境設定
Linux系統為 Centos 6.7
Python環境為 Python 3.6
我們新建一個檔案
路徑為:/home/oracle/script/sendmail.py
[oracle@jumplinux01 script]$ vim sendmail.py
#!/usr/bin/python
#coding=utf-8
import smtplib
import os
import time
from email.mime.text import MIMEText
to_list=["<chenjuchao126@126.com>"]
mail_user="chenjuchao163" #使用者名稱
mail_pass="**********"
mail_postfix="163.com" #發件箱的字尾
def send_mail(to_list,sub,content): #to_list:收件人;sub:主題;content:郵件內容
me="<"+mail_user+"@"+mail_postfix+">" #這裡的hello可以任意設定,收到信後,將按照設定顯示
msg = MIMEText(content) #建立一個例項,這裡設定為html格式郵件
msg['Subject'] = sub #設定主題
msg['From'] = me
msg['To'] = ";".join(to_list)
smtp_server = 'smtp.163.com'
try:
server=smtplib.SMTP_SSL(smtp_server)
server.connect(smtp_server,465)
#s.set_debuglevel(1)
#smtp_server.helo()
#s.starttls()
server.login(mail_user,mail_pass) #登陸
server.sendmail(me, to_list, msg.as_string()) #傳送郵件
server.close()
return True
except Exception as e:
print (str(e))
return False
if __name__ == '__main__':
#多個收件人請用逗號隔開
content='這裡是傳送的內容'
sub='這裡是郵件的標題'
s=send_mail(to_list,sub,content)
print (s)
執行結果:
[oracle@jumplinux01 script]$ python sendmail.py
四:Python表空間郵件預警
Python監控表空間使用率,等超過閾值(大於90%)後傳送郵件通知
環境設定
Linux系統為 Centos 6.7
Python環境為 Python 3.6
監控Oracle表空間併傳送報警資訊
檔名稱:checktablespace.py
[oracle@jumplinux01 script]$ vim checktablespace.py
#!/usr/bin/python
#coding=utf8
import cx_Oracle
from sendmail import *
def oraclesql(cursor):
#這裡我們使用python的open方法開啟檔案並讀取檔案內容作為SQL語句執行
#可使用絕對路徑或相對路徑
fp=open('/home/oracle/script/tablespace.sql','r')
#fp=open('./tablespace.sql','r')
fp1=fp.read()
cursor.execute(fp1)
data=cursor.fetchall()
return data
if __name__=="__main__":
mailcontent=[]
ipaddress='192.168.2.222'
username='sys'
password='oracle'
port='1521'
tnsname='cjcpdb01'
#這裡我們利用Python的異常處理來捕獲異常,具體用法請參考文章開始提到的教程
try:
#這裡我們使用sysdba許可權連線oracle資料庫(和上期連線普通使用者的不同)
db = cx_Oracle.connect(username+'/'+password+'@'+ipaddress+':'+port+'/'+tnsname ,mode=cx_Oracle.SYSDBA)
except Exception as e:
content= (tnsname+' is Unreachable,The reason is '+ str(e)).strip()
print (content)
else:
cursor = db.cursor()
data=oraclesql(cursor)
cursor.close()
db.close()
#這裡我們檢查每個表空間使用率是否大於90%,如果是則將一條報警資訊加入到mailcontent列表
for i in data:
usage=int(i[4])
if usage>=90:
tablespace=i[0]
mailcontent.append('Be Careful tablespace '+tablespace+' is '+str(usage)+'% Used!')
#這裡我們判斷mailcontent長度是否為0,不為0說明有超過90%的表空間,然後我們傳送郵件
if len(mailcontent) != 0:
content='\n'.join(mailcontent)
send_mail(to_list,' Tablespace usage warnning',content)
執行結果:
[oracle@jumplinux01 script]$ python checktablespace.py
設定定時任務
接下來我們要做的就是把他設成自動任務定期執行
如下就是設定每天12點檢查一次
[oracle@jumplinux01 script]$ crontabl -e
00 12 * * * /usr/bin/python /home/oracle/script/checktablespace.py
歡迎關注我的微信公眾號"IT小Chen",共同學習,共同成長!!!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29785807/viewspace-2680841/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 自動化運維-Python連線OracleOracle運維Python
- SQLServer郵件預警SQLServer
- Oracle 自動化運維-Python監控Oracle告警日誌Oracle運維Python
- oracle資料庫自動發郵件實現報警功能Oracle資料庫
- python自動發郵件Python
- oracle 表移動表空間Oracle
- Oracle表移動表空間Oracle
- IT運維之自動化運維運維
- 什麼是自動化運維?為什麼選擇Python做自動化運維?運維Python
- Oracle表空間Oracle
- oracle 表空間Oracle
- 華納雲:如何配置oracle表空間自動擴容?Oracle
- Python自動化運維之IPy模組Python運維
- Python+Django+Ansible Playbook自動化運維PythonDjango運維
- 增加oracle表空間Oracle
- oracle temp 表空間Oracle
- [20210528]oracle大表空間預分配問題.txtOracle
- CrazyWing:Python自動化運維開發實戰 十七、PythonPython運維
- Oracle臨時表空間檢視、新增臨時表空間資料檔案、修改預設臨時表空間 方法!Oracle
- 乾貨丨RPA郵件自動化技巧
- 【python3.x】傳送自動化測試報告郵件Python測試報告
- oracle表空間的整理Oracle
- Oracle 批量建表空間Oracle
- Oracle清理SYSAUX表空間OracleUX
- Ansible自動化運維工具運維
- 簡單介紹python自動化運維常用庫Python運維
- zabbix郵件報警通知
- ansible自動化運維入門運維
- Oracle Temp 表空間切換Oracle
- Oracle 表空間增加檔案Oracle
- Oracle OCP(49):表空間管理Oracle
- Oracle表空間收縮方案Oracle
- Oracle RMAN 表空間恢復Oracle
- 簡化IT運維工作,就要學會使用自動化運維工具!運維
- Oracle新建使用者、表空間、表Oracle
- Springboot 自動傳送郵件Spring Boot
- prometheus配置MySQL郵件報警PrometheusMySql
- 《奇巧淫技》系列-python!!每天早上八點自動傳送天氣預報郵件到QQ郵箱Python