wangchao.org
添加收藏 | 博客
 
购物视频论坛IT业界自然风光美女图片王朝网络小游戏BT下载生活百科编程设计手机图铃小说
 
笑话 | 水库 | 娱乐 | 体育 | 英语 | 宠物 | 美食 | 旅游 | 养生 | 手机 | 数码 | 汽车 | 珠宝 | 美容 | 装修 | 厨房 | 科普 | 动物 | 植物 | 影音 | 百科 | 知道 | 词典
  
 
 您好! 您现在位于: 王朝网络 → 编程设计 → 《ORACLE DBA常用SQL脚本工具->管理篇(1)返回上一页 
 
1楼 

ORACLE DBA常用SQL脚本工具->管理篇(1)

  网上购物、在线购物、购物搜索 欢迎光临本站购买图书、影视、音乐、数码、百货,手机等商品。

  
  在较长时间的与Oracle的交往中,每个DBA非凡是一些大侠都有各种各样的完成各种用途的脚本工具,这样很方便的很快捷的完成了日常的工作,下面把我常用的一部分展现给大家,此篇主要侧重于数据库治理,这些脚本都经过严格测试。
  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
  (待续)

   在较长时间的与Oracle的交往中,每个DBA非凡是一些大侠都有各种各样的完成各种用途的脚本工具,这样很方便的很快捷的完成了日常的工作,下面把我常用的一部分展现给大家,此篇主要侧重于数据库治理,这些脚本都经过严格测试。 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 (待续)

 
标签: amp  DBA  gt  ORACLE  SQL  工具  常用  管理  脚本  
 
您可以将本页贴到其他网站
UBB代码HTML代码
 
 
 
 
 
 
 更多内容
 ·ORACLE DATE和TIMESTAMP数据类型 ·ORACLE常用第三方软件介绍 ·ORACLE坏块(ORA-01578)处理方法 ·ORACLE DATE和TIMESTAMP数据类型
 ·[HOWTO]ORACLE中如何实现ASC字符 ·如何在ORACLE中實現人民幣大寫的 ·在DB2中如何實現Oracle的相關功能 ·在DB2中如何實現Oracle的相關功能
 ·ORACLE9I中外部表的使用 ·ORACLE 服務器的配置及優化 ·在DB2中如何實現Oracle的相關功能 ·ORA-01591故障处理
 ·Oracle开发人员 JAVA存储过程 ·Oracle的EXP/IMP版本支持列表 ·Oracle已经过时? ·生僻的SQLPLUS命令
 ·在ORalce 中,怎么判断两个时间段 ·Oradim工具的用法[收藏] ·Oracle数据库的转移与升级 ·oracle 转换函数的使用
 ·PL/SQL工具连接ORALCE数据库的方 ·在Oracle中如何利用Rowid查找和删 ·修改oracle的数据文件 ·某人的oracle9i学习笔记,与大家
 
 
最新评论  点此查看所有评论
 
 
 
 
发表评论(支持UBB码)


验证码:  
 
 
 
© 2005- 王朝网络 版权所有