監控oracle的運行狀況

以下爲在優化過程中需要監視的一些SQL和查看一些數據庫狀態的用例語句.

1:數據庫鏈接的備份腳本.

 select '--'||CHR(10)||'-- Owner is ' || U.NAME||CHR(10)||'-- DB Link is'|| L.NAME||CHR(10)||'--'||CHR(10)||'create '||DECODE(U.NAME,'PUBLIC','public')||' database link '||CHR(10)||DECODE(U.NAME,'PUBLIC',Null, U.NAME||'.')|| L.NAME||chr(10)||'connect to ' || L.USERID || ' identified by'''||L.PASSWORD||''' using ''' || L.host || ''''||chr(10)||';' TEXT from sys.link$ L,sys.user$ U where L.OWNER# = U.USER#;


 

2:監控表空間的I/O 比例:
select df.tablespace_name name,df.file_name "file",f.phyrds pyr,f.phyblkrd pbr,f.phywrts pyw,
f.phyblkwrt pbw
from v$filestat f,dba_data_files df
where f.file#=df.file_id

3.在某個用戶下找所有的索引:
select user_indexes.table_name, user_indexes.index_name,uniqueness, column_name
from user_ind_columns, user_indexes
where user_ind_columns.index_name = user_indexes.index_name
and user_ind_columns.table_name = user_indexes.table_name
order by user_indexes.table_type, user_indexes.table_name,
user_indexes.index_name, column_position;

4. 監控 SGA 中字典緩衝區的命中率
select parameter, gets,Getmisses , getmisses/(gets+getmisses)*100 "miss ratio",
(1-(sum(getmisses)/ (sum(gets)+sum(getmisses))))*100 "Hit ratio"
from v$rowcache
where gets+getmisses <>0
group by parameter, gets, getmisses;

5. 監控 SGA 中共享緩存區的命中率,應該小於1%
select sum(pins) "Total Pins", sum(reloads) "Total Reloads",
sum(reloads)/sum(pins) *100 libcache
from v$librarycache;

select sum(pinhits-reloads)/sum(pins) "hit radio",sum(reloads)/sum(pins) "reload percent"
from v$librarycache;

6: 監控 SGA 中重做日誌緩存區的命中率,應該小於1%
SELECT name, gets, misses, immediate_gets, immediate_misses,
Decode(gets,0,0,misses/gets*100) ratio1,
Decode(immediate_gets+immediate_misses,0,0,
immediate_misses/(immediate_gets+immediate_misses)*100) ratio2
FROM v$latch WHERE name IN ('redo allocation', 'redo copy');

7. 監控當前數據庫誰在運行什麼SQL語句
SELECT osuser, username, sql_text from v$session a, v$sqltext b
where a.sql_address =b.address order by address, piece;

8:獲得客戶端主機信息
SELECT
SYS_CONTEXT('USERENV','TERMINAL') TERMINAL,
SYS_CONTEXT('USERENV','HOST') HOST,
SYS_CONTEXT('USERENV','OS_USER') OS_USER,
SYS_CONTEXT('USERENV','IP_ADDRESS') IP_ADDRESS
FROM DUAL

9:通過這個查詢語句來判斷, 還需要多久, 該session才能夠be killed(斷開).
select a.sid sessionId,d.spid os_id,a.username,a.terminal,c.name,b.xidslot,b.xidsqn,b.used_ublk,b.used_urec,b.log_io,b.phy_io,b.cr_get,b.cr_change
from v$session a,v$transaction b,v$rollname c,v$process d
where a.taddr = b.addr
and b.xidusn = c.usn
and a.paddr = d.addr;

10:用v$session_longops跟蹤DDL語句;
select * from v$session_longops來查看運行時間很長的DDL和DML語句的會話或一個特定的DDL語句已
經完成了多少以及任何運行時間很長的操作使用了多長的時間。

11、查詢有無死鎖
select username,lockwait,status,machine,program from v$session where sid in
(select session_id from v$locked_object);


12、查詢被死鎖語句
select sql_text from v$sql where hash_value in
(select sql_hash_value from v$session where sid in
(select session_id from v$locked_object));


13、查詢死鎖進程
SELECT s.username,l.OBJECT_ID,l.SESSION_ID,s.SERIAL#,
l.ORACLE_USERNAME,l.OS_USER_NAME,l.PROCESS
FROM V$LOCKED_OBJECT l,V$SESSION S WHERE l.SESSION_ID=S.SID;

14、kill進程
alter system kill session 'sid,serial#';---(其中sid=l.session_id)

15、查找 SCN , Time對應關係:
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss'), to_char(DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER) AS SCN from dual;


16、通過時間flashback query數據:
SELECT * FROM xzsp.t_wf_eng_ins AS OF TIMESTAMP TO_TIMESTAMP('2010-09-30 13:55:55', 'YYYY-MM-DD HH24:MI:SS');

17、通過SCN 閃回數據:
SELECT * FROM xzsp.t_wf_eng_ins AS OF SCN 11321795018821;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章