国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > Oracle > 正文

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

2024-08-29 13:30:35
字體:
來源:轉載
供稿:網友

在較長時間的與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 

 (待續)

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 昌都县| 承德市| 灌阳县| 勐海县| 大城县| 平顶山市| 东光县| 抚松县| 竹溪县| 正安县| 静海县| 泸州市| 凤庆县| 新和县| 大宁县| 忻州市| 宁晋县| 吉隆县| 山东省| 大埔区| 长汀县| 册亨县| 胶州市| 张家界市| 三门县| 雷波县| 新竹市| 山东| 兴和县| 闵行区| 兖州市| 伊宁市| 靖江市| 亳州市| 广元市| 平罗县| 江西省| 宁蒗| 汉川市| 屏东市| 福州市|