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

原创 2003年08月01日 19:05:00

在较长时间的与oracle的交往中,每个DBA特别是一些大侠都有各种各样的完成各种用途的脚本工具,这样很方便的很快捷的完成了日常的工作,下面把我常用的一部分展现给大家,此篇主要侧重于数据库管理,这些脚本都经过严格测试。

 1、 表空间统计<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 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是他们的关怀之列嘛

    BSELECT 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在用,这时你就用到了这个脚本,找到了sidserial#余下的事就不用我说了吧。

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数库之PL/SQL高级篇 与 阿里dba笔试题

http://jackroomage.iteye.com/blog/406534    ---阿里巴巴公司DBA笔试题  http://blog.sina.com.cn/s/blog_5ce87d56...
  • wenzhihui_2010
  • wenzhihui_2010
  • 2014年02月21日 21:37
  • 729

Oracle中一些常用的脚本[适用DBA]

1. 监控事例的等待    select event,sum(decode(wait_Time,0,0,1)) "Prev",    sum(decode(wait_Time,0,1,0)) "Cur...
  • FlameKing
  • FlameKing
  • 2004年08月20日 17:03
  • 706

个人常用Oracle SQL优化工具(脚本)介绍(未完成)

本文主要介绍个人在工作中常用的关于SQL优化工具(脚本),主要从网络上收集,读书,MOS等,如有侵权请告知。掌握一些常用的视图,就能够根据自己需求修改脚本。...
  • u011255894
  • u011255894
  • 2016年03月27日 21:46
  • 391

Oracle DBA日常工作手册

Oracle DBA日常工作手册   概述... 2 第一章.  事前阶段... 3 一 、 日常工作-每天应做工作内容... 3 1、工作内容-日常环境监控... 3 1.1系统...
  • a15177733161
  • a15177733161
  • 2016年09月23日 18:44
  • 1058

《Oracle 12c数据库DBA入门指南 》目录

当当网页面链接:点击打开链接 点击打开链接 第1章  Oracle数据库基础知识 1.1  什么是关系数据库 1.1.1  关系数据库模型 1.1.2  关系数据模型的创始人 1.2  Oracle数...
  • brucexia
  • brucexia
  • 2015年02月10日 17:51
  • 1580

SQL Server DBA日常检查常用SQL

1、数据库 复制代码代码如下: --所有数据库的大小   exec sp_helpdb      --所有数据库的状态   select name,       ...
  • dbagaoshou
  • dbagaoshou
  • 2016年07月11日 16:28
  • 632

【SQL Server DBA】日常维护语句

数据库的日常维护,可以通过SQL Server中的维护计划来自动实现,非常方便。 那么,如何通过代码来实现呢? 1、检查数据库完整性 dbcc checkdb(test) 通过加tablo...
  • yupeigu
  • yupeigu
  • 2014年03月06日 13:11
  • 1776

ORACLE DBA 运维常用查询

数据库当前哪些ACTVIE进程 select a.CLIENT_INFO,        'alter system kill session ''' || a.sid || ',' || a.s...
  • XmallWood
  • XmallWood
  • 2013年05月06日 01:50
  • 885

Oracle主要学习资源绝对干货-DBA之路

Oracle主要学习资源绝对干货-DBA之路 1、     TomKyte Oracle的大神 Tom Kyte的网站。 https://asktom.oracle.com 很多问题都能在这里找...
  • notbaron
  • notbaron
  • 2015年09月04日 11:26
  • 33679

oracle中分区常用命令2

1.2.2. 查询分区表记录: SQL> select * from dinya_test partition(part_01); TRANSACTION_ID ITEM_ID ITEM_DESCRI...
  • wenbingcai
  • wenbingcai
  • 2007年11月06日 10:49
  • 408
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ORACLE DBA常用SQL脚本工具->管理篇(1)
举报原因:
原因补充:

(最多只允许输入30个字)