如何编写一键统计数据库临时表空间和阻塞lock信息的Shell脚本

技术如何编写一键统计数据库临时表空间和阻塞lock信息的Shell脚本这篇文章给大家介绍如何编写一键统计数据库临时表空间和阻塞lock信息的Shell脚本,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助

这篇文章给大家介绍如何编写一键统计数据库临时表空间和阻塞锁信息的壳脚本,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

今天主要分享一下两个壳脚本,主要是为了查看数据库的临时表空间和阻塞锁信息,下面一起来看看吧~

数据库连接脚本

对数据库登录详细信息注册表使用脚本settdb.sh

#!/bin/bash tmp _ username=$ SH _ USERNAMEtmp _ passwortmp _ DB _ SID=$ SH _ DB _ SID #检查$ 1和TIF[[-z $ 1]]| | |[-z $ 2]]:neecho ' * * * * * * * * * * * * * * * * * * * * * * * echo ' warn :用户名和密码需要!echo ' * * * * * * * * * * * * * * * * * * * * * * * * * * * * *退出IIF[[-z $ 3]][-z $ ORACLE _ SID]];回声“* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *回声”警告:此处已启用!" echo ' * * * * * * * * * * * * * exit fish _ USERNAME=' echo ' $ 1 ' | tr '[A-Z]'[A-Z]' ` SH _ PASSWORD=$ 2 echo ' * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *如果[[-Z $ 3]]然后使用defaultinstance : ' $ ORACLE _ SideCho '将SH _ DB _ SID=$ ORACLE _ SIDecho。 elsesh _ DB _ SID=' echo ' $ 3 ' | tr '[A]新实例" $SH_DB_SID "已连接" echo " * * * * * * * * * * * * * * * * * * * * * * exitfiexporth _ USERNAMEexportSH _ DB _ SID=$ SH _ DB _ sidexporth _ PASSWORD=$ SH _ PASSWORDexportDB _ CONN _ STR=$ SH _ USERNAME/$ SH _ PASSWORD # echo $ DB _ CONN _ strlistil

e=`pwd`/listdb Num=`echo show user | $ORACLE_HOME/bin/sqlplus -s $DB_CONN_STR@$SH_DB_SID| grep -i 'USER ' | wc -l` if [ $Num -gt 0 ]  then  ## ok - instance is up  echo 'Instance '$SH_DB_SID 'has been connected'  echo -e '--' `date`'-- \n--'$SH_USERNAME@$SH_DB_SID 'has been connected --\n' >> listdb  echo '***********************************************'  echo 'Initalize DB login details registry OK!'  echo 'Now you can Execution script~'  echo '***********************************************'  $SHELL    else  ## inst is inaccessible   echo Instance: $SH_DB_SID Is Invalid Or UserName/PassWord Is Wrong   echo '***********************************************'  exit  fi del_length=3 tmp_txt=$(sed -n '$=' listdb)  echo '***********************************************' echo '********* ' $SH_USERNAME'@'$SH_DB_SID '**********' echo '***********************************************' curr_len=`cat $listfile|wc -l` if [ $curr_len -gt $del_length ]; then echo ' There Are Below Sessions Still Alive ' echo '***********************************************' fi sed $((${tmp_txt}-${del_length}+1)),${tmp_txt}d $listfile | tee tmp_listfile mv tmp_listfile $listfile

输出:./settdb.sh 用户名 用户密码

如何编写一键统计数据库临时表空间和阻塞lock信息的Shell脚本

showtsps.sh

#!/bin/bash echo "==================================================查看数据库临时表空间=================================================================" sqlplus -s $DB_CONN_STR@$SH_DB_SID <<EOF set echo off heading on underline on; column inst_num heading "Inst Num" new_value inst_num format 99999; column inst_name heading "Instance" new_value inst_name format a12; column db_name heading "DB Name" new_value db_name format a12; column dbid heading "DB Id" new_value dbid format 9999999999 just c;  prompt prompt Current Instance prompt ~~~~~~~~~~~~~~~~  select d.dbid dbid  , d.name db_name  , i.instance_number inst_num  , i.instance_name inst_name  from v\$database d,  v\$instance i;   set term on feedback off lines 130 pagesize 999 tab off trims on column MB format 999,999,999 heading "Total MB" column free format 9,999,999 heading "Free MB" column used format 99,999,999 heading "Used MB" column Largest format 999,999 heading "LrgstMB" column tablespace_name format a20 heading "Tablespace" column status format a3 truncated column max_extents format 99999999999 heading "MaxExt" col extent_management for a1 trunc head "M" col allocation_type for a1 trunc head "A" col Ext_Size for a4 trunc head "Init" column pfree format a3 trunc heading "%Fr"  break on report compute sum of MB on report compute sum of free on report compute sum of used on report  select   d.tablespace_name,   decode(d.status,   'ONLINE', 'OLN',  'READ ONLY', 'R/O',  d.status) status,  d.extent_management,   decode(d.allocation_type,  'USER','',  d.allocation_type) allocation_type,  (case   when initial_extent < 1048576   then lpad(round(initial_extent/1024,0),3)||'K'   else lpad(round(initial_extent/1024/1024,0),3)||'M'   end) Ext_Size,  NVL (a.bytes / 1024 / 1024, 0) MB,  NVL (f.bytes / 1024 / 1024, 0) free,   (NVL (a.bytes / 1024 / 1024, 0) - NVL (f.bytes / 1024 / 1024, 0)) used,  NVL (l.large / 1024 / 1024, 0) largest,   d.MAX_EXTENTS ,  lpad(round((f.bytes/a.bytes)*100,0),3) pfree,  (case when round(f.bytes/a.bytes*100,0) >= 20 then ' ' else '*' end) alrt FROM sys.dba_tablespaces d,  (SELECT tablespace_name, SUM(bytes) bytes  FROM dba_data_files  GROUP BY tablespace_name) a,  (SELECT tablespace_name, SUM(bytes) bytes  FROM dba_free_space  GROUP BY tablespace_name) f,  (SELECT tablespace_name, MAX(bytes) large  FROM dba_free_space  GROUP BY tablespace_name) l WHERE d.tablespace_name = a.tablespace_name(+)  AND d.tablespace_name = f.tablespace_name(+)  AND d.tablespace_name = l.tablespace_name(+)  AND NOT (d.extent_management LIKE 'LOCAL' AND d.contents LIKE 'TEMPORARY') UNION ALL select   d.tablespace_name,   decode(d.status,   'ONLINE', 'OLN',  'READ ONLY', 'R/O',  d.status) status,  d.extent_management,   decode(d.allocation_type,  'UNIFORM','U',  'SYSTEM','A',  'USER','',  d.allocation_type) allocation_type,  (case   when initial_extent < 1048576   then lpad(round(initial_extent/1024,0),3)||'K'   else lpad(round(initial_extent/1024/1024,0),3)||'M'   end) Ext_Size,  NVL (a.bytes / 1024 / 1024, 0) MB,  (NVL (a.bytes / 1024 / 1024, 0) - NVL (t.bytes / 1024 / 1024, 0)) free,  NVL (t.bytes / 1024 / 1024, 0) used,   NVL (l.large / 1024 / 1024, 0) largest,   d.MAX_EXTENTS ,  lpad(round(nvl(((a.bytes-t.bytes)/NVL(a.bytes,0))*100,100),0),3) pfree,  (case when nvl(round(((a.bytes-t.bytes)/NVL(a.bytes,0))*100,0),100) >= 20 then ' ' else '*' end) alrt FROM sys.dba_tablespaces d,  (SELECT tablespace_name, SUM(bytes) bytes  FROM dba_temp_files  GROUP BY tablespace_name order by tablespace_name) a,  (SELECT tablespace_name, SUM(bytes_used ) bytes  FROM v\$temp_extent_pool  GROUP BY tablespace_name) t,  (SELECT tablespace_name, MAX(bytes_cached) large  FROM v\$temp_extent_pool  GROUP BY tablespace_name order by tablespace_name) l WHERE d.tablespace_name = a.tablespace_name(+)  AND d.tablespace_name = t.tablespace_name(+)  AND d.tablespace_name = l.tablespace_name(+)  AND d.extent_management LIKE 'LOCAL'  AND d.contents LIKE 'TEMPORARY'  ORDER by 1 / prompt exit EOF

如何编写一键统计数据库临时表空间和阻塞lock信息的Shell脚本

输出:./showtsps.sh

如何编写一键统计数据库临时表空间和阻塞lock信息的Shell脚本

showlock.sh

这里主要是查看阻塞lock信息,脚本内容如下:

#!/bin/bash sqlplus -S $DB_CONN_STR@$SH_DB_SID <<EOF  set pages 500 set feedback off set verify off  set echo on set linesize 1000 col object_name format a25 col osuser format a10 col machine format a12 col program format a20 --col object_type format a10 col state format a10 col status format a10 col oracle_username format a12 col sid_serial format a12 col sec_wait format 99999999 col lock_type format a5 col mode_held format a10  prompt Current Locks prompt ------------------------------------------------------------------------------------------------------  select ses.sid||','||ses.serial# sid_serial,loc.oracle_username,object_name, --object_type, ses.LOGON_TIME,ses.SECONDS_IN_WAIT sec_wait,ses.osuser,ses.machine,ses.program,ses.state,ses.status,  decode(d.type,  'MR', 'Media Recovery',  'RT', 'Redo Thread',  'UN', 'User Name',  'TX', 'Transaction',  'TM', 'DML',  'UL', 'PL/SQL User Lock',  'DX', 'Distrib Xaction',  'CF', 'Control File',  'IS', 'Instance State',  'FS', 'File Set',  'IR', 'Instance Recovery',  'ST', 'Disk Space Transaction',  'TS', 'Temp Segment',  'IV', 'Library Cache Invalidation',  'LS', 'Log Start or Switch',  'RW', 'Row Wait',  'SQ', 'Sequence Number',  'TE', 'Extend Table',  'TT', 'Temp Table',  d.type) lock_type,  decode(d.lmode,  0, 'None', /* Mon Lock equivalent */  1, 'Null', /* N */  2, 'Row-S (SS)', /* L */  3, 'Row-X (SX)', /* R */  4, 'Share', /* S */  5, 'S/Row-X (SSX)', /* C */  6, 'Exclusive', /* X */  to_char(d.lmode)) mode_held  from v\$locked_object loc,v\$session ses,dba_objects obj,v\$lock d  where loc.object_id=obj.object_id   and loc.session_id=ses.sid  and obj.object_id=d.id1  and ses.sid=d.sid  order by oracle_username,seconds_in_wait desc ; set head off  SELECT 'There are also '||count(*)||' transaction locks' FROM v\$transaction_enqueue; prompt ------------------------------------------------------------------------------------------------------  set head on set linesize 1000 pagesize 1000 col 进程SID for 99999 trunc  col 锁类型 format a10 col SQL语句 format a60 col 等待事件 format a20 col 锁时间 format a20 col 锁角色 format a15 col 阻塞会话SID format a30   prompt prompt Blocking Session Details prompt ------------------------------------------------------------------------------------------------------  SELECT mm.inst_id "实例ID",   mm.sid "进程SID",   mm.TYPE "锁类型",   mm.id1 "事务号ID1",   mm.id2 "事务号ID2",   LPAD(TRUNC(mm.ctime / 60 / 60), 3) || ' Hour ' || LPAD(TO_CHAR(TRUNC(mm.ctime / 60) - TRUNC(mm.ctime / 60 / 60) * 60, 'fm09'), 2) || ' Min ' || LPAD(TO_CHAR(mm.ctime - TRUNC(mm.ctime / 60) * 60, 'fm09'), 2) || ' Sec'  "锁时间", CASE WHEN mm.block = 1   AND mm.lmode != 0 THEN 'holder'   WHEN mm.block = 0   AND mm.request != 0 THEN 'waiter'   ELSE NULL END "锁角色",   CASE WHEN ee.blocking_session IS NOT NULL THEN 'waiting for SID ' || ee.blocking_session   ELSE NULL END "阻塞会话SID",   dd.sql_text "SQL语句",   cc.event "等待事件"  FROM gv\$lock mm,   gv\$session ee,   gv\$sqlarea dd,   gv\$session_wait cc   WHERE mm.sid IN (SELECT nn.sid   FROM (SELECT tt.*,   COUNT(1) OVER (PARTITION BY tt.TYPE,   tt.id1,   tt.id2) cnt, MAX(tt.lmode) OVER (PARTITION BY tt.TYPE,   tt.id1,   tt.id2) lmod_flag, MAX(tt.request) OVER (PARTITION BY tt.TYPE,   tt.id1,   tt.id2) request_flag   FROM gv\$lock tt) nn   WHERE nn.cnt > 1   AND nn.lmod_flag != 0   AND nn.request_flag != 0)   AND mm.sid = ee.sid (+)   AND ee.sql_id = dd.sql_id (+)   AND mm.sid = cc.sid (+)   AND ((mm.block = 1   AND mm.lmode != 0)   OR (mm.block = 0   AND mm.request != 0))   ORDER BY mm.TYPE, mm.id1, mm.id2, mm.lmode DESC,   mm.ctime DESC;  exit EOF

如何编写一键统计数据库临时表空间和阻塞lock信息的Shell脚本

输出:./showlock.sh

如何编写一键统计数据库临时表空间和阻塞lock信息的Shell脚本

关于如何编写一键统计数据库临时表空间和阻塞lock信息的Shell脚本就分享到这里了,希望

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/125345.html

(0)

相关推荐

  • 如何快速了解Https

    技术如何快速了解Https如何快速了解Https,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。HTTPS简介HTTPS:https是http

    攻略 2021年11月12日
  • 十二节气顺口溜,二十四节气的顺口溜怎么说

    技术十二节气顺口溜,二十四节气的顺口溜怎么说《二十四节气歌》 春雨惊春清谷天十二节气顺口溜,夏满芒夏暑相连, 秋处露秋寒霜降,冬雪雪冬小大寒。 二十四节气,是中国古代人们用来分辨节气的时间及指导农事的一种方法。二十四节气

    生活 2021年10月21日
  • linux中find命令、正则表达式、三剑客之grep基本使用

    技术linux中find命令、正则表达式、三剑客之grep基本使用 linux中find命令、正则表达式、三剑客之grep基本使用一、find命令的基本使用find 命令主要用于查找目录和文件,可以指定

    礼包 2021年12月21日
  • 40种聚会小游戏,聚会适合两人一组玩的小游戏

    技术40种聚会小游戏,聚会适合两人一组玩的小游戏快乐大本营的,谁是卧底40种聚会小游戏!还有考验默契的,一个人画一个人猜,or一个人看词比动作,然后不说话的那种,叫别人猜是什么
    瞎子背瘸子
    目的:沟通配合能力,活跃气氛

    生活 2021年10月31日
  • oracle rac环境安装目录权限被修改乱了怎么办

    技术oracle rac环境安装目录权限被修改乱了怎么办这篇文章将为大家详细讲解有关oracle rac环境安装目录权限被修改乱了怎么办,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在

    攻略 2021年12月4日
  • Python中选择结构是怎么样的

    技术Python中选择结构是怎么样的这篇文章主要介绍了Python中选择结构是怎么样的,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、选择结构通过判断条

    攻略 2021年10月31日