之前弄过监控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
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
set wrap off;
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**************************** active sessions count **************************;
select count(*) "Active session count" from v$session where status='ACTIVE';
prompt**************************** total sessions count **************************;
select count(*) "Total session count" from v$session;
prompt**************************** top 30 big objects name ************************;
column OWNER format a10
column SEGMENT_NAME format a35
column SEGMENT_TYPE format a15
column SIZES format a10
SELECT * FROM
(
select OWNER, SEGMENT_NAME, SEGMENT_TYPE, round(BYTES / 1024 / 1024 / 1024,3)||'G' AS SIZES
from dba_segments
ORDER BY BYTES DESC)
WHERE ROWNUM<=30
;
prompt***************************** WANGGOUuser data size ****************************;
select sum(bytes)/1024/1024/1024||'G' "User Data Size" from dba_segments where owner='WANGOU';
prompt***************************** SUP data size ************************************;
select sum(bytes)/1024/1024/1024||'G' "User Data Size" from dba_segments where owner='SUP';
prompt***************************** DB size ******************************************;
select sum(bytes)/1024/1024/1024||'G' "DB Size" from dba_segments;
prompt***************************** total tablespace size ****************************;
select sum(bytes)/1024/1024/1024||'G' "Total Tablespace Size" from dba_data_files;
prompt***************************** last day archive log count ***********************;
select sequence#, completion_time from v$archived_log where completion_time>= trunc(sysdate-1) and completion_time<= trunc(sysdate) and dest_id=1;
prompt********************** 表空间监控********************;
SELECT D.TABLESPACE_NAME,
SPACE "SUM_SPACE(M)",
BLOCKS "SUM_BLOCKS(K)",
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表空间和数据文件的关系,否则拒绝申请
分享到:
相关推荐
在编写 Python 监控脚本之前,需要了解一些 Python 基础知识,例如 Python 的语法、变量、数据类型、控制结构、函数等。同时,Python 也提供了一些有用的模块,例如 dns.resolver,用于监控 DB 服务器的信息。 3. ...
每5秒监控windows磁盘io,网络io,内存,cpu
python游戏项目脚本大全 python游戏项目脚本大全 python游戏项目脚本大全 python游戏项目脚本大全 python游戏项目脚本大全 python游戏项目脚本大全 python游戏项目脚本大全 python游戏项目脚本大全 python游戏项目...
在Python中编写Hive脚本主要是为了方便地与Hadoop HIVE数据仓库进行交互,这样可以在数据分析和机器学习流程中无缝地集成大数据处理步骤。以下将详细介绍如何在Python环境中执行Hive查询和管理Hive脚本。 1. **直接...
目前Linux下有一些使用Python语言编写的Linux系统监控工具比如inotify-sync(文件系统安全监控软件)、glances(资源监控工具)在实际工作中,Linux系统管理员可以根据自己使用的服务器的具体情况编写一下简单实用的...
APP测试过程中需要对监控脚本运行过程APP相关数据 ,通过python编写此监控装饰器,不需要修改相关数据的情况下,实现灵活监控;监控数据包括CPU,Memory,Net,功耗。
Wes McKinney所著的《Python For Data Analysis》书籍原数据集,用于系列文章“Python数据分析之Pandas入门(中)”和“Python数据分析之Pandas入门(下)”的学习。
最后,"包含linux安装和执行命令"表明这个压缩包可能包含了在Linux环境下安装Python 3.6.5和执行监控脚本的指南或脚本。在Linux中,你可以使用`apt-get`(Ubuntu/Debian)或`yum`(CentOS/RHEL)来安装依赖项,如...
Python3编写实用脚本程序——从零学Python-掘金活动.zip Python3编写实用脚本程序——从零学Python-掘金活动.zip Python3编写实用脚本程序——从零学Python-掘金活动.zip Python3编写实用脚本程序——从零学Python-...
《基于Python的王者荣耀脚本详解》 在当今的数字化时代,游戏编程已经成为了一项热门技能,而Python作为一款易学且功能强大的编程语言,被广泛应用于各种领域,包括游戏自动化。本文将深入探讨如何利用Python编写...
"Python雷电模拟器脚本说明" 以下是基于给定的文件信息生成的知识点: 一、雷电模拟器的文件共享机制 雷电模拟器有一个共享文件夹,PC上的文件夹和Android上的SDcard路径是相通的一共有三个文件夹:图片、杂项、...
Python交换机自动备份脚本是一种高效管理网络设备的方法,它能帮助网络管理员便捷地备份多个交换机的配置,包括华为、思科、华三和Aruba等不同品牌的设备。这样的脚本大大提高了工作效率,减少了手动操作的繁琐和...
然而,随着Python的普及和功能增强,越来越多的开发者开始考虑使用Python来替代Bash脚本。Python提供了更强大的数据处理能力、更好的可读性和维护性,以及丰富的第三方库支持。下面,我们将深入探讨为何以及如何用...
Python3编写实用脚本程序——恶搞钓鱼网站.zip Python3编写实用脚本程序——恶搞钓鱼网站.zip Python3编写实用脚本程序——恶搞钓鱼网站.zip Python3编写实用脚本程序——恶搞钓鱼网站.zip Python3编写实用脚本程序...
资源分类:Python库 所属语言:Python 使用前提:需要解压 资源全名:python_datamatrix-0.9.5-py2.py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
【Python跳一跳脚本】是一种使用Python编程语言编写的自动化工具,主要用于微信小程序“跳一跳”的自动游玩。这个脚本的目的是帮助用户在无需手动操作的情况下,通过程序自动控制游戏进程,实现高分的可能。以下是...
我上传错了,这个才是正确的python for data analysis 2017版,另一个名字对但内容是 Python Data Structures and Algorithms 2017 。 这本书不用介绍了,不错的一本书,豆瓣有介绍,非常不错。
1)启动性能监控脚本,cpu与memory信息记录于文件中。 ./watch_start runtime filePrefix runtime暂时为运行次数。根据runtime计算最佳统计间隔和次数的模块未实现。 记录文件名:filePrefix_timestamp_cpu.txt 或 ...
为了提高效率,我们可以借助自动化工具,例如Python脚本来实现网络设备的自动巡检。本文将深入探讨如何使用Python和telnetlib模块来实现这一功能。 首先,Python是一种强大的编程语言,其简洁的语法和丰富的库使得...
Python3编写实用脚本程序——省市区三级地址库.zip Python3编写实用脚本程序——省市区三级地址库.zip Python3编写实用脚本程序——省市区三级地址库.zip Python3编写实用脚本程序——省市区三级地址库.zip Python3...