您当前的位置:首页 > 电脑百科 > 数据库 > Oracle

oracle数据库自动巡检脚本

时间:2023-05-07 16:03:53  来源:今日头条  作者:雪竹频道

数据库巡检是一项非常重要的任务,它有以下几个方面的重要性:

  • 保证数据库的稳定性和可靠性:巡检可以帮助管理员及时发现数据库中存在的问题,如性能瓶颈、资源竞争、死锁、数据丢失等,以便及时采取措施解决这些问题,保证数据库的稳定性和可靠性。
  • 提高数据库的性能:通过巡检,可以分析数据库的性能瓶颈,优化数据库的配置、索引、表结构等,从而提高数据库的性能。
  • 提高数据库的安全性:巡检可以帮助管理员及时发现数据库中存在的安全隐患,如未授权的访问、恶意攻击等,以及及时采取措施加强数据库的安全性。
  • 遵守合规要求:对于一些行业,如金融、医疗等,存在严格的合规要求,巡检可以帮助管理员检查数据库是否符合这些合规要求,以确保企业的合法经营。
  • 提高管理员的工作效率:巡检可以帮助管理员及时发现问题,减少日常维护的工作量,提高管理员的工作效率。

解决方案

#!/bin/bash

# 设置Oracle环境变量
export ORACLE_HOME=/u01/App/oracle/product/11.2.0/dbhome_1
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_SID=your_oracle_sid

# 设置变量
DATE=$(date +%Y%m%d_%H%M%S)
LOGFILE=oracle_healthcheck_$DATE.log

# 创建日志文件
touch $LOGFILE

# 执行巡检命令并将结果写入日志文件
echo "Oracle Healthcheck Report" >> $LOGFILE
echo "------------------------" >> $LOGFILE
echo "" >> $LOGFILE

# 检查Oracle实例状态
echo "Checking Oracle instance status..." >> $LOGFILE
ps -ef | grep ora_pmon | grep -v grep > /dev/null
if [ $? -eq 0 ]
then
    echo "Oracle instance is running." >> $LOGFILE
else
    echo "Oracle instance is not running." >> $LOGFILE
fi
echo "" >> $LOGFILE

# 检查Oracle监听状态
echo "Checking Oracle listener status..." >> $LOGFILE
lsnrctl status > /dev/null
if [ $? -eq 0 ]
then
    echo "Oracle listener is running." >> $LOGFILE
else
    echo "Oracle listener is not running." >> $LOGFILE
fi
echo "" >> $LOGFILE

# 检查控制文件状态
echo "Checking control file status..." >> $LOGFILE
sqlplus -s /nolog <<EOF >> $LOGFILE
conn / as sysdba
set heading off
set feedback off
select name, status from v$controlfile;
exit;
EOF
echo "" >> $LOGFILE

# 检查在线日志状态
echo "Checking online redo log status..." >> $LOGFILE
sqlplus -s /nolog <<EOF >> $LOGFILE
conn / as sysdba
set heading off
set feedback off
select group#, status from v$log;
exit;
EOF
echo "" >> $LOGFILE

# 检查表空间状态
echo "Checking tablespace status..." >> $LOGFILE
sqlplus -s /nolog <<EOF >> $LOGFILE
conn / as sysdba
set heading off
set feedback off
select tablespace_name, status from dba_tablespaces;
exit;
EOF
echo "" >> $LOGFILE

# 检查数据文件状态
echo "Checking datafile status..." >> $LOGFILE
sqlplus -s /nolog <<EOF >> $LOGFILE
conn / as sysdba
set heading off
set feedback off
select file_name, status from dba_data_files;
exit;
EOF
echo "" >> $LOGFILE

# 检查数据库连接情况
echo "Checking database connections..." >> $LOGFILE
sqlplus -s /nolog <<EOF >> $LOGFILE
conn / as sysdba
set heading off
set feedback off
select count(*) from v$session;
exit;
EOF
echo "" >> $LOGFILE

# 检查系统磁盘空间
echo "Checking system disk space..." >> $LOGFILE
df -h >> $LOGFILE
echo "" >> $LOGFILE

