使用shell脚本进行查询数据库空间进行告警:
前提条件:
1 已经安装oracle客户端:plsql。
2 主机能通公网
完全详细脚本地址:
https://download.csdn.net/download/zhao2508/20043165
下面方法一:
#!/bin/bash
#Author:Zhao
#Date:2021/7/5 20:00:16
# 定义plsql环境变量
source ~/.bashrc
wx_data()
{
sqlplus welog/6666Dgy@wxdb << EOF
set heading off
set line 4000
set WRAP OFF
SELECT A.TABLESPACE_NAME,
ROUND(((A.BYTES - B.BYTES) / A.BYTES) * 100) "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
--WELOG_TBS 表空间名
and A.TABLESPACE_NAME = 'WELOG_TBS'
ORDER BY ((A.BYTES - B.BYTES) / A.BYTES) DESC;
exit
EOF
}
wt_data()
{
sqlplus wtdb/6666Dgy@wtdb << EOF
set heading off
set line 4000
set WRAP OFF
SELECT A.TABLESPACE_NAME,
ROUND(((A.BYTES - B.BYTES) / A.BYTES) * 100) "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
and A.TABLESPACE_NAME = 'DATA_TBS'
ORDER BY ((A.BYTES - B.BYTES) / A.BYTES) DESC;
exit
EOF
}
zq_data()
{
sqlplus zqdb/6666Dgy@zqdb << EOF
set heading off
set line 4000
set WRAP OFF
SELECT A.TABLESPACE_NAME,
ROUND(((A.BYTES - B.BYTES) / A.BYTES) * 100) "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
and A.TABLESPACE_NAME = 'DATA_ZQDB'
ORDER BY ((A.BYTES - B.BYTES) / A.BYTES) DESC;
exit
EOF
}
方法二:殊途同归,只不过更加麻烦点。
#!/bin/bash
#Author:Zhao
#Date:2021/7/5 20:00:16
# 定义plsql环境变量
source ~/.bashrc
wx_data()
{
sqlplus welog/6666Dgy@wxdb << EOF
set heading off
set line 4000
set WRAP OFF
SELECT A.TABLESPACE_NAME,
ROUND(((A.BYTES - B.BYTES) / A.BYTES) * 100) "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
and A.TABLESPACE_NAME = 'WELOG_TBS'
ORDER BY ((A.BYTES - B.BYTES) / A.BYTES) DESC;
exit
EOF
}
wt_data()
{
sqlplus wtdb/6666Dgy@wtdb << EOF
set heading off
set line 4000
set WRAP OFF
SELECT A.TABLESPACE_NAME,
ROUND(((A.BYTES - B.BYTES) / A.BYTES) * 100) "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
and A.TABLESPACE_NAME = 'DATA_TBS'
ORDER BY ((A.BYTES - B.BYTES) / A.BYTES) DESC;
exit
EOF
}
zq_data()
{
sqlplus zqdb/6666Dgy@zqdb << EOF
set heading off
set line 4000
set WRAP OFF
SELECT A.TABLESPACE_NAME,
ROUND(((A.BYTES - B.BYTES) / A.BYTES) * 100) "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
and A.TABLESPACE_NAME = 'DATA_ZQDB'
ORDER BY ((A.BYTES - B.BYTES) / A.BYTES) DESC;
exit
EOF
}
wt=`wt_data|grep "DATA_TBS"|awk '{print$2}'`
wx=`wx_data|grep "WELOG_TBS"|awk '{print$2}'`
zq=`zq_data|grep "DATA_ZQDB"|awk '{print$2}'`
dat_arry=(${wt} ${wx} ${zq})
sername="Oracle数据库空间监测"
data_sy=` date "+%Y-%m-%d %H:%M:%S" `
webhook='https://oapi.dingtalk.com/robot/send?access_token=c1b5555555eca2'
详细脚本文件地址: