Oracle 自動化運維-Python表空間郵件預警
Oracle 自動化運維-Python表空間郵件預警
一:建立查詢表空間SQL
二:Python呼叫表空間SQL
三:Python設定發郵件指令碼
四:Python表空間郵件預警
參考:
一:建立查詢表空間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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 表空間郵件預警(luckyfriends)
- 使用oracle procedure儲存過程自動擴充套件表空間空間tablespace_自動化運維Oracle儲存過程套件運維
- 自動監控Oracle 表空間資訊併傳送郵件指令碼Oracle指令碼
- SQLServer郵件預警SQLServer
- Oracle 自動化運維-Python連線OracleOracle運維Python
- oracle資料庫自動發郵件實現報警功能Oracle資料庫
- Oracle 自動化運維-Python監控Oracle告警日誌Oracle運維Python
- Linux 自動增加oracle 表空間LinuxOracle
- python自動發郵件Python
- IT運維之自動化運維運維
- Oracle修改預設表空間和預設臨時表空間Oracle
- oracle表空間管理維護Oracle
- 2 Day DBA-管理Oracle例項-練習:修改表空間空間使用預警闕值Oracle
- 什麼是自動化運維?為什麼選擇Python做自動化運維?運維Python
- 增加自動擴充套件臨時表空間及改變預設表空間套件
- Python自動化運維之IPy模組Python運維
- EM配置Oracle郵件自動告警Oracle
- Oracle表移動表空間Oracle
- oracle 表移動表空間Oracle
- Oracle表空間維護總結Oracle
- oracle之 SYSAUX表空間維護OracleUX
- 自動化運維 Expect運維
- 用自動化運維工具解放IT運維運維
- python自動化運維之多執行緒Python運維執行緒
- ORACLE_自動發郵件程式碼Oracle
- 華納雲:如何配置oracle表空間自動擴容?Oracle
- 自動化運維 Ansible運維
- oracle表空間傳輸的限制條件Oracle
- linux自動增加表空間Linux
- ORACLE預設的臨時表空間Oracle
- Python+Django+Ansible Playbook自動化運維PythonDjango運維
- Python自動化運維之高階函式薦Python運維函式
- 自動undo表空間模式下切換新的undo表空間模式
- Oracle 自動段空間管理(ASSM)OracleSSM
- Oracle查詢表佔磁碟空間大小及移動表空間Oracle
- mysql-inception自動化運維MySql運維
- Ansible自動化運維工具運維
- 簡化IT運維工作,就要學會使用自動化運維工具!運維