# 检查表空间使用情况
echo "Checking tablespace usage..." >> $LOGFILE
sqlplus -s /nolog <<EOF >> $LOGFILE
conn / as sysdba
set heading off
set feedback off
col "Tablespace Name" format a20
col "Total Size (MB)" format 999,999,999
col "Used Size (MB)" format 999,999,999
col "Free Size (MB)" format 999,999,999
select df.tablespace_name "Tablespace Name", totalusedspace/1024/1024 "Used Size (MB)",
(df.totalspace - totalusedspace)/1024/1024 "Free Size (MB)", df.totalspace/1024/1024 "Total Size (MB)"
from
(select tablespace_name, sum(bytes) totalusedspace
from dba_segments
group by tablespace_name) s,
(select tablespace_name, sum(bytes) totalspace
from dba_data_files
group by tablespace_name) df
where s.tablespace_name = df.tablespace_name;
exit;
EOF
echo "" >> $LOGFILE

# 检查消耗CPU最高的进程
echo "Checking processes consuming the most CPU..." >> $LOGFILE
ps -eo pid,ppid,cmd,%cpu,%mem --sort=-%cpu | head >> $LOGFILE
echo "" >> $LOGFILE

# 检查DISK READ最高的SQL语句
echo "Checking SQL statements with the highest DISK READs..." >> $LOGFILE
sqlplus -s /nolog <<EOF >> $LOGFILE
conn / as sysdba
set heading off
set feedback off
col "SQL ID" format a15
col "DISK READS" format 999,999,999
select sql_id "SQL ID", disk_reads "DISK READS"
from v$sqlarea
where rownum <= 10
order by disk_reads desc;
exit;
EOF
echo "" >> $LOGFILE

# 检查前十条性能差的SQL
echo "Checking the top 10 worst-performing SQL statements..." >> $LOGFILE
sqlplus -s /nolog <<EOF >> $LOGFILE
conn / as sysdba
set heading off
set feedback off
col "SQL ID" format a15
col "ELAPSED TIME (s)" format 999,999,999
select sql_id "SQL ID", elapsed_time/1000000 "ELAPSED TIME (s)"
from v$sqlarea
where rownum <= 10
order by elapsed_time desc;
exit;
EOF
echo "" >> $LOGFILE

# 检查运行很久的SQL
echo "Checking long-running SQL statements..." >> $LOGFILE
sqlplus -s /nolog <<EOF >> $LOGFILE
conn / as sysdba
set heading off
set feedback off
col "SQL ID" format a15
col "RUNNING TIME (s)" format 999,999,999
select sql_id "SQL ID", last_active_time, round((sysdate - last_active_time)*86400) "RUNNING TIME (s)"
from v$session
where type = 'USER'
order by running_time desc;
exit;
EOF
echo "" >> $LOGFILE

# 检查死锁及处理
echo "Checking for deadlocks..." >> $LOGFILE
sqlplus -s /nolog <<EOF >> $LOGFILE
conn / as sysdba
set heading off
set feedback off
col blocker format a15
col wAIt_time format a15
select l1.sid blocker, l2.sid waiter, l1.username blocker_user, l2.username waiter_user, l2.event wait_event, l2.seconds_in_wait wait_time
from v$lock l1, v$lock l2, v$session s1, v$session s2
where l1.block = 1 and l2.request > 0
and l1.id1 = l2.id1 and l1.id2 = l2.id2
and l1.sid = s1.sid and l2.sid = s2.sid;
exit;
EOF
echo "" >> $LOGFILE

# 检查缓冲区命中率
echo "Checking buffer cache hit ratio..." >> $LOGFILE
sqlplus -s /nolog <<EOF >> $LOGFILE
conn / as sysdba
set heading off
set feedback off
select name, value from v$sysstat where name = 'buffer cache hit ratio';
exit;
EOF
echo "" >> $LOGFILE

# 检查共享池命中率
echo "Checking shared pool hit ratio..." >> $LOGFILE
sqlplus -s /nolog <<EOF >> $LOGFILE
conn / as sysdba
set heading off
set feedback off
select name, value from v$sysstat where name = 'shared pool hit ratio';
exit;
EOF
echo "" >> $LOGFILE

# 检查排序区状态
echo "Checking sort area status..." >> $LOGFILE
sqlplus -s /nolog <<EOF >> $LOGFILE
conn / as sysdba
set heading off
set feedback off
select tablespace_name, max_size, used_size, alloc_size from v$sort_segment;
exit;
EOF
echo "" >> $LOGFILE

# 检查日志缓冲区状态
echo "Checking redo log buffer status..." >> $LOGFILE
sqlplus -s /nolog <<EOF >> $LOGFILE
conn / as sysdba
set heading off
set feedback off
select name, value from v$sysstat where name = 'redo log space requests';
exit;
EOF
echo "" >> $LOGFILE

# 检查ORACLE数据库备份状态
echo "Checking Oracle database backup status..." >> $LOGFILE
rman target / catalog rman/rman@rcat <<EOF >> $LOGFILE
list backup;
EOF
echo "" >> $LOGFILE

# 发送巡检报告邮件
mail -s "Oracle Healthcheck Report" your@email.com < $LOGFILE

exit

小结

通过脚本来使用我们的巡检任务自动化,来减轻常规的工作量,用更多的时间来专注于数据库更核心的维护和更深技术的探究!



Tags:oracle   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Oracle正式发布Java 22
Oracle 正式发布 Java 22,这是备受欢迎的编程语言和开发平台推出的全新版本。Java 22 (Oracle JDK 22) 在性能、稳定性和安全性方面进行了数千种改进,包括对Java 语言、其API...【详细内容】
2024-03-21  Search: oracle  点击:(10)  评论:(0)  加入收藏
oracle数据库基础学习
在当今数字化时代,数据库已成为企业运营的关键要素。而Oracle数据库,作为全球领先的企业级数据库管理系统,更是备受推崇。本文将带您深入了解Oracle数据库的基础知识,帮助您从零...【详细内容】
2024-01-20  Search: oracle  点击:(90)  评论:(0)  加入收藏
一文聊聊如何快速监控 Oracle 数据库
Cprobe 是一个探针采集器,支持常见数据库、中间件的采集,比如 MySQL、Redis、MongoDB、Oracle、Kafka、ElasticSearch 等。安装配置 Oracle简单起见,我使用 Docker 启动 Oracl...【详细内容】
2023-12-26  Search: oracle  点击:(126)  评论:(0)  加入收藏
Oracle这个公开漏洞正在被8220挖矿组利用
有的网络攻击组织喜欢极具攻击力的0-Day漏洞,但也有的组织更愿意在那些已经公开的漏洞上下功夫,针对那些未能打好补丁的目标,不断优化策略和技术来逃避安全检测,从而最终实现入...【详细内容】
2023-12-22  Search: oracle  点击:(106)  评论:(0)  加入收藏
Oracle数据库性能监控:洞察系统瓶颈的利器!
在当今信息时代,企业对于数据的存储和管理变得越来越重要。Oracle数据库作为全球广泛应用的关系型数据库管理系统,承载着大量的业务数据和应用。为了确保数据库的高效稳定运行...【详细内容】
2023-12-18  Search: oracle  点击:(91)  评论:(0)  加入收藏
Oracle软件在主机平台的应用
// 下 栽 の 地 止 :http://quangneng.com/2573/主机平台通常指的是大型服务器,包括UNIX、Linux、IBM Mainframe等。Oracle数据库在这些主机平台上的应用非常普遍,原因有以下几...【详细内容】
2023-11-30  Search: oracle  点击:(145)  评论:(0)  加入收藏
Oracle数据库存在不可用索引性能问题
在实践中ORACLE数据库存在不可用索引会引发性能问题。所谓的不可用索引,是指索引自身出了问题,不能被所有SQL使用到。这与因SQL写法不当而无法使用索引的索引失效情况不同。当...【详细内容】
2023-11-23  Search: oracle  点击:(239)  评论:(0)  加入收藏
Oracle数据库容灾方案:持续运营的保障之道!
Oracle数据库的容灾方案是为了保障数据库持续运营和数据的高可用性而设计的。在企业级应用中,数据库的持续运行对于业务的正常操作至关重要。一旦发生数据库故障或灾难,将会对...【详细内容】
2023-11-23  Search: oracle  点击:(142)  评论:(0)  加入收藏
Oracle数据库事务管理:确保数据一致性的关键步骤!
事务管理是数据库管理中至关重要的一环,它确保了数据的一致性、完整性和可靠性。Oracle数据库提供了强大的事务管理功能,能够保证多个操作在数据库中作为一个逻辑单元执行,以确...【详细内容】
2023-11-20  Search: oracle  点击:(193)  评论:(0)  加入收藏
14个开源免费数据库监控工具,MySQL、Oracle、Postgres或MSSQL
在信息系统项目中,UI、业务逻辑、数据库操作、文件操作、网络、API调用等许多环节都有可能产生性能问题,其中,数据库读写是最为常见的操作,我们也发现其实许多项目中的大部分瓶...【详细内容】
2023-11-17  Search: oracle  点击:(276)  评论:(0)  加入收藏
▌简易百科推荐
Oracle正式发布Java 22
Oracle 正式发布 Java 22,这是备受欢迎的编程语言和开发平台推出的全新版本。Java 22 (Oracle JDK 22) 在性能、稳定性和安全性方面进行了数千种改进,包括对Java 语言、其API...【详细内容】
2024-03-21  OSC开源社区    Tags:Oracle   点击:(10)  评论:(0)  加入收藏
oracle数据库基础学习
在当今数字化时代,数据库已成为企业运营的关键要素。而Oracle数据库,作为全球领先的企业级数据库管理系统,更是备受推崇。本文将带您深入了解Oracle数据库的基础知识,帮助您从零...【详细内容】
2024-01-20  EmSpace    Tags:oracle   点击:(90)  评论:(0)  加入收藏
一文聊聊如何快速监控 Oracle 数据库
Cprobe 是一个探针采集器,支持常见数据库、中间件的采集,比如 MySQL、Redis、MongoDB、Oracle、Kafka、ElasticSearch 等。安装配置 Oracle简单起见,我使用 Docker 启动 Oracl...【详细内容】
2023-12-26      Tags:Oracle   点击:(126)  评论:(0)  加入收藏
Oracle这个公开漏洞正在被8220挖矿组利用
有的网络攻击组织喜欢极具攻击力的0-Day漏洞,但也有的组织更愿意在那些已经公开的漏洞上下功夫,针对那些未能打好补丁的目标,不断优化策略和技术来逃避安全检测,从而最终实现入...【详细内容】
2023-12-22    FreeBuf.COM  Tags:Oracle   点击:(106)  评论:(0)  加入收藏
Oracle数据库性能监控:洞察系统瓶颈的利器!
在当今信息时代,企业对于数据的存储和管理变得越来越重要。Oracle数据库作为全球广泛应用的关系型数据库管理系统,承载着大量的业务数据和应用。为了确保数据库的高效稳定运行...【详细内容】
2023-12-18  编程技术汇  今日头条  Tags:Oracle   点击:(91)  评论:(0)  加入收藏
Oracle软件在主机平台的应用
// 下 栽 の 地 止 :http://quangneng.com/2573/主机平台通常指的是大型服务器,包括UNIX、Linux、IBM Mainframe等。Oracle数据库在这些主机平台上的应用非常普遍,原因有以下几...【详细内容】
2023-11-30  阿小白    Tags:Oracle   点击:(145)  评论:(0)  加入收藏
Oracle数据库存在不可用索引性能问题
在实践中ORACLE数据库存在不可用索引会引发性能问题。所谓的不可用索引,是指索引自身出了问题,不能被所有SQL使用到。这与因SQL写法不当而无法使用索引的索引失效情况不同。当...【详细内容】
2023-11-23  测试小号等闲之辈  微信公众号  Tags:Oracle   点击:(239)  评论:(0)  加入收藏
Oracle数据库容灾方案:持续运营的保障之道!
Oracle数据库的容灾方案是为了保障数据库持续运营和数据的高可用性而设计的。在企业级应用中,数据库的持续运行对于业务的正常操作至关重要。一旦发生数据库故障或灾难,将会对...【详细内容】
2023-11-23  编程技术汇  今日头条  Tags:Oracle   点击:(142)  评论:(0)  加入收藏
Oracle数据库事务管理:确保数据一致性的关键步骤!
事务管理是数据库管理中至关重要的一环,它确保了数据的一致性、完整性和可靠性。Oracle数据库提供了强大的事务管理功能,能够保证多个操作在数据库中作为一个逻辑单元执行,以确...【详细内容】
2023-11-20  编程技术汇  微信公众号  Tags:Oracle   点击:(193)  评论:(0)  加入收藏
从来不是侥幸!Oracle为何独得印度政府青睐?
作者 | Mohit编译 | 小欧出品 | 51CTO技术栈(微信号:blog51cto)今年 8 月,印度教育部宣布选择 Oracle 云基础设施 (OCI) 来改造免费教育技术平台 DIKSHA。小微企业信用保证基金信...【详细内容】
2023-11-17    51CTO  Tags:Oracle   点击:(183)  评论:(0)  加入收藏
站内最新
站内热门
站内头条