Oracle 一键检查加强版本

支持更丰富了,代码也更乱了

实例个数 告警日志 实例状态 用户连接 活动会话 锁 集群状态 服务状态 磁盘空间 cpu mem 侦听及日志

单机、RAC Linux、AIX 11g、19c、23ai 多实例、多租户、ADG

依赖adrci配置正常,也可以改为 getAlert()

将脚本保存为j.sh,用root用执行,例如 sh /tmp/j.sh

ver 1.3

效果展示
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#!/bin/bash

## 实例个数 告警日志 实例状态 会话 活动会话 锁 集群状态 服务状态 磁盘空间 侦听日志
## 单机、RAC  Linux、AIX  11g、19c、23ai
## 依赖adrci配置正常,也可以改为 getAlert()
## ver 1.2

case `uname` in
    AIX)
        ps aux |head -1 ; ps aux|sort -rn +2|head -5
        echo

        ps aux|head -1;ps aux | sort +5 -6 -n -r | head -5
        echo

        df|grep -e "[8,9][0-9]%" -e "100%"

        inst_cnt=`ps -ef|grep ckpt|grep -vE 'grep|ASM|MGMT'|awk '{print $9}' | wc -l`
        if [ $inst_cnt -gt 1 ]; then
           ps -ef|grep ckpt|grep -vE 'grep|ASM|MGMT'|awk '{print $9}'|awk -F'_' '{print "INSTANCE: " $3}'|sort
        fi

        PROFILE='.profile'
    ;;
    Linux)
        ## CPU较高的进程
        ps aux --sort=-%cpu| head -5
        echo

        ##内存较高的进程
        ps aux|head -1;ps aux|grep -v PID|sort -rn -k +4|head -5
        echo

        ##磁盘空间使用率超过80
        df -h|grep -v Size|sed 's#[[:space:]][[:space:]]*# #g'|cut -d ' ' -f5,6|sort -t '%' -k1 -nr|egrep '[8-9][0-9]%|100%' 

        ##实例个数大于1,提醒 ora_ckpt_FEX2
        inst_cnt=`ps -ef| grep ckpt|egrep -v 'grep|ASM|MGMT' | wc -l`
        if [ $inst_cnt -gt 1 ]; then
           ps xao pid,user,cmd|grep ckpt|grep -vE 'grep|ASM|MGMT' |awk '{print $3}'|awk -F'_' '{print "INSTANCE: " $3}'|sort
        fi

        PROFILE='.bash_profile'
    ;;
    *)
 echo "Unsupported OS type!"
 exit;
esac

rm -fr /tmp/israc.tmp

CMDFILE=/tmp/oracle_check.sh
(cat  << EOF
#!/bin/bash
source /home/oracle/$PROFILE
sid=\$1
echo "----------------------------"
echo \$sid
echo "----------------------------"

ORACLE_SID=\$sid

##登录用户及口令放到一个临时文件,例如sys/Welcome1 as sysdba
if [ -f '/tmp/pwdfile.tmp' ]; then
    sqlpwd=\`cat /tmp/pwdfile.tmp\`
else
    sqlpwd=' /as sysdba '
fi

getAlert() {
sqlplus -S "\$sqlpwd" <<!
set lin 200 pages 1000
col message_text for a80
col riqi for a22
select to_char(originating_timestamp,'yyyy-mm-dd hh24:mi:ss')riqi,message_text
from x\\\$dbgalertext
where originating_timestamp > sysdate - 3 and
  (message_text = 'ORA-00600'
OR message_text LIKE '%fatal%'
OR message_text LIKE '%error%'
OR message_text LIKE '%ORA-%'
OR message_text LIKE '%terminating the instance%');
exit
!
}

ver=\` sqlplus -v|grep Release|awk '{print \$3}'|cut -b 1-2 \`

##显示告警日志
if [ \${ver} -gt "11" ]; then
	aa=\`adrci exec="show home"|grep \$sid \`
	adrci exec="set home \$aa;show alert -p \"message_text like '%ORA-%'\" -term " |tail -6
else
	# adrci  exec="set home $aa;show alert -tail 5000"|grep ORA |tail -10 ## 11g
    echo \${ver}
    getAlert
fi


##实例状态

getInstance() {
sqlplus -S "\$sqlpwd" <<!
set lines 120
col status for a12
col instance_name for a15
col instance_name for a15
col startup_time for a20
col db_role for a20
col host_name for a25
col VERSION for a15
select instance_name,status,to_char(startup_time,'yyyy-mm-dd hh24:mi:ss')startup_time,host_name,(select database_role from v\\\$database)db_role,VERSION from gv\\\$instance order by 1;
exit
!
}

getInstance

showPdbs() {
sqlplus -S "\$sqlpwd" <<!
sho pdbdet
exit
!
}

##多租户信息
if [ \${ver} -gt "12" ]; then
	showPdbs
fi

sqlplus -S "\$sqlpwd" <<!
--会话个数 
col status for a12
col username for a30
select inst_id,username,count(0) cnt from gv\\\$session group by inst_id,username order by 1,2;

--top 10
set lines 200 pages 100
col txt for a65
col sql_id for a13
select a.sql_id,a.cnt,a.pctload,b.sql_text txt from (select * from (select sql_id,count(0) cnt,round(count(0)/sum(count(0)) over(),4)*100 pctload
from gv\\\$active_session_history A
where A.SAMPLE_TIME>sysdate-15/60/24
and sql_id is not null GROUP BY SQL_ID ORDER BY COUNT(0) DESC)
where rownum<11) a left join (select distinct sql_text,sql_id from v\\\$sqltext where piece=0) b on a.sql_id=b.sql_id order by 2 desc ,1;

col state for a20
col event for a25 trunc
select inst_id inst,sid,sql_id,event,state,blocking_session blk,last_call_et,seconds_in_wait miao
 from gv\\\$session where status='ACTIVE' and username is not null and sid<>sys_context('userenv','sid') and wait_class<>'Idle'
order by last_call_et;

--表空间使用率(mini)

col tablespace_name for a20
select a.tablespace_name, round(a.bytes / 1024 / 1024) "Sum MB", round((a.bytes - b.bytes) / 1024 / 1024) "used MB", round(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 order by ((a.bytes - b.bytes) / a.bytes) desc;


--查被阻塞会话 
set lin 200 pages 1000
col USERNAME for a15
col PROGRAM for a40
col EVENT for a30
col WAITING_SESSION for a20

WITH tkf_block_info AS
 (SELECT a.inst_id || '_' || a.sid waiting_session,
         a.username,  a.program,  a.event, a.sql_id,  a.last_call_et,
         DECODE(a.blocking_instance || '_' || a.blocking_session,
                '_', NULL, a.blocking_instance || '_' || a.blocking_session) holding_session
    FROM gv\\\$session a,
         (SELECT inst_id, sid
            FROM gv\\\$session
           WHERE blocking_session IS NOT NULL
          UNION
          SELECT blocking_instance, blocking_session
            FROM gv\\\$session
           WHERE blocking_session IS NOT NULL) b
   WHERE a.inst_id = b.inst_id
     AND a.SID = b.sid)
SELECT LPAD(' ', 3 * (LEVEL - 1)) || waiting_session waiting_session,
       username, program, event,  sql_id, last_call_et
  FROM tkf_block_info
CONNECT BY PRIOR waiting_session = holding_session
 START WITH holding_session IS NULL;
 
exit
!

getrole() {
sqlplus -S "\$sqlpwd" <<!
set head off
set feedback off
set echo off
set time off
set timing off
select database_role from v\\\$database;
exit
!
}

adg_diff() {
sqlplus -S "\$sqlpwd" <<!
col OPEN_MODE for a20
col PROTECTION_MODE for a20
col DATABASE_ROLE for a18
col SWITCHOVER_STATUS for a20
col thread# for 99
col name for a10
col diff for 9999
set lin 200
  select A.THREAD#,C.NAME,C.OPEN_MODE,C.PROTECTION_MODE,C.DATABASE_ROLE,C.SWITCHOVER_STATUS,A.APPLOG,B.NOWLOG, A.APPLOG- B.NOWLOG DIFF from (SELECT THREAD#, MAX(SEQUENCE#) AS "APPLOG" FROM v\\\$ARCHIVED_LOG WHERE APPLIED='YES' and RESETLOGS_CHANGE#=(select RESETLOGS_CHANGE# from v\\\$database) GROUP BY THREAD#) A,(SELECT THREAD#, MAX(SEQUENCE#) AS "NOWLOG" FROM v\\\$LOG GROUP BY THREAD#) B,v\\\$database C where A.THREAD#=B.THREAD#;

exit
!
} 


std_delay() {
sqlplus -S "\$sqlpwd" <<!
set lin 150
col name for a23
col VALUE for a18
col UNIT for a30
col TIME_COMPUTED for a20
col DATUM_TIME for a20
col SOURCE_DBID for 99999999999
col SOURCE_DB_UNIQUE_NAME for a20
 select name,value, TIME_COMPUTED,DATUM_TIME from v\\\$dataguard_stats;
exit
!
} 

is_rac() {
sqlplus -S "\$sqlpwd" <<!
set pagesize 9999 lin 250 echo off heading off verify off feedback off trims on
spool /tmp/israc.tmp app
select value from v\\\$parameter where name='cluster_database';
spool off
exit
!
} 

is_rac


role=\$(getrole)

role=\`echo \${role} |sed 's/ //g' \`
if [ \${role} = "PRIMARY" ]; then
  adg_diff
elif [ \${role} = "PHYSICALSTANDBY" ]; then
  std_delay
else
  echo 'error role'
fi
EOF

)>$CMDFILE
dbuser=`ps -ef|grep ora_ckpt|grep -v grep |awk '{print $1}'`


for ora_sid in `ps -ef|grep ckpt|grep -vE 'grep|ASM|MGMT'|awk '{print $8}'|awk -F'_' '{print $3}'|sort ` 
do
  su - $dbuser "-c /bin/bash $CMDFILE $ora_sid"
  echo
done



CMDFILE=/tmp/grid_check.sh
(cat  << EOF
#!/bin/bash
source /home/grid/$PROFILE
#集群状态 服务状态 磁盘空间 侦听日志
#crsctl stat res -t -init -w "(STATE = OFFLINE) and (NAME != ora.crf) and (NAME != ora.diskmon) and (NAME != ora.cha)"|grep -v '\----'|grep -v Cluster
crsctl stat res -t -init -w "(STATE = OFFLINE) and (NAME != ora.crf) and (NAME != ora.diskmon) and (NAME != ora.chad)" 
echo
crsctl stat res -t -w "(STATE = OFFLINE) and (NAME != ora.proxy_advm) and (NAME != ora.chad)" |grep -v '\-------'|grep -v 'Cluster Resources'
echo '------------------------------------------------------------'
crsctl stat res -t -w "NAME co prim" |grep -v '\-------'|grep -v 'Cluster Resources'
echo
EOF
)>$CMDFILE
giuser=`ps -ef|grep asm_ckpt|grep -v grep |awk '{print $1}'`

#判断是集群再跑crsctl检查
if [ -f '/tmp/israc.tmp' ]; then
	line=`cat /tmp/israc.tmp |grep -v ^$|head -1`
	if [ ${line} = "TRUE" ]; then
		su - $giuser  "-c /bin/bash $CMDFILE"
	fi
	echo
fi

w
echo

在一台oracle 23ai上的效果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/933328.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开发者如何使用GCC提升开发效率Opencv操作

看此篇前请先阅读 https://blog.csdn.net/qq_20330595/article/details/144134160?spm=1001.2014.3001.5502 https://blog.csdn.net/qq_20330595/article/details/144134160?spm=1001.2014.3001.5502 https://blog.csdn.net/qq_20330595/article/details/144216351?spm=1001…

工具篇--GitHub Desktop 使用

文章目录 前言一、GitHub Desktop 的使用&#xff1a;1.1 通过官网下载GitHub Desktop和安装&#xff1a;1.2 安装和使用&#xff1a;1.2.1 填充自己的标识&#xff1a;1.2.3 克隆项目&#xff1a;1.2.4 git 常用忽略项配置&#xff1a; 二、代码的更新和提交&#xff1a;2.1 代…

PHP:将数据传递给Grid++Report模板进行打印

模板参考 这里使用的模板test111.grt参照进行生成 &#xff0c;需要确保字段对应才能将数据进行传递 GridReport:自定义模板设计&#xff08;自由表格使用&#xff09;&#xff0c;详细教程-CSDN博客https://blog.csdn.net/weixin_46001736/article/details/144315191?spm10…

Camp4-L2:LMDeploy 量化部署进阶实践

书生浦语大模型实战营第四期&#xff1a;LMDeploy 量化部署进阶实践 教程链接&#xff1a;https://github.com/InternLM/Tutorial/tree/camp4/docs/L2/LMDeploy视频链接&#xff1a;https://www.bilibili.com/video/BV18aUHY3EEG/?vd_sourceb96c7e6e6d1a48e73edafa36a36f1697…

spark-operaotr

1、系统架构 括如下几个组件: SparkApplication控制器, 该控制器用于创建、更新、删除SparkApplication对象,同时控制器还会监控相应的事件,执行相应的动作;Submission Runner, 负责调用spark-submit提交Spark作业, 作业提交的流程完全复用Spark on K8s的模式;Spark Pod Monit…

记录:ubuntu24.04源码安装nginx

一. 下载Nginx源码 两个地址二选一即可 Nginx官网Nginx官网 Github eg&#xff1a;nginx-1.27.3.tar.gz 下载到 ubuntu24.04 的 Downloads &#xff0c;解压 cd Downloads tar -zxvf nginx-1.27.3.tar.gz二. 编译安装 Note: 编译最好用 root 权限&#xff0c; 使用下面命令…

国产GPU中,VLLM0.5.0发布Qwen2.5-14B-Instruct-GPTQ-Int8模型,请求返回结果乱码

概述 国产GPU: DCU Z100 推理框架&#xff1a; vllm0.5.0 docker容器化部署 运行如下代码&#xff1a; python -m vllm.entrypoints.openai.api_server --model /app/models/Qwen2.5-14B-Instruct-GPTQ-Int8 --served-model-name qwen-gptq --trust-remote-code --enforce…

R155 VTA 认证对汽车入侵检测系统(IDS)合规要求

续接上集“浅谈汽车网络安全车辆型式认证&#xff08;VTA&#xff09;的现状和未来发展”&#xff0c;有许多读者小伙伴有联系笔者来确认相关的R155 VTA网络安全审核要求&#xff0c;基于此&#xff0c;笔者将针对 R155 VTA 每一条网络安全审核细则来具体展开。 今天就先从汽车…

Pac4j 学习笔记

随着互联网技术的飞速发展&#xff0c;网络安全问题日益凸显&#xff0c;企业信息安全与身份认证系统变得越来越重要&#xff0c;而且安全认证集成方案作为保障网络安全的重要一环&#xff0c;其研究与应用也至关重要。在这种背景下&#xff0c;Pac4j 作为一种流行的身份验证库…

5G CPE组成及功能介绍(二)

5G CPE 组成及功能介绍 5G CPE 将5G信号转换为Wi-Fi或有线信号, 其由5G基带芯片、主控处理器、WIFI、电源、天线、结构等多个部件组成。5G基带: 这是5G CPE中最核心的组件,负责接收和解码来自5G基站的信号,然后将这些数据转换成用户设备可以使用的格式。采用了先进的5G芯片…

微服务-seata分布式事务

1.简述 1.1.什么是分布式事务 事务&#xff1a;是应用程序中一系列严密的操作&#xff0c;所有操作必须成功完成&#xff0c;要么全部失败&#xff0c;ACID 特性。本地事务&#xff1a;关系型数据库中,由一组SQL组成的一个执行单元,该单元要么整体成功,要么整体失败&#xff…

flyway执行sql遇到变量执行报错解决

前两天在公司使用flyway工具执行sql时&#xff0c;开发写的sql里面有变量&#xff0c;于是这个flyway工具不识别这个变量直接报错&#xff0c;不接着往下执行了。报错信息如下&#xff1a; flyway工具执行sql报错 information: No value provided for placeholder: ${ep1} 于是…

k8s 为什么需要Pod?

Pod&#xff0c;是 Kubernetes 项目中最小的 API 对象&#xff0c;更加专业的说&#xff0c;Pod&#xff0c;是 Kubernetes 项目的原子调度单位。 Pod 是 Kubernetes 里的原子调度单位。这就意味着&#xff0c;Kubernetes 项目的调度器&#xff0c;是统一按照 Pod 而非容器的资…

IDEA 鼠标悬浮显示方法注释 javaDoc 及配置遇到的问题

方法详情&#xff1a; 鼠标悬浮时的效果&#xff1a; 设置方法&#xff1a; File -> Settings -> Editor -> Code Editing -> Quick Documentation,勾选红框中的选项 可能会遇到的问题&#xff1a; 如果不能选中&#xff0c;如下图 把下图的位置的选中项取消掉 选…

vscode CMakeLists中对opencv eigen的引用方法

CMakeLists.txt 项目模式&#xff08;只有一个main函数入口&#xff09; cmake_minimum_required(VERSION 3.5)project(vsin01 VERSION 0.1 LANGUAGES CXX)set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON)set(OpenCV_DIR G:/MinGW_Opencv/opencv4.10/opencv…

cocos creator接入字节跳动抖音小游戏JSAPI敏感词检测(进行文字输入,但输入敏感词后没有替换为*号)

今天更新了某个抖音小游戏的版本&#xff0c;增加了部分剧情&#xff0c;半天过后一条短信审核未通过&#xff0c;emmm…抖音总是能给开发者惊喜…打开电脑看看这次又整什么幺蛾子… 首先是一脸懵逼&#xff0c;后端早已接入了官方的内容安全检测能力了&#xff08;https://de…

基于单片机的中小水电站闸门控制系统(论文+源码)

1 系统总体设计 本次基于单片机的中小水电站闸门控制系统的设计&#xff0c;整体结构如图2.1所示。整个系统包括stm32单片机最小系统&#xff0c;电源&#xff0c;液晶&#xff0c;电机&#xff0c;闸门开度检测模块&#xff0c;水位检测模块&#xff0c;温度传感器&#xff0…

证明网络中的流形成一个凸集

证明网络中的流形成一个凸集 步骤1&#xff1a;定义和符号步骤2&#xff1a;线性组合步骤3&#xff1a;验证容量限制步骤4&#xff1a;验证流量守恒结论示例代码&#xff08;C语言&#xff09; 在网络流理论中&#xff0c;一个流 f f f 是定义在网络图的边集上的一种函数&…

【贪心算法】贪心算法五

贪心算法五 1.跳跃游戏 II2.跳跃游戏3.加油站3.单调递增的数字 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1.跳跃游戏 II 题目链接&…

计算机毕业设计Python医疗问答系统 医疗可视化 BERT+LSTM+CRF深度学习识别模型 机器学习 深度学习 爬虫 知识图谱 人工智能 大数据毕业设计

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…