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

首頁 > 數據庫 > Oracle > 正文

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

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

  在較長時間的與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
  
  (待續)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 吐鲁番市| 蒲江县| 筠连县| 商河县| 同江市| 通山县| 米泉市| 醴陵市| 陆丰市| 英吉沙县| 乐亭县| 海盐县| 团风县| 焦作市| 滁州市| 璧山县| 丘北县| 扶绥县| 呼玛县| 永昌县| 沂水县| 南和县| 饶平县| 托克逊县| 阳山县| 西乌珠穆沁旗| 永康市| 嘉鱼县| 封丘县| 太仆寺旗| 南昌市| 上饶县| 高唐县| 湖州市| 乌苏市| 营山县| 保靖县| 呼和浩特市| 留坝县| 灵山县| 冀州市|