主页 > 互联网  > 

快检查达梦库怎么了

快检查达梦库怎么了

扁鹊的弟弟来了 要求5分钟定位达梦数据库问题

#!/bin/bash ## content 实例个数 告警日志 实例状态 用户连接 活动会话 锁 集群状态 服务状态 磁盘空间 cpu mem 侦听及日志 ## scope 单机、DW、DSC Linux 多实例 ## example 将脚本保存为d.sh,用root用执行,例如 sh /tmp/d.sh ## ver 1.0 printf '%.s*' {1..80} echo echo "__CHECK BEGIN" `date '+%Y-%m-%d %H:%M:%S'`"__" ## cpu memory filesystem instance_name os=`uname` case $os 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%" instlist=`ps -ef|grep dm.ini|grep -v grep|awk '{print $2}' ` inst_cnt=`ps -ef|grep dm.ini|grep -v grep|awk '{print $2}' |wc -l` if [ $inst_cnt -gt 1 ]; then ps -ef|grep dms|grep -v grep|awk '{print $9}'|cut -b 6- fi errpt|head 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_ORCL2 instlist=`ps -ef|grep dm.ini|grep -v grep|awk '{print $9}'|cut -b 6- |sort` inst_cnt=`ps -ef|grep dm.ini|grep -v grep|awk '{print $2}' |wc -l` if [ $inst_cnt -gt 1 ]; then ps -ef|grep dms|grep -v grep|awk '{print $9}'|cut -b 6- |sort fi tail -5500 /var/log/messages|grep -C 5 -iE 'err|fatal|oom'|tail -20 PROFILE='.bash_profile' ;; *) echo "Unsupported OS type!" exit; esac ## 主要进程 echo ps -ef|grep dmdbms|grep -v grep ## database CMDFILE=/tmp/dm_check.sh (cat << EOF #!/bin/bash . \$HOME/$PROFILE os=\`uname\` echo "----------------------------" echo \$1 \$2 \$3 echo "----------------------------" ##登录用户及口令放到一个临时文件,例如sysdba/Dameng if [ -f '/tmp/pwdfile.tmp' ]; then sqlpwd=\`cat /tmp/pwdfile.tmp\` else sqlpwd=" /:\$1 as sysdba " fi # 20221121 dbver=\` disql -id|awk -F'-' '{print \$2}' \` ## 显示告警日志 `date +"%Y%m"` aa=\$DM_HOME/log/dm_\$3_\`date +"%Y%m"\`.log tail -5000 \$aa|grep -v INFO|grep -v libgssapi|tail -20 #disql "/:5237 as sysdba" disql -S " \$sqlpwd " <<! set linesize 200 pagesize 200 set feedback off lineshow off timing off --os配置及负载 select N_CPU cpu,TOTAL_PHY_SIZE/1024/1024/1024||'G' memory,trunc(CPU_USER_RATE,2) us,trunc(CPU_SYSTEM_RATE,2) sy, ROUND(SEND_BYTES_TOTAL /1024/1024/1024) send_gb,ROUND(RECEIVE_BYTES_TOTAL/1024/1024/1024) recv_gb, trunc(LOAD_ONE_AVERAGE,2) load1,trunc(LOAD_FIFTEEN_AVERAGE,2) load15 from v\\\$systeminfo; --实例状态 select instance_name,start_time,host_name,status\$,mode\$,BUILD_VERSION from v\\\$instance; --license select SERIES_NO,AUTHORIZED_CUSTOMER, isnull(to_char(EXPIRED_DATE),'for ever') yxq, case SERVER_SERIES when 'P' then 'Personal' when 'S' then 'Standard' when 'E' then 'Enterprise' when 'A' then 'Security' when 'D' then 'Developer' when 'C' then 'Cloud' end edition, case SERVER_type when '1' then 'Official' when '2' then 'Test' when '3' then 'Trial' end type, server_ver, case substr(CLUSTER_TYPE,1,1) when '1' then 'YES' else 'NO' end DW, case substr(CLUSTER_TYPE,2,1) when '1' then 'YES' else 'NO' end MPP, case substr(CLUSTER_TYPE,3,1) when '1' then 'YES' else 'NO' end RW, case substr(CLUSTER_TYPE,4,1) when '1' then 'YES' else 'NO' end DSC from v\\\$license; --内存分配 SELECT round((SELECT SUM(N_PAGES * (PAGE_SIZE+0.0))/1024/1024 FROM V\\\$BUFFERPOOL))||'MB' AS BUFFER_SIZE, round((SELECT SUM(TOTAL_SIZE)/1024/1024 FROM V\\\$MEM_POOL))||'MB' AS MEM_POOL, round(((SELECT SUM(N_PAGES * (PAGE_SIZE+0.0)) FROM V\\\$BUFFERPOOL)+(SELECT SUM(TOTAL_SIZE) FROM V\\\$MEM_POOL))/1024/1024/1024)||'GB' AS TOTAL_SIZE FROM DUAL; --asm磁盘组使用率 select group_name,total_mb/1024 total_gb,free_mb/1024 free_gb,round((total_mb-free_mb)/1024,1) used_gb,round((1-(free_mb+0.0)/total_mb)*100,2) used_per,au_size from v\\\$asmgroup; --表空间使用率 SELECT UPPER(F.TABLESPACE_NAME) tsname,-- "表空间名", D.TOT_GROOTTE_MB size_mb,-- "表空间大小(M)", D.TOT_GROOTTE_MB - F.TOTAL_BYTES used_mb,--"已使用空间(M)", TO_CHAR(ROUND(( D.TOT_GROOTTE_MB - F.TOTAL_BYTES ) / D.TOT_GROOTTE_MB * 100, 2), '990.99') || '%' use_percent,-- "使用比", F.TOTAL_BYTES free_mb,-- "空闲空间(M)", F.MAX_BYTES max_size -- "最大块(M)" FROM (SELECT TABLESPACE_NAME, ROUND(SUM(BYTES) / ( 1024 * 1024 ), 2) TOTAL_BYTES, ROUND(MAX(BYTES) / ( 1024 * 1024 ), 2) MAX_BYTES FROM SYS.DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) F, (SELECT DD.TABLESPACE_NAME, ROUND(SUM(DD.BYTES) / ( 1024 * 1024 ), 2) TOT_GROOTTE_MB FROM SYS.DBA_DATA_FILES DD GROUP BY DD.TABLESPACE_NAME) D WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME ORDER BY 2 DESC; --近期error select ECPT_CODE, count(0) from v\\\$runtime_err_history where err_time>sysdate-1 group by ECPT_CODE; select to_char(err_time,'yyyy-mm-dd hh24:mi:ss')err_time,SESS_ID,SESS_SEQ,ECPT_CODE,substr(ECPT_DESC,1,20)ecpt_desc,substr(SQL_TEXT,1,20)sql_txt from v\\\$runtime_err_history where err_time>sysdate-1 and rownum<11; select log_time,thread_name,level$,substr(txt,1,50) sql_txt from v\\\$INSTANCE_LOG_HISTORY where LEVEL$ in ('ERROR','FATAL') and LOG_TIME>sysdate-10 and rownum<11; --会话个数 select INSTANCE_NAME,user_name,count(0) cnt from gv\\\$sessions group by INSTANCE_NAME,user_name order by 1,2; --当前执行超过2秒的会话 SELECT* FROM (SELECT SESS_ID, user_name,DATEDIFF(SS,LAST_RECV_TIME,SYSDATE) Y_EXETIME, substr(SF_GET_SESSION_SQL(SESS_ID),1,100) sql_txt,CLNT_IP FROM V\\\$SESSIONS WHERE STATE='ACTIVE' and sess_id<> SYS_CONTEXT('USERENV','SID') ) WHERE Y_EXETIME>=2 ; --慢sql select top 10 sess_id,sql_id,substr(sql_text,1,50)sql_txt,round(exec_time/1000) miao,n_runs, finish_time from V\\\$LONG_EXEC_SQLS order by exec_time desc; --查被阻塞会话 SELECT DS.SESS_ID blked_sid, substr(DS.SQL_TEXT,1,30) blked_sql, DS.TRX_ID blked_trx, (CASE L.LTYPE WHEN 'OBJECT' THEN '对象锁' WHEN 'TID' THEN '事务锁' END CASE ) lx, to_char(DS.CREATE_TIME,'yyyy-mm-dd hh24:mi:ss') create_time, SS.SESS_ID blocker_sid, --substr(SS.SQL_TEXT,1,30) blocker_sql, --SS. CLNT_HOST blocker, L.TID blocker_trx FROM V\\\$LOCK L LEFT JOIN V\\\$SESSIONS DS ON DS.TRX_ID = L.TRX_ID LEFT JOIN V\\\$SESSIONS SS ON SS.TRX_ID = L.TID WHERE L.BLOCKED = 1; --单个会话内存使用总量 SELECT top 10 A.CREATOR ,b.sess_id,b.user_name, substr(B.SQL_TEXT ,1,40) sql_txt, round(SUM(A.TOTAL_SIZE)/1024/1024) TOTAL_MB,--当前总量(包括扩展) round(SUM(A.DATA_SIZE)/1024/1024) DATA_MB--实际使用量 FROM V\\\$MEM_POOL A, V\\\$SESSIONS B WHERE A.CREATOR=B.THRD_ID GROUP BY A.CREATOR, b.sess_id,b.user_name, (B.SQL_TEXT ,1,60) ORDER BY TOTAL_MB DESC; --dg delay select SEQNO, apply_cmt_time, last_cmt_time , timestampdiff(sql_tsi_frac_second, apply_cmt_time, last_cmt_time) diff from v\\\$rapply_stat; exit ! getrole() { disql -S " \$sqlpwd " <<! set HEA off set feedback off set echo off set time off set timing off select MODE$ from v\\\$instance; exit ! } std_delay() { disql -S " \$sqlpwd "<<! select SEQNO, apply_cmt_time, last_cmt_time , timestampdiff(sql_tsi_frac_second, apply_cmt_time, last_cmt_time) diff from v\\\$rapply_stat; exit ! } #std_delay() EOF )>$CMDFILE dbuser=`ps -ef|grep dmserver|grep -v grep |awk '{print $1}'|head -1` for sid in $instlist do #获取端口 port=`grep -w PORT_NUM $sid|awk -F'=' '{print $2}'|awk -F'#' '{print $1}'|awk 'gsub(/^ *| *$/,"")'` inst=`grep -w INSTANCE_NAME $sid|awk -F'=' '{print $2}'|awk -F'#' '{print $1}'|awk 'gsub(/^ *| *$/,"")'` #echo $port su - $dbuser "-c /bin/bash $CMDFILE $port $sid $inst" echo done #w #vmstat 3 3 printf '%.s*' {1..80} echo echo "__CHECK END" `date '+%Y-%m-%d %H:%M:%S'`"__" exit 0

看看效果 我觉得,没什么问题,除了锁表。

标签:

快检查达梦库怎么了由讯客互联互联网栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“快检查达梦库怎么了