ORACLE 常用管理脚本

1、 表空间统计

 

  A、  脚本说明:

 

  这是我最常用的一个脚本,用它可以显示出数据库中所有表空间的状态,如表空间的大小、已使用空间、使用的百分比、空闲空间数及现在表空间的最大块是多大。

 

  B、脚本原文:

 

  SELECT upper(f.tablespace_name) "表空间名",

 

  d.Tot_grootte_Mb "表空间大小(M)",

 

  d.Tot_grootte_Mb - f.total_bytes "已使用空间(M)",

 

  to_char(round((d.Tot_grootte_Mb - f.total_bytes) / d.Tot_grootte_Mb * 100,2),'990.99') "使用比",

 

  f.total_bytes "空闲空间(M)",

 

  f.max_bytes "最大块(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 4 DESC;

 

  2、 查看无法扩展的段

 

  A、 脚本说明:

 

  ORACLE对一个段比如表段或索引无法扩展时,取决的并不是表空间中剩余的空间是多少,而是取于这些剩余空间中最大的块是否够表比索引的“NEXT”值大,所以有时一个表空间剩余几个G的空闲空间,在你使用时ORACLE还是提示某个表或索引无法扩展,就是由于这一点,这时说明空间的碎片太多了。这个脚本是找出无法扩展的段的一些信息。

 

  B、脚本原文:

 

  SELECT segment_name,

 

  segment_type,

 

  owner,

 

  a.tablespace_name "tablespacename",

 

  initial_extent/1024 "inital_extent(K)",

 

  next_extent/1024 "next_extent(K)",

 

  pct_increase,

 

  b.bytes/1024 "tablespace max free space(K)",

 

  b.sum_bytes/1024 "tablespace total free space(K)"

 

  FROM dba_segments a,

 

  (SELECT tablespace_name,MAX(bytes) bytes,SUM(bytes) sum_bytes FROM dba_free_space GROUP BY tablespace_name) b

 

  WHERE a.tablespace_name=b.tablespace_name

 

  AND next_extent>b.bytes

 

  ORDER BY 4,3,1;

 

  3、 查看段(表段、索引段)所使用空间的大小

 

  A、 脚本说明:

 

  有时你可能想知道一个表或一个索引占用多少M的空间,这个脚本就是满足你的要求的,把<>中的内容替换一下就可以了。

 

  B、脚本原文:

 

  SELECT owner,

 

  segment_name,

 

  SUM(bytes)/1024/1024

 

  FROM dba_segments

 

  WHERE owner=<segment owner>

 

  And segment_name=<your table or index name>

 

  GROUP BY owner,segment_name

 

  ORDER BY 3 DESC;

 

  4、 查看数据库中的表锁

 

  A、 脚本说明:

 

  这方面的语句的样式是很多的,各式一样,不过我认为这个是最实用的,不信你就用一下,无需多说,锁是每个DBA一定都涉及过的内容,当你相知道某个表被哪个session锁定了,你就用到了这个脚本。

 

  B、脚本原文:

 

  SELECT A.OWNER,

 

  A.OBJECT_NAME,

 

  B.XIDUSN,

 

  B.XIDSLOT,

 

  B.XIDSQN,

 

  B.SESSION_ID,

 

  B.ORACLE_USERNAME,

 

  B.OS_USER_NAME,

 

  B.PROCESS,

 

  B.LOCKED_MODE,

 

  C.MACHINE,

 

  C.STATUS,

 

  C.SERVER,

 

  C.SID,

 

  C.SERIAL#,

 

  C.PROGRAM

 

  FROM ALL_OBJECTS A,

 

  V$LOCKED_OBJECT B,

 

  SYS.GV_$SESSION C

 

  WHERE ( A.OBJECT_ID = B.OBJECT_ID )

 

  AND (B.PROCESS = C.PROCESS )

 

  -- AND

 

  ORDER BY 1,2  ;

 

  5、 处理存储过程被锁

 

  A、 脚本说明:

 

  实际过程中可能你要重新编译某个存储过程理总是处于等待状态,最后会报无法锁定对象,这时你就可以用这个脚本找到锁定过程的那个sid,需要注意的是查v$access这个视图本来就很慢,需要一些布耐心。

 

  B、脚本原文:

 

  SELECT * FROM V$ACCESS

 

  WHERE owner=<object owner>

 

  And object<procedure name>

 

  6、 查看回滚段状态

 

  A、 脚本说明

 

  这也是DBA经常使用的脚本,因为回滚段是online还是full是他们的关怀之列嘛

 

  B、SELECT a.segment_name,b.status

 

  FROM Dba_Rollback_Segs a,

 

  v$rollstat b

 

  WHERE a.segment_id=b.usn

 

  ORDER BY 2

 

  7、 看哪些session正在使用哪些回滚段

 

  A、 脚本说明:

 

  当你发现一个回滚段处理full状态,你想使它变回online状态,这时你便会用alter rollback segment rbs_seg_name shrink,可很多时侯确shrink不回来,主要是由于某个session在用,这时你就用到了这个脚本,找到了sid的serial#余下的事就不用我说了吧。

 

  B、脚本原文

 

  SELECT r.name 回滚段名,

 

  s.sid,

 

  s.serial#,

 

  s.username 用户名,

 

  s.status,

 

  t.cr_get,

 

  t.phy_io,

 

  t.used_ublk,

 

  t.noundo,

 

  substr(s.program, 1, 78) 操作程序

 

  FROM  sys.v_$session s,sys.v_$transaction t,sys.v_$rollname r

 

  WHERE t.addr = s.taddr and t.xidusn = r.usn

 

  -- AND r.NAME IN ('ZHYZ_RBS')

 

  ORDER BY t.cr_get,t.phy_io

 

  8、 查看正在使用临时段的session

 

  A、 脚本说明:

 

  许多的时侯你在查看哪些段无法扩展时,回显的结果是临时段,或你做表空间统计时发现临段表空间的可用空间几乎为0,这时按oracle的说法是你只有重新启动数据库才能回收这部分空间。实际过程中没那么复杂,使用以下这段脚本把占用临时段的session杀掉,然后用alter tablespace temp coalesce;这个语句就把temp表空间的空间回收回来了。

 

  B、 脚本原文

 

  SELECT username,

 

  sid,

 

  serial#,

 

  sql_address,

 

  machine,

 

  program,

 

  tablespace,

 

  segtype,

 

  contents

 

  FROM v$session se,

 

  v$sort_usage su

 

  WHERE se.saddr=su.session_addr

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值