设为首页 收藏本站
查看: 815|回复: 0

[经验分享] Python 监控 Data Guard 脚本

[复制链接]

尚未签到

发表于 2017-4-27 07:48:23 | 显示全部楼层 |阅读模式
之前弄过监控Data Guard 状态的SQL脚本。 这个Python 监控也就是在Python里调用那个SQL。 并将返回结果发送到相关的邮箱。

. SQL 语句
保存为checkdgstatus.sql
conn sys/pwd@orcl_pd as sysdba
column dest_name format a30
column destination format a20
column MEMBER format a45
column destination format a20
column TABLESPACE_NAME format a10
column FREE_RATE format a10
prompt **************************** 实 例 状 态 ************************************;
select instance_name,version,status,database_status from v$instance;
prompt **************************** 数据库状态 *************************************;
select name,log_mode,open_mode from v$database;
prompt **************************** 控制文件状态 ***********************************;
column name format a50
select status,name from v$controlfile;
prompt **************************** 日志文件状态 ***********************************;
select GROUP#,status,type,member from v$logfile;
prompt***************************** 归档目的地状态 *********************************;
select dest_name ,status,database_mode,destination from v$archive_dest_status where dest_id in ('1','2');
set heading off;
prompt ************数据库已连续运行天数*******************************************
select round(a.atime-b.startup_time)||' days ' from(select sysdate atime from dual) a,v$instance b;
set heading on;
prompt***************************** 会 话 数 *************************************;
select sessions_current,sessions_highwater from v$license;
prompt********************** 表空间监控********************;
SELECT D.TABLESPACE_NAME,
SPACE "SUM_SPACE(M)",
BLOCKS "SUM_BLOCKS",
SPACE - NVL (FREE_SPACE, 0) "USED_SPACE(M)",
ROUND( (1 - NVL (FREE_SPACE, 0) / SPACE) * 100, 2) "USED_RATE(%)",
FREE_SPACE "FREE_SPACE(M)"
FROM ( SELECT TABLESPACE_NAME,
ROUND (SUM (BYTES) / (1024 * 1024), 2) SPACE,
SUM (BLOCKS) BLOCKS
FROM DBA_DATA_FILES
GROUP BY TABLESPACE_NAME) D,
( SELECT TABLESPACE_NAME,
ROUND (SUM (BYTES) / (1024 * 1024), 2) FREE_SPACE
FROM DBA_FREE_SPACE
GROUP BY TABLESPACE_NAME) F
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)
UNION ALL --如果有临时表空间
SELECT D.TABLESPACE_NAME,
SPACE "SUM_SPACE(M)",
BLOCKS SUM_BLOCKS,
USED_SPACE "USED_SPACE(M)",
ROUND (NVL (USED_SPACE, 0) / SPACE * 100, 2) "USED_RATE(%)",
NVL (FREE_SPACE, 0) "FREE_SPACE(M)"
FROM ( SELECT TABLESPACE_NAME,
ROUND (SUM (BYTES) / (1024 * 1024), 2) SPACE,
SUM (BLOCKS) BLOCKS
FROM DBA_TEMP_FILES
GROUP BY TABLESPACE_NAME) D,
( SELECT TABLESPACE_NAME,
ROUND (SUM (BYTES_USED) / (1024 * 1024), 2) USED_SPACE,
ROUND (SUM (BYTES_FREE) / (1024 * 1024), 2) FREE_SPACE
FROM V$TEMP_SPACE_HEADER
GROUP BY TABLESPACE_NAME) F
WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME(+)
ORDER BY 1;

prompt **************************** 表空间OFFLINE(显示为空正常) ********************;
select tablespace_name ,status from dba_tablespaces where status='OFFLINE';
prompt **************************** SEQUENCE同步数 *********************************;
select max(sequence#)from v$log_history;

CONN sys/pwd@orcl_st as sysdba;
prompt **************************** 备库SEQUENCE同步数 *****************************;
select max(sequence#)from v$log_history;
prompt **************************** 备库日志未应用(显示为空正常) *******************;
select sequence#,applied from v$archived_log where applied='NO';
prompt **************************** 备库日志应用(显示最近十个日志) *****************;
select * from(select sequence#,applied from v$archived_log order by sequence# desc) where rownum<=10;
set time on
disconnect
exit


. Python 脚本
checkdataguard.py
#!/usr/bin/python
#coding=gbk
import os
import pickle
import sys
import smtplib

def get_dg_data():
pipe = os.popen('/u01/app/oracle/product/10.2.0/db_1/bin/sqlplus /nolog @checkdbstatus.sql')
data = pipe.read().strip()
# print data
return data


def save(obj,fname='dgstatus.txt'):
# save to file
fp=open(fname, 'w')
fp.write(obj)
fp.close()

FROM_USER='tianlesoftware@vip.qq.com'
SMTP_SERVER='192.168.1.100'
EMAIL_USER='tianlesoftware'
EMAIL_PASSWD='pwd'
TO_USERS=['tianlesoftware@vip.qq.com',' tianlesoftware@vip.qq.com']

def mysendmail(fromaddr,toaddrs,subject,body):
server=smtplib.SMTP(SMTP_SERVER)
server.login(EMAIL_USER,EMAIL_PASSWD)
# sendmail touser 支持元组,我这里用了个for循环做了个判断。 不判断也行。
for toaddr in toaddrs:
print toaddr
msg = 'From: %s\nTo: %s\nSubject: %s\n\n%s\n' % (fromaddr, toaddr, subject, body)
server.sendmail(fromaddr,toaddr,msg)
server.quit()

body=get_dg_data()
save(body)
subject='192.168.88.199/100 Data Guard Status'
mysendmail(FROM_USER,TO_USERS,subject,body)


. Python 添加到crontab

[oracle@qs-wg-db1 scripts]$ crontab -l
00 9,11,17 * * * export ORACLE_HOME='/u01/app/oracle/product/10.2.0/db_1' && cd /u02/scripts && /u01/scripts/checkdg.py >/u02/scripts/checkdg.log 2>&1 &

在这个地方浪费了不少时间,Python 脚本写很快, 到时这个crontab。 因为直接运行Python 脚本没有问题。 添加到crontab里后就会报错:

[oracle@qs-wg-db1 scripts]$ cat checkdg.log
Error 6 initializing SQL*Plus
Message file sp1<lang>.msb not found
SP2-0750: You may need to set ORACLE_HOME to your Oracle software directory

后来没办法,把环境变量也加到crontab 里了。总算搞定了。环境变量是小,带来的问题却不小。

Linux Crontab 定时任务 命令详解
http://blog.csdn.net/tianlesoftware/archive/2010/02/21/5315039.aspx





------------------------------------------------------------------------------
Blog: http://blog.csdn.net/tianlesoftware
网上资源: http://tianlesoftware.download.csdn.net
相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx
DBA1 群:62697716(满); DBA2 群:62697977(满)
DBA3 群:62697850 DBA 超级群:63306533;
聊天 群:40132017
--加群需要在备注说明Oracle表空间和数据文件的关系,否则拒绝申请

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-369679-1-1.html 上篇帖子: 基于python的crawler 下篇帖子: Python版B树
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表