ORACLE DBA常用SQL指令碼工具->管理篇(1) (轉)
在較長時間的與的交往中,每個a特別是一些大俠都有各種各樣的完成各種用途的指令碼工具,這樣很方便的很快捷的完成了日常的工作,下面把我常用的一部分展現給大家,此篇主要側重於管理,這些指令碼都經過嚴格測試。
1、 表空間統計:namespace prefix = o ns = "urn:schemas--com::office" />
A、 指令碼說明:
這是我最常用的一個指令碼,用它可以顯示出資料庫中所有表空間的狀態,如表空間的大小、已使用空間、使用的百分比、空閒空間數及現在表空間的最大塊是多大。
B、指令碼原文:
upper(f.tablespace_name) "表空間名",
d.Tot_gte_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=
And segment_name=
GROUP BY owner,segment_name
ORDER BY 3 DESC;
4、 檢視資料庫中的表鎖
A、 指令碼說明:
這方面的語句的樣式是很多的,各式一樣,不過我認為這個是最實用的,不信你就用一下,無需多說,鎖是每個DBA一定都涉及過的內容,當你相知道某個表被哪個session鎖定了,你就用到了這個指令碼。
B、指令碼原文:
SELECT A.OWNER,
A._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=
And object
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#,
_address,
machine,
program,
tablespace,
segtype,
contents
FROM v$session se,
v$sort_usage su
WHERE se.saddr=su.session_addr
(待續)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-981634/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE DBA常用SQL指令碼工具->管理篇(zt)OracleSQL指令碼
- oracle DBA 常用監控指令碼1(轉)Oracle指令碼
- dba常用sql-1(轉)SQL
- Oracle DBA常用監控指令碼Oracle指令碼
- ORACLE DBA常用語句和指令碼Oracle指令碼
- dba常用指令碼指令碼
- ORACLE常用SQL指令碼2OracleSQL指令碼
- DBA指令碼 (1)指令碼
- Oracle DBA常用sql分享OracleSQL
- 8個DBA最常用的監控Oracle資料庫的常用shell指令碼--轉Oracle資料庫指令碼
- Oracle 效能相關常用指令碼(SQL)Oracle指令碼SQL
- dba常用sql-2(轉)SQL
- dba常用sql-3(轉)SQL
- 史上最全近百條Oracle DBA日常維護SQL指令碼指令OracleSQL指令碼
- DBA日常維護SQL指令碼SQL指令碼
- MS SQL 日常維護管理常用指令碼(下)SQL指令碼
- MS SQL 日常維護管理常用指令碼(上)SQL指令碼
- 【管理】Oracle 常用的V$ 檢視指令碼Oracle指令碼
- DBA常用SQLSQL
- oracle_ray.sh 常用的oracle sql功能指令碼OracleSQL指令碼
- Oracle資料庫DBA日常Sql列表及常用檢視(轉)Oracle資料庫SQL
- 8個DBA最常用的監控Oracle資料庫的常用shell指令碼Oracle資料庫指令碼
- 8個DBA最常用的監控Oracle資料庫的常用shell指令碼--Oracle資料庫指令碼
- GreenPlum DBA常用SQLSQL
- DBA常用資料庫管理SQL (摘錄整理)資料庫SQL
- oracle dba 的一些指令碼Oracle指令碼
- Oracle DBA常用命令 [ 轉載]Oracle
- Linux 指令篇(1) (轉)Linux
- 【LOB】Oracle Lob管理常用sqlOracleSQL
- 【BLOCK】Oracle 塊管理常用SQLBloCOracleSQL
- dba 常用維護sqlSQL
- DBA常用SQL語句SQL
- SQL指令碼生成的一些BUG(1)(轉)SQL指令碼
- DBA指令碼 (2)指令碼
- DBA指令碼 (3)指令碼
- DBA日常維護SQL指令碼_自己編寫的SQL指令碼
- DBA常用的一些SQL和檢視(轉)SQL
- [轉]監控Oracle資料庫的常用shell指令碼Oracle資料庫指令碼