數據庫管理員平常工做中必備的sql列表sql
select NAME ,CREATED ,LOG_MODE ,數據庫
to_char(sysdate,'yyyy/mm/dd:HH24:MI') "SYS_DATE"c#
from v$database;緩存
COL PARAMETER for a40安全
COL VALUE for a30session
select * from v$option;oracle
col BANNER for a60app
select BANNER from v$version;svg
select dbid, name, log_mode from v$database;工具
col USERNAME for a20
col DEFAULT_TABLESPACE for a20
col TEMPORARY_TABLESPACE for a20
col PROFILE for a20
select USERNAME,DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE,
PROFILE,CREATED FROM dba_users;
col RESOURCE_NAME for a28
col LIMIT for a20
SELECT * from dba_profiles order by PROFILE;
COL VALUE$ for a40
SELECT name,value$ from sys.props$;
col owner for a20
col db_link for a38
col username for a20
SELECT owner,db_link,username from dba_db_links ;
col Username for a20
col Owner for a14
col Obj for a20
col Obj_Priv for a10
col Sys_Priv for a20
col Granted_Role for a22
select username "Username",
owner,
table_name "Obj",
privilege "Obj_Priv",
' ' "Sys_Priv",
' ' "Granted_Role",
1 "dummy"
from dba_users u, dba_tab_privs t
where u.username = t.grantee
and u.username = upper('&&user_name')
union
select username,
' ',
' ',
' ',
privilege,
' ',
2 "dummy"
from dba_users u, dba_sys_privs s
where u.username = s.grantee
and u.username = upper('&&user_name')
union
select username,
' ',
' ',
' ',
' ',
granted_role,
3 "dummy"
from dba_users u, dba_role_privs r
where u.username = r.grantee
and u.username = upper('&&user_name')
order by 1, 7;
col DESCRIPTION for a40
col name for a30
SELECT * from v$bgprocess;
Show parameter;
COL SID for a30
COL NAME for a30
COL VALUE for a40
Select Created, Log_Mode, Log_Mode From V$Database;
SELECT GROUP# "組號",
MEMBERS "成員",
BYTES "大小(字節)",
ARCHIVED "歸檔?",
STATUS "狀態"
FROM V$LOG;
Col member for a56
SELECT * FROM V$LOGFILE;
select le.leseq current_log_sequence#, 100*cp.cpodr_bno/le.lesiz percentage_full
from x$kcccp cp,x$kccle le
where le.leseq =cp.cpodr_seq;
select start_recid,start_time,end_recid,end_time,minutes from (select test.*, rownum as rn
from (select b.recid start_recid,to_char(b.first_time,'yyyy-mm-dd hh24:mi:ss') start_time,
a.recid end_recid,to_char(a.first_time,'yyyy-mm-dd hh24:mi:ss') end_time,round(((a.first_time-b.first_time)*24)*60,2) minutes
from v$log_history a,v$log_history b where a.recid=b.recid+1 and b.first_time > sysdate - 1
order by a.first_time desc) test) y where y.rn < 30;
col "狀態" for a20
col "控制文件名" for a60
SELECT STATUS "狀態",
NAME "控制文件名"
FROM v$controlfile ;
select tablespace_name,status,extent_management,segment_space_management from dba_tablespaces;
select table_name,freelists,freelist_groups from user_tables;
select sum(bytes)/(1024*1024) as free_space,tablespace_name from dba_free_space group by tablespace_name;
SELECT tablespace_name, max_m,
count_blocks free_blk_cnt, sum_free_m,
to_char(100*sum_free_m/sum_m, '99.99') || '%' AS pct_free
FROM ( SELECT tablespace_name,sum(bytes)/1024/1024 AS sum_m
FROM dba_data_files GROUP BY tablespace_name),
( SELECT tablespace_name AS fs_ts_name, max(bytes)/1024/1024
AS max_m, count(blocks)
AS count_blocks, sum(bytes/1024/1024)
AS sum_free_m FROM dba_free_space GROUP BY tablespace_name )
WHERE tablespace_name = fs_ts_name order by pct_free;
select tablespace_name, sum ( blocks ) free_blk , trunc ( sum ( bytes ) /(1024*1024) ) free_m, max ( bytes ) / (1024) as big_chunk_k, count (*) num_chunks from dba_free_space group by tablespace_name;
select tablespace_name, file_id, file_name,
round(bytes/(1024*1024),0) total_space
from dba_data_files
order by tablespace_name;
select tablespace_name,sum(blocks) as free_blk,
trunc(sum(bytes)/(1024*1024)) as free_m,
max(bytes)/(1024) as big_chunk_k,
count(*) as num_chunks
from dba_free_space
group by tablespace_name;
select tablespace_name,sum(bytes),sum(free),sum(free)*100/sum(bytes)
from (select
b.file_id file_ID,
b.tablespace_name tablespace_name,
b.bytes Bytes,
(b.bytes-sum(nvl(a.bytes,0))) used,
sum(nvl(a.bytes,0)) free,
sum(nvl(a.bytes,0))/(b.bytes)*100 Percent
from dba_free_space a,dba_data_files b
where a.file_id=b.file_id
group by b.tablespace_name,b.file_id,b.bytes
order by b.file_id)
group by tablespace_name order by sum(free)*100/sum(bytes);
碎片化現象形成共享池中的可用空間均成爲許多零散的片斷,而沒有足夠大的連續空間,這是共享池中的廣泛現象。
較大的PL/SQL對象容易引發共享池故障,由於他們須要進入內存的時候,不容易獲得空間。
下面程序清單中的示例搜索那些所需空間大於100KB的對象(只限於目前已經在shared pool中對象)
select name, sharable_mem
from v$db_object_cache
where sharable_mem > 100000
and type in ('PACKAGE', 'PACKAGE BODY','FUNCTION', 'PROCEDURE')
and kept = 'NO';
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
order by df.tablespace_name;
select df.name,phyrds,phywrts,phyblkrd,phyblkwrt,singleblkrds,readtim,writetim
from v$filestat fs,v$dbfile df
where fs.file#=df.file# order by df.name;
select SubStr(B.Name, 1, 40) Disk, C.TableSpace_Name,
A.Phyblkrd + A.Phyblkwrt Total,
A.Phyrds, A.Phywrts,A.Phyblkrd, A.Phyblkwrt,
((A.ReadTim /Decode(A.Phyrds,0,1,A.Phyblkrd))/100) Avg_Rd_Time,
((A.WriteTim / Decode(A.PhyWrts,0,1,A.PhyblkWrt)) /100) Avg_Wrt_Time
from V$FileStat A, V$DataFile B, Sys.DBA_Data_Files C
where B.File# = A.File#
and B.File# = C.File_Id
order by Disk,C.Tablespace_Name, A.File#;
select substr(a.file#,1,2) "#", substr(a.name,1,30) "Name",
a.status, a.bytes, b.phyrds, b.phywrts
from v$datafile a, v$filestat b
where a.file# = b.file#;
select tablespace_name "表空間" ,
count(*) "分佈在", sum(bytes) "自由空間(Mb)"
from dba_free_space
where bytes>100000 group by tablespace_name;
select f.tablespace_name "TABLESPACE_NAME",
decode(d.extent_management,'DICTIONARY','DICT','LOCAL') " TABS_TYPE ",
trunc(sum(f.bytes/1024000),2 ) || 'MB' "FREE_MB",
max(f.bytes) "MAX_BYTES",
avg(f.bytes) " AVG_BYTES ",count(f.tablespace_name) " COUNT "
from dba_free_space f, dba_tablespaces d
where f.tablespace_name = d.tablespace_name
group by f.tablespace_name ,d.extent_management;
select A.tablespace_name,(1-(A.total)/B.total)*100 used_percent from (select tablespace_name,sum(bytes) total
from dba_free_space group by tablespace_name) A,
(select tablespace_name,sum(bytes) total from dba_data_files
group by tablespace_name) B
where A.tablespace_name=B.tablespace_name;
select segment_name "段名", segment_type "段類型",
owner "段全部者", a.tablespace_name "表空間名",
Initial_extent "初始擴展", next_extent "下次", pct_increase "增漲",
b.bytes "最大字節"
from dba_segments a,
( select tablespace_name, max(bytes) bytes from dba_free_space
group by tablespace_name ) b
where a.tablespace_name=b.tablespace_name and next_extent > b.bytes ;
select f.tablespace_name "表空間",
trunc(sum(f.bytes/1024000),2 ) || 'MB' "自由空間",
min(f.bytes) "最小字節", MAX(f.bytes) "最大字節",
avg(f.bytes) "平均字節",COUNT(f.tablespace_name) "分佈在"
from dba_free_space f, dba_tablespaces d
where f.tablespace_name = d.tablespace_name
having count(f.tablespace_name) >1
group by f.tablespace_name ,d.extent_management ;
col "表空間" for a18
col "文件名" for a50
col "總空間(Mb)" for 999,999,999,999
col "自由空間(Mb)" for 999,999,999,999
col "自由空間%" for 9999.99
SELECT a.tablespace_name "表空間",
a.file_name "文件名",
a.avail "總空間(Mb)",
nvl(b.free,0) "自由空間(Mb)",
nvl(round(((free/avail)*100),2),0) "自由空間%"
from (select tablespace_name, substr(file_name,1,45) file_name,
file_id, round(sum(bytes/(1024*1024)),3) avail
from sys.dba_data_files
group by tablespace_name, substr(file_name,1,45),
file_id) a,
(select tablespace_name, file_id,
round(sum(bytes/(1024*1024)),3) free
from sys.dba_free_space
group by tablespace_name, file_id) b
where a.file_id = b.file_id (+)
order by 1, 2 ;
col mbytes format 9999.9999
select tablespace_name,sum(bytes)/1024/1024 mbytes from dba_free_space group by tablespace_name;
/* WAITS 在理想下,等待值應該是 0;GETS 是對回滾段訪問次數;
若是等待值大於0,則確定存在爭用,能夠在建立一些新的回滾段。
若是 ratio > 2 ,則有競爭,應創建更多的回滾段 */
col "獲得" for 999,999,999
col "回滾段" for a16
col "比率" for 99.99
col "等待" for 999,999
SELECT rn.name "回滾段" , rs.gets "獲得",
rs.waits "等待" ,
(rs.waits/rs.gets)*100 "比率"
from v$rollstat rs, v$rollname rn
where rs.usn=rn.usn ;
V$ROLLSTAT中的經常使用列
USN:回滾段標識
RSSIZE:回滾段默認大小
XACTS:活動事務數
在一段時間內增量用到的列
WRITES:回滾段寫入數(單位:bytes)
SHRINKS:回滾段收縮次數
EXTENDS:回滾段擴展次數
WRAPS:回滾段翻轉(wrap)次數
GETS:獲取回滾段頭次數
WAITS:回滾段頭等待次數
col USN for 999
col NAME for a18
col EXTENTS for 999
col RSSIZE for 999,999,999,999
col WRITES for 999
col XACTS for 9999
col GETS for 999
col WAITS for 999
col HWMSIZE for 999,999,999,999
col OPTSIZE for 999,999,999
col STATUS for a10
Set linesize 150
Select a.usn, name, extents, rssize, optsize, hwmsize,waits,status
From v$rollstat a , v$rollname b
Where a.usn=b.usn order by a.usn;
SELECT n.name, s.extents, s.rssize, s.optsize, s.hwmsize, s.xacts, s.status
FROM v$rollname n, v$rollstat s
WHERE n.usn = s.usn;
Column Class Format A20 Heading 'Header Type'
Column Count Format 999,999,999 Heading 'Number |of waits'
Column Con_Get Format 999,999,999,999 Heading 'Logical| Reads'
Column Pct Format 990.99 Heading 'Pct of |Contention'
Column Instance New_Value _Instance NoPrint
Column Today New_Value _Date NoPrint
Define Wait_Ratio = 1 (Number)
Select A.Class, Count, Sum(Value) Con_Get, ((Count / Sum(Value)) * 100) pct
From V$WaitStat A, V$SysStat B
Where Name In ('db block gets', 'consistent gets')
Group by A.Class, Count;
Column Name Format A30
Column Gets Format 999,999,999 Heading 'Number of|Activities'
Column Waits Format 999,999,999 Heading 'Number|of Waits'
Column Pct Format 990.99 Heading 'Pct of|Gets'
Select Name, Gets, Waits, ((Waits / Gets) * 100) Pct
From V$RollStat A, V$RollName B
Where A.USN = B.USN;
select s.username, u.name
from v$transaction t, v$rollstat r, v$rollname u, v$session s
where s.taddr = t.addr
and t.xidusn = r.usn
and r.usn = u.usn
order by s.username;
Select to_char(begin_time,'yyyy.mm.dd hh24:mi:ss'),
to_char(end_time,'yyyy.mm.dd hh24:mi:ss'), undoblks,
txncount, maxquerylen from v$undostat;
SELECT (rd * (ups * overhead) + overhead) AS "Bytes"
FROM
(SELECT value AS RD
FROM v$parameter
WHERE name = 'undo_retention'),
(SELECT (SUM(undoblks) /
SUM( ((end_time - begin_time) * 86400)))
AS UPS
FROM v$undostat),
(SELECT value AS overhead
FROM v$parameter
WHERE name = 'db_block_size');
--** 查詢事務在Undo空間中執行的時間:
col "用撤消塊數" for 999,999,999,999
col "事務執行塊數" for 999,999,999,999
col "查詢最長秒" for 99,999,999
col "ORA-01555次數" for 999,999
col "無可用空間數" for 999,999
select TO_CHAR(MIN(Begin_Time),'DD HH24:MI:SS') "開始時間",
TO_CHAR(MAX(End_Time),'DD HH24:MI:SS') "結束時間",
SUM(Undoblks) "用撤消塊數",
SUM(Txncount) "事務執行塊數",
MAX(Maxquerylen) "查詢最長秒",
MAX(Maxconcurrency) "最高事務數",
SUM(Ssolderrcnt) "ORA-01555次數",
SUM(Nospaceerrcnt) "無可用空間數"
from V$UNDOSTAT;
-- ORA-01555次數出現,可減小UNDO_RETENTION
--**V$WAITSTAT視圖能夠被用來肯定每一個回滾段數據塊的等待狀況:
SELECT class, count
FROM V$WAITSTAT
WHERE class LIKE '%undo%'
AND COUNT > 0;
SELECT SUM(value) "DATA REQUESTS"
FROM V$SYSSTAT
WHERE name IN ('db block gets', 'consistent gets');
COL segment_name for a20
SELECT segment_name, owner, tablespace_name, status,
initial_extent, next_extent
FROM DBA_ROLLBACK_SEGS;
SELECT MAX(used_ublk) FROM V$TRANSACTION;
select name, waits, gets, waits/gets "Ratio"
from v$rollstat a, v$rollname b
where a.usn = b.usn;
select segment_name, tablespace_name, r.status,
(initial_extent/1024) InitialExtent,(next_extent/1024)
NextExtent,
max_extents, v.curext CurExtent
From dba_rollback_segs r, v$rollstat v
Where r.segment_id = v.usn(+)
order by segment_name ;
select a.name,b.xacts,c.sid,c.serial#,d.sql_text
from v$rollname a,v$rollstat b,v$session c,v$sqltext d,v$transaction e
where a.usn=b.usn and b.usn=e.xidusn and c.taddr=e.addr
and c.sql_address=d.address and c.sql_hash_value=d.hash_value order by a.name,c.sid,d.piece;
select s.username, rn.name from v$session s, v$transaction t, v$rollstat r, v$rollname rn
where s.saddr = t.ses_addr and t.xidusn = r.usn and r.usn = rn.usn;
SELECT d.segment_name,extents,optsize,shrinks,aveshrink,aveactive,d.status
FROM v$rollname n,v$rollstat s,dba_rollback_segs d
WHERE d.segment_id=n.usn(+) and d.segment_id=s.usn(+);
COL "排序操做" for a40
SELECT name "排序操做" , value "操做次數"
FROM v$sysstat WHERE name IN ('sorts (memory)', 'sorts (disk)');
select a.value "disk sort" , b.value "memory sort" ,
round(a.value/(b.value+a.value)*100,2) "disk sort percentage"
from V$SYSSTAT a , V$SYSSTAT b
where a.name = 'sort ( disk ) ' and b.name = 'sort (memory)' ;
select * from v$sgastat where name='free memory';
select a.name,sum(b.value) from v$statname a,v$sesstat b where a.statistic# = b.statistic# group by a.name;
查看一下誰在使用那個能夠的回滾段,或者查看一下某個能夠的用戶在使用回滾段,找出領回滾段不斷增加的事務,再看看如何處理它,是否能夠將它commit,再不行就看可否kill它,查看當前正在使用的回滾段的用戶信息和回滾段信息:
set linesize 121
SELECT r.name "ROLLBACK SEGMENT NAME ",l.sid "ORACLE PID",p.spid "SYSTEM PID ",s.username "ORACLE USERNAME"
FROM v$lock l, v$process p, v$rollname r, v$session s
WHERE l.sid = p.pid(+) AND s.sid=l.sid AND TRUNC(l.id1(+)/65536) = r.usn AND l.type(+) = 'TX' AND l.lmode(+) = 6 ORDER BY r.name;
select a.value "Disk Sort",b.value "Memory Sort",
round((100*b.value)/decode((a.value+b.value),0,1,(a.value+b.value)),2)
"Pct Memory Sorts"
from v$sysstat a,v$sysstat b
where a.name = 'sorts(disk)'
and b.name='sorts(memory)' ;
col file_name for a30
col bytes for 999,999,999,999
col tablespace_name for a18
select file_name,tablespace_name,bytes,maxbytes,increment_by
from dba_temp_files;
COL USERNAME heading "用戶名" for a20
COL TEMPORARY_TABLESPACE heading "臨時表空間名" for a20
COL DEFAULT_TABLESPACE heading "默認表空間名" for a20
SELECT USERNAME,
TEMPORARY_TABLESPACE,
DEFAULT_TABLESPACE,
TO_CHAR(CREATED,'YYYY.MM.DD' ) "建立用戶日期"
FROM DBA_USERS ORDER BY USERNAME ;
show parameter SORT_AREA_SIZE
show parameter SORT_AREA_RETAINED_SIZE
--**ALTER Session set SORT_AREA_SIZE=1024000 ;
--**ALTER SYSTEM set SORT_AREA_SIZE=1024000 DEFERRED ;
select tablespace_name, current_users, total_extents,
used_extents, extent_hits, max_used_blocks,
max_sort_blocks
from v$sort_segment;
SELECT session_num, tablespace, extents, blocks
FROM v$sort_usage;
SELECT '沒法分配臨時表空間的 INITIAL和NEXT '
FROM dba_tablespaces dt,
(SELECT MAX(bytes) max_size , tablespace_name FROM dba_free_space
WHERE tablespace_name ='TEMP'
GROUP BY tablespace_name ) fs
WHERE dt.tablespace_name = fs.tablespace_name AND
( dt.initial_extent > fs.max_size OR dt.next_extent > fs.max_size );
show parameter RECYCLEBIN
col owner for a20
col ORIGINAL_NAME for a28
select owner,object_name,original_name,type,space
from dba_recyclebin order by owner,type;
使用oracle 10g時出現了許多奇怪的表名,以BIN$開頭,上網查找後發現是oracle10g的回收站功能,並無完全的刪除表,而是把表放入回收站!!!
清除的方法以下:
purge table origenal_tableName;--原來的表名
或者在刪除表時加上PURGE選項,如:
DROP TABLE t_test PURGE;
清空整個回收站的命令:
PURGE recyclebin;
查詢回收站垃圾信息的SQL語句:
SELECT object_name,type ,original_name FROM user_recyclebin ;
--DB_RECOVERY_FILE_DEST
show parameter DB_RECOVERY_FILE_DEST
--
show parameter db_flashback_retention_target
SELECT estimated_flashback_size,
flashback_size
FROM v$flashback_database_log;
--
SELECT oldest_flashback_scn,
oldest_flashback_time
FROM v$flashback_database_log;
--
SELECT * FROM v$flashback_database_stat;
--** 要得到詳細信息採用STATSPACK(見另外腳本)
COL VALUE for 999,999,999,999
select * from V$SGA ;
select username, sum(sharable_mem), sum(persistent_mem), sum(runtime_mem)
from sys.v_$sqlarea a, dba_users b
where a.parsing_user_id = b.user_id group by username;
select least(max(b.value)/(1024*1024),sum(a.bytes)/(1024*1024)) shared_pool_used,max(b.value)/(1024*1024) shared_pool_size,greatest(max(b.value)/(1024*1024),sum(a.bytes)/(1024*1024))-(sum(a.bytes)/(1024*1024)) shared_pool_avail,((sum(a.bytes)/(1024*1024))/(max(b.value)/(1024*1024)))*100 avail_pool_pct
from v$sgastat a, v$parameter b where (a.pool='shared pool' and a.name not in ('free memory')) and b.name='shared_pool_size';
select decode(greatest(class,10),10,decode(class,1,'Data',2,'Sort',4,'Header',to_char(class)),'Rollback') "Class",
sum(decode(bitand(flag,1),1,0,1)) "Not Dirty",sum(decode(bitand(flag,1),1,1,0)) "Dirty",
sum(dirty_queue) "On Dirty",count(*) "Total"
from x$bh group by decode(greatest(class,10),10,decode(class,1,'Data',2,'Sort',4,'Header',to_char(class)),'Rollback');
COL Name for a40
COL Values for a40
select name, value
from v$parameter
where name in
('db_block_buffers','db_cache_size','db_block_size','shared_pool_size','sort_area_size');
--**若是90-95% 間,表示緩衝區設置低了.
select a.value + b.value "邏輯讀", c.value "物理讀",
round(100 * ((a.value+b.value)-c.value) / (a.value+b.value)) "緩衝區命中率"
from v$sysstat a, v$sysstat b, v$sysstat c
where (a.value !=0 OR b.value != 0 ) and
a.STATISTIC# = 38 and b.statistic# = 39
and c.statistic# = 40;
-- v$statname
SELECT 'buffer cache hit ratio',
round((congets.value+dbgets.value-physreads.value)*100/
(congets.value+dbgets.value),4) "HIT RATE"
from v$sysstat congets,
v$sysstat dbgets,
v$sysstat physreads
where congets.name='consistent gets'
and dbgets.name = 'db block gets'
and physreads.name = 'physical reads' ;
col name for a30
col value for 999,999,999,999
select name, value from v$sysstat
where name in ('consistent gets','db block gets','physical reads' ) ;
/* 若是 ratio = 1- ( physical reads / ( db block gets + consistent gets ) ) 低於 70%。
則應該加大INITsid.ORA文件中的DB_BLOCK_BUFFERS參數值
9I用ALter system set db_cache_size= 100m scope=spfile ; */
select 1-(sum(decode(name, 'physical reads', value,0))/
(sum(decode(name, 'db block gets', value,0)) +(sum(decode(name, 'consistent gets', value,0))))) "Read Hit Ratio"
from v$sysstat;
/*
?Total Reads = db block gets + consistent gets
?Hit Ratio = 1 - (physical reads) / (db block gets + consistent gets)
?Buffer Hit Ratio > 95% for an Interactive Intensive System and 85% for a Batch Intensive System
select sum(decode(name, 'physical reads', value, 0)) dsk_rds,
sum(decode(name, 'db block gets', value, 0)) blk_gts,
sum(decode(name, 'consistent gets', value, 0)) con_gts,
((1 - (sum(decode(name, 'physical reads', value, 0)) /
(sum(decode(name, 'db block gets', value, 0)) +
sum(decode(name, 'consistent gets', value, 0))))) * 100) hit_rate
from v$sysstat;
select decode(state, 0, 'Free', 1, 'Modified',2, 'Not Modified', 3, 'Being Read', 'Other') stats ,
count(*) cnt
from sys.x$bh
group by state;
select a.sid, a.username, b.block_gets, b.consistent_gets,
b.physical_reads
from v$session a, v$sess_io b
where a.sid = b.sid
order by a.username;
select 'recursive calls/total calls',
(rc.value/(rc.value+uc.value))*100
from v$sysstat rc, v$sysstat uc
where rc.name='recursive calls' and uc.name='user calls';
select sum(pinhits-reloads)/sum(pins) "命中率",
sum(reloads)/sum(pins) "重加載%"
from v$librarycache;
Column Pins Format 999,999,990 Heading 'Executions'
Column PinHits Format 999,999,990 Heading 'Executions'
Column PHitRat Format 990.99 Heading 'Hit |Ratio'
Column Reloads Format 999,999,990 Heading 'Misses'
Column HitRat Format 990.99 Heading 'Hit |Ratio'
Column Instance New_Value _Instance NoPrint
Column Today New_Value _Date NoPrint
Define Hit_Ratio = 90 (Number)
Define Reld_Ratio = 1 (Number)
Select Sum(Pins) Pins, Sum(PinHits) PinHits,
((Sum(PinHits) / Sum(Pins)) * 100) PHitRat,
Sum(Reloads) Reloads,
((Sum(Pins) / (Sum(Pins) + Sum(Reloads))) * 100) HitRat
From V$LibraryCache;
select parameter "參數", gets "獲得",Getmisses "失敗",
TRUNC(getmisses/(gets+getmisses)*100,2) "失敗比率",
TRUNC((1-(sum(getmisses)/ (sum(gets)+sum(getmisses))))*100,2) "命中率"
from v$rowcache
where gets+getmisses <>0
group by parameter, gets, getmisses;
--**命中率>95%以上是可接受的
select sum(gets) "Gets", sum(getmisses) "Misses",
(1 - (sum(getmisses) / (sum(gets) +
sum(getmisses))))*100 "HitRate"
from v$rowcache;
select (sum(getmisses)/sum(gets)) ratio from v$rowcache;
select sum(pins)/(sum(pins)+sum(reloads))*100 "Hit Ratio"
from v$librarycache;
select sum(pins) Executions, sum(pinhits) "Execution Hits",
((sum(pinhits) / sum(pins)) * 100) phitrat,
sum(reloads) Misses,
((sum(pins) / (sum(pins) + sum(reloads))) * 100) hitrat
from v$librarycache;
select namespace,gets, gethitratio*100 gethitratio,pins,pinhitratio*100 pinhitratio,RELOADS,INVALIDATIONS from v$librarycache;
col value for 999,999,999 heading "Shared Pool Size"
col bytes for 999,999,999 heading "Free Bytes"
select to_number(v$parameter.value) value, v$sgastat.bytes,
(v$sgastat.bytes/NVL(v$parameter.value,1) )*100 "Percent Free"
from v$sgastat, v$parameter
where v$sgastat.name = 'free memory'
and v$parameter.name = 'shared_pool_size';
-- 查詢結果過多 !
/*
select type, name, sharable_mem, kept
from v$db_object_cache
order by type, kept, sharable_mem;
*/
col "操做名" for a20
col "獲得" for 999,999,999
col "失敗" for 999,999,999
col "當即獲得" for 999,999,999
col "當即失敗" for 999,999,999
SELECT name "操做名",
Gets "獲得" , misses "失敗", immediate_gets "當即獲得",
immediate_misses "當即失敗" ,
Decode(gets,0,0,misses/gets*100) "失敗比率" ,
Decode(immediate_gets+immediate_misses,0,0,
immediate_misses/(immediate_gets+immediate_misses)*100) "當即失敗比率"
FROM v$latch WHERE name IN ('redo allocation', 'redo copy');
select ( 1-(sum(decode(name,'physical read',value,0))/
(sum(decode(name,'db block gets',value,0))+
sum(decode(name,'consistent gets',value,0)) )))*100 "Hit ratio"
from v$sysstat;
select ( 1-(sum(decode(name,'physical read',value,0))/
(sum(decode(name,'db block gets',value,0))+
sum(decode(name,'consistent gets',value,0)) )))*100 "Hit ratio",
decode(sign(( 1-(sum(decode(name,'physical read',value,0))/
(sum(decode(name,'db block gets',value,0)) +
sum(decode(name,'consistent gets',value,0)) )))*100-98),1,30,
decode(sign(( 1-(sum(decode(name,'physical read',value,0))/
(sum(decode(name,'db block gets',value,0))+
sum(decode(name,'consistent gets',value,0)) )))*100-95),1,20,
decode(sign(( 1-(sum(decode(name,'physical read',value,0))/
(sum(decode(name,'db block gets',value,0))+
sum(decode(name,'consistent gets',value,0)) )))*100-90),1,10,0))) "Score"
from v$sysstat;
select o.owner,o.object_type,o.object_name,count(b.objd)
from v$bh b,dba_objects o
where b.objd = o.object_id
group by o.owner,o.object_type,o.object_name
having count(b.objd) > (select to_number(value)*0.05 from v$parameter where name = 'db_block_buffers');
/* 若是immediate_contention > 1,則存在競爭 */
col name for a30
select name,(immediate_misses/
decode((immediate_gets+immediate_misses),0,-1,
(immediate_gets+immediate_misses)))*100 immediate_contention,
(misses/decode((gets - misses),0,-1))*100 wait_contention
from v$latch where name in('redo copy','redo allocation');
--** 最好:REQUEST_MISS和REQUEST_FAILURES都接近 0 才行。
select REQUEST_MISSES, request_failures,requests,free_space
from V$SHARED_POOL_RESERVED ;
col username for a20
col osuser for a20
select username, osuser,
(io.physical_reads/(io.block_gets+io.CONSISTENT_GETS)) "hit ratio"
from v$sess_io io , v$session sess
where io.sid = sess.sid
and (io.block_gets+io.CONSISTENT_GETS) != 0
and username is not null;
Col sid for 99999999
col WAIT_TIME for 999,999,999
col SECONDS_IN_WAIT for 999,999,999
SELECT SID, username,terminal ,
WAIT_TIME ,
SECONDS_IN_WAIT, LOCKWAIT
FROM v$session;
select 'Too many sessions ( '||to_char(count(*))||' running ',
substr(sql_text,1,80) query
from v$session s, v$sqlarea sa
where s.sql_address = sa.address
and s.sql_hash_value = sa.hash_value
and s.status = 'ACTIVE'
and s.audsid != 0
and sql_text not like 'select sql_text%'
group by substr(sql_text,1,80)
having count(*) > 100;
SELECT b.username, a.wait_time, a.seconds_in_wait, a.state
From V$SESSION_WAIT a, V$SESSION b
Where a.SID=b.SID ;
SELECT DECODE (name, 'summed dirty write queue length', value)/
DECODE (name, 'write requests', value) "Write Request Length"
FROM v$sysstat WHERE name IN ( 'summed dirty queue length', 'write requests') and value>0;
/**********************************************************************
V$SYSTEM_EVENT是一個動態性能視圖,記錄自系統啓動以來的等待事件,
包括各類類型的數據庫衝突等.輸出結果按照V$SYSTEM_EVENT視圖的
TIME_WAITED列的順序排列,若是TIMED_STATISTICS未設爲TRUE,
則TIME_WAITED列不會有內容.
*********************************************************************/
--截斷查詢結果最後的空格 set trimspool on
set trimspool on
set trimout on
-- 顯示執行腳本的命令 set echo on
set echo on
col event format a26 truncate
col total_waits format 999,990.00
col total_timeouts format 999,990.00
col time_waited format 999,990.00
col pct_significant format 90.00
col average_wait format 990.00
col instance new_value V_INSTANCE noprint
col total_time_waited new_value V_TOTAL_TIME_WAITED noprint
select sum(time_waited) total_time_waited
from sys.v_$system_event
where event not in ('SQL*Net message from client',
'rdbms ipc message',
'slave wait',
'pmon timer',
'smon timer',
'rdbms ipc reply',
'SQL*Net message to client',
'SQL*Net break/reset to client',
'inactive session',
'Null event');
select event,
(total_waits / 1000) total_waits,
(total_timeouts / 1000) total_timeouts,
(time_waited / 360000) time_waited,
decode(event,
'SQL*Net message from client', 0,
'rdbms ipc message', 0,
'slave wait', 0,
'pmon timer', 0,
'smon timer', 0,
'rdbms ipc reply', 0,
'SQL*Net message to client', 0,
'SQL*Net break/reset to client', 0,
'inactive session', 0,
'Null event', 0,
(time_waited / &&V_TOTAL_TIME_WAITED)*100) pct_significant,
(average_wait / 100) average_wait
from sys.v_$system_event
where (time_waited/360000) >= 0.01
order by pct_significant desc, time_waited desc;
select event,sum(decode(wait_Time,0,0,1)) "Prev",
sum(decode(wait_Time,0,1,0)) "Curr",count(*) "Tot"
from v$session_Wait
group by event order by 4;
COL program for a40
COL spid for A12
Select a.sid, spid, status,
substr(a.program,1,40) program,
a.terminal,osuser,value/60/100 value
from v$session a,v$process b,v$sesstat c
where c.statistic#=12 and c.sid=a.sid and a.paddr=b.addr order by status,value desc;
--其中:12是統計編號,即cpu used by this session;可用:
--select STATISTIC#,name from v$statname查到.
select se.sid,s.username,se.event,se.total_waits,se.time_waited,se.average_wait
from v$session s,v$session_event se
where s.username is not null and se.sid=s.sid and s.status='ACTIVE' and se.event not like '%SQL*Net%' order by s.username;
select s.sid,s.username,sw.event,sw.wait_time,sw.state,sw.seconds_in_wait
from v$session s,v$session_wait sw
where s.username is not null and sw.sid=s.sid and sw.event not like '%SQL*Net%' order by s.username;
select /*+rule */ s.sid, s.username, w.event, o.owner, o.segment_name, o.segment_type,
o.partition_name, w.seconds_in_wait seconds, w.state
from v$session_wait w, v$session s, dba_extents o
where w.event in (select name from v$event_name where parameter1 = 'file#'
and parameter2 = 'block#' and name not like 'control%')
and o.owner <> 'sys' and w.sid = s.sid and w.p1 = o.file_id and w.p2 >= o.block_id and w.p2 < o.block_id + o.blocks;
SELECT * FROM (SELECT PARSING_USER_ID
EXECUTIONS,SORTS,COMMAND_TYPE,DISK_READS,sql_text
FROM v$sqlarea ORDER BY disk_reads DESC)
WHERE ROWNUM<10;
col SCHEMA_NAME for a18
col OS_USER_NAME for a18
col ACTION for a30
col USER_NAME for a18
SELECT s.schemaname schema_name,
decode(sign(48 - command), 1, to_char(command), 'Action Code #' || to_char(command) ) action,
status session_status,s.osuser os_user_name,
s.sid,p.spid,s.serial# serial_num,nvl(s.username,'[Oracle process]') user_name,
s.terminal terminal,s.program program,st.value criteria_value
FROM v$sesstat st,v$session s,v$process p
WHERE st.sid = s.sid and st.statistic# = to_number('38')
and ('ALL'='ALL' or s.status ='ALL') and p.addr=s.paddr
order by st.value desc,p.spid asc,s.username asc,s.osuser asc;
SELECT se.sid,se.serial#,pr.SPID,se.username,se.status,se.terminal,
se.program, se.MODULE,se.sql_address,st.event,
st.p1text,si.physical_reads,si.block_changes
FROM v$session se,v$session_wait st,v$sess_io si,v$process pr
WHERE st.sid=se.sid AND st.sid=si.sid AND se.PADDR=pr.ADDR
AND se.sid>6 AND st.wait_time=0
AND st.event NOT LIKE '%SQL%' ORDER BY physical_reads DESC;
Select name,phyrds,phywrts,avgiotim,miniotim,maxiowtm,maxiortm from v$filestat,v$datafile where v$filestat.file#=v$datafile.file#;
Select fs.name name,f.phyrds,f.phyblkrd,f.phywrts,f.phyblkwrt ,f.readtim,f.writetim
from v$filestat f, v$datafile fs where f.file# = fs.file# order by fs.name;
/*注意:若是phyblkrd與phyrds很接近的話,則代表這個表空間中存在全表掃描的表,這些表須要調整索引或優化SQL語句*/
Select sql_text from (select * from v$sqlarea order by disk_reads)
where rownum<=5;
select * from
(select substr(sql_text,1,40) sql, buffer_gets,
executions, buffer_gets/executions "Gets/Exec",
hash_value,address
from v$sqlarea
where buffer_gets > 10000
order by buffer_gets desc)
where rownum <= 10 ;
select * from
(select substr(sql_text,1,40) sql, buffer_gets,
executions, buffer_gets/executions "Gets/Exec",
hash_value,address
from v$sqlarea
where buffer_gets > 0 and executions>0
order by buffer_gets desc)
where rownum <= 10 ;
select * from
(select substr(sql_text,1,40) sql, disk_reads,
executions, disk_reads/executions "Reads/Exec",
hash_value,address
from v$sqlarea where disk_reads > 1000
order by disk_reads desc) where rownum <= 10;
select * from
(select substr(sql_text,1,40) sql, disk_reads,
executions, disk_reads/executions "Reads/Exec",
hash_value,address
from v$sqlarea where disk_reads > 0 and executions >0
order by disk_reads desc) where rownum <= 10;
select * from
(select substr(sql_text,1,40) sql, executions,
rows_processed, rows_processed/executions "Rows/Exec",
hash_value,address
from v$sqlarea where executions > 100
order by executions desc) where rownum <= 10 ;
select * from
(select substr(sql_text,1,40) sql, parse_calls,
executions, hash_value,address
from v$sqlarea where parse_calls > 1000
order by parse_calls desc) where rownum <= 10 ;
select * from
(select substr(sql_text,1,40) sql, sharable_mem,
executions, hash_value,address
from v$sqlarea where sharable_mem > 1048576
order by sharable_mem desc)
where rownum <= 10;
select * from
(select sql_text, round(cpu_time/1000000)
cpu_time,
round(elapsed_time/1000000) elapsed_time,
disk_reads,
buffer_gets,
rows_processed
from v$sqlarea order by cpu_time desc, disk_reads desc )
where rownum < 10;
select * from
(select t.sql_fulltext,
(t.last_active_time-to_date(t.first_load_time,'yyyy-mm-dd hh24:mi:ss'))*24*60 time,
disk_reads,buffer_gets,rows_processed,
t.last_active_time,t.last_load_time,t.first_load_time
from v$sqlarea t order by t.first_load_time desc)
Where rownum < 10 order by time desc;
select * from
(select
(t.last_active_time-to_date(t.first_load_time,'yyyy-mm-dd hh24:mi:ss'))*24*60 time,
T.sql_id,
t.last_active_time,t.last_load_time,t.first_load_time
from v$sqlarea t order by t.first_load_time desc)
order by time asc;
select b.username username,a.disk_reads reads,
a.executions exec,a.disk_reads/decode(a.executions,0,1,a.executions) rds_exec_ratio,
a.sql_text Statement
from v$sqlarea a,dba_users b
where a.parsing_user_id=b.user_id
and a.disk_reads > 100000 and rownum<10
order by a.disk_reads desc;
select username,sid,opname,
round(sofar*100 / totalwork,0) || '%' as progress,
time_remaining,sql_text
from v$session_longops , v$sql
where time_remaining <> 0
and sql_address = address
and sql_hash_value = hash_value;
round(sofar*100 / totalwork,0) || '%' as progress,
time_remaining,start_time from v$session_longops , v$sql
and sql_hash_value = hash_value;
select st.sql_text from v$sql s,v$sqltext st
where s.address=st.address and s.hash_value=st.hash_value and s.disk_reads > 300;
v$session.serial# = V$TEMPSEG_USAGE.session_num
V$TEMPSEG_USAGE.sqladdr = v$sqlarea.address
V$TEMPSEG_USAGE.sqlhash = v$sqlarea.hash_value
select 'Too many sessions ( '||to_char(count(*))||' running '||
substr(sa.sql_text,1,80) query
from v$session s, v$sqlarea sa
where s.sql_address = sa.address
and s.sql_hash_value = sa.hash_value
and sql_text not like 'select sql_text%'
group by substr(sa.sql_text,1,80)
Select * from (select * from v$system_event where event not like 'SQL%' order by total_waits desc) where rownum<=5;
select b.sid,b.serial#,b.username,machine,a.event,a.wait_time,
chr(bitand(a.p1,-16777216)/16777215)||chr(bitand(a.p1, 16711680)/65535) "Enqueue Type"
from v$session_wait a,v$session b
where a.event not like 'SQL*N%'
and a.event not like 'rdbms%' and a.sid=b.sid
and b.sid>8 and a.event='enqueue'
select event,count(*),sum(seconds_in_wait) siw
where owner not in ('SYS','SYSTEM')
-- Not analyzed in for pre-determined number of days
where owner not in ('SYS','SYSTEM')
and trunc(last_analyzed) < trunc(sysdate)-5;
select owner,object_type,object_name from dba_objects where status='INVALID';
select constraint_name,table_name from dba_constraints where status='INVALID';
SELECT owner, object_name, object_type FROM dba_objects WHERE status='INVALID';
SELECT owner, constraint_name, table_name, constraint_type, status FROM dba_constraints WHERE status = 'DISABLED' AND constraint_type = 'P';
SELECT owner, trigger_name, table_name, status FROM dba_triggers WHERE status = 'DISABLED' ;
select 'alter procedure '||object_name||' compile;'
from dba_objects
where status='INVALID' and wner='&' and object_type in ('PACKAGE','PACKAGE BODY');
/
select owner,object_name,object_type,status from dba_objects where status='INVALID';
Select file_name from dba_data_files where status='OFFLINE';
SELECT p1.value || '/' || p2.value || '_ora_' || p.spid || '.ora' filename
FROM v$process p, v$session s, v$parameter p1, v$parameter p2
WHERE p1.name = 'user_dump_dest' AND p2.name = 'instance_name'
AND p.addr = s.paddr AND s.audsid = USERENV('SESSIONID') AND p.background is null AND instr(p.program,'CJQ') = 0;
select p.pid,p.spid,s.program,s.sid,s.serial#
from v$process p,v$session s where s.paddr=p.addr;
select sn.name,ms.value
from v$mystat ms,v$statname sn
where ms.statistic#=sn.statistic# and ms.value > 0;
select sid, serial# from v$session where audsid = SYS_CONTEXT('USERENV','SESSIONID');
select sid,serial#,username,program,machine,status from v$session;
SELECT Sid, Serial# FROM V$session WHERE Audsid = Sys_Context('USERENV', 'SESSIONID');
select a.sid,spid,status,substr(a.program,1,40) prog,a.terminal,osuser,value/60/100 value
from v$session a,v$process b,v$sesstat c
where c.statistic#=12 and c.sid=a.sid and a.paddr=b.addr order by value desc;
col event format a24
col p1text format a12
col p2text format a12
col p3text format a12
select sid,event,p1text, p1, p2text, p2, p3text, p3
from v$session_wait
where event not like '%SQL%' and event not like '%rdbms%' and event not like '%mon%' order by event;
select name,wait_time from v$latch l where exists (select 1 from (select sid,event,p1text, p1, p2text, p2, p3text, p3
from v$session_wait
where event not like '%SQL%' and event not like '%rdbms%' and event not like '%mon%'
) x where x.p1= l.latch#);
select sid, username, event, blocking_session,
seconds_in_wait, wait_time
from v$session where state in ('WAITING') and wait_class != 'Idle';
select value
from v$mystat, v$statname
where v$mystat.statistic# = v$statname.statistic# and v$statname.name = 'redo size';
SELECT s.Schemaname Schema_Name,
1, To_Char(Command), 'Action Code #' || To_Char(Command)) Action,
Status Session_Status, s.Osuser Os_User_Name, s.Sid, p.Spid,
s.Serial# Serial_Num, Nvl(s.Username, '[Oracle process]') User_Name,
s.Terminal Terminal, s.Program Program, St.VALUE Criteria_Value
FROM V$sesstat St, V$session s, V$process p
AND St.Statistic# = To_Number('38')
AND ('ALL' = 'ALL' OR s.Status = 'ALL')
ORDER BY St.VALUE DESC, p.Spid ASC, s.Username ASC, s.Osuser ASC;
select job from dba_jobs_running;
select name,sum(gets),sum(misses),sum(sleeps),sum(wait_time)
from v$latch_children
group by name having sum(gets) > 50 order by 2;
select s.name,m.value
from v$mystat m,v$statname s
where m.statistic#=s.statistic# and s.name like '%redo size%';
select b.value/(a.value + b.value),a.value,b.value from v$sysstat a,v$sysstat b
where a.statistic#=4 and b.statistic#=5;
select index_name,blevel,num_rows,CLUSTERING_FACTOR,status from user_indexes where num_rows > 10000 and blevel > 0;
select table_name,index_name,blevel,num_rows,CLUSTERING_FACTOR,status from user_indexes where status <> 'VALID';
select table_name from user_tables where table_name not in (select table_name from user_ind_columns);
select do.object_name,session_id,process,locked_mode
from v$locked_object lo, dba_objects do where lo.object_id=do.object_id;
select OWNER,NAMESPACE,TYPE,NAME,SHARABLE_MEM,LOADS,EXECUTIONS,LOCKS,PINS,KEPT
from v$db_object_cache where type not in ('NOT LOADED','NON-EXISTENT','VIEW','TABLE','SEQUENCE')
and executions>0 and loads>1 and kept='NO' order by owner,namespace,type,executions desc;
select type,count(*) from v$db_object_cache group by type;
select a.username, count(b.hash_value) total_hash,count(b.hash_value)-count(unique(b.hash_value)) same_hash,
(count(unique(b.hash_value))/count(b.hash_value))*100 u_hash_ratio
from dba_users a, v$sqlarea b where a.user_id=b.parsing_user_id group by a.username;
col ksppinm format a54
col ksppstvl format a54
select ksppinm, ksppstvl
from x$ksppi pi, x$ksppcv cv
where cv.indx=pi.indx and pi.ksppinm like '\_%' escape '\' and pi.ksppinm like '%meer%';
ALL_COL_PRIVS表示列上的受權,用戶和PUBLIC是被授予者
ALL_COL_PRIVS_MADE表示列上的受權,用戶是屬主和被授予者
ALL_COL_RECD表示列上的受權,用戶和PUBLIC是被授予者
ALL_TAB_PRIVS表示對象上的受權,用戶是PUBLIC或被授予者或用戶是屬主
ALL_TAB_PRIVS_MADE表示對象上的權限,用戶是屬主或授予者
ALL_TAB_PRIVS_RECD表示對象上的權限,用戶是PUBLIC或被授予者
DBA_COL_PRIVS數據庫列上的全部受權
DBA_ROLE_PRIVS顯示已授予用戶或其餘角色的角色
DBA_SYS_PRIVS已授予用戶或角色的系統權限
DBA_TAB_PRIVS數據庫對象上的全部權限
ROLE_ROLE_PRIVS顯示已授予用戶的角色
ROLE_SYS_PRIVS顯示經過角色授予用戶的系統權限
ROLE_TAB_PRIVS顯示經過角色授予用戶的對象權限
SESSION_PRIVS顯示用戶如今可利用的全部系統權限
USER_COL_PRIVS顯示列上的權限,用戶是屬主、授予者或被授予者
USER_COL_PRIVS_MADE顯示列上已授予的權限,用戶是屬主或授予者
USER_COL_PRIVS_RECD顯示列上已授予的權限,用戶是屬主或被授予者
USER_ROLE_PRIVS顯示已授予給用戶的全部角色
USER_SYS_PRIVS顯示已授予給用戶的全部系統權限
USER_TAB_PRIVS顯示已授予給用戶的全部對象權限
USER_TAB_PRIVS_MADE顯示已授予給其餘用戶的對象權限,用戶是屬主
USER_TAB_PRIVS_RECD顯示已授予給其餘用戶的對象權限,用戶是被授予者
發現user中的cpu太高,其中oracle的進程CPU比較高。
好比oracle其中最高的進程pid爲1138782 佔CPU 27%
select s.sid,s.serial# from v$session s,v$process p
where s.paddr=p.addr and p.spid='&pid';
WHERE a.hash_value = (SELECT sql_hash_value
三、select * from v$sql a where a.SQL_ID={上面查詢結果中的sql_id}
select b.owner table_owner,b.object_name,c.username,c.sid,c.serial#
from v$locked_object a,dba_objects b,v$session c
where a.object_id=b.object_id and c.sid=a.session_id;
select object_id, owner||'.'||object_name object_name
and object_name like 'SHZGY_PZ_BB_ERROR1';
---------- ----------------------------------
105421 SHZGY.SHZGY_PZ_BB_ERROR1
select * from v$lock where id1 = 105421;
ADDR KADDR SID TY ID1 ID2 LMODE REQUEST CTIME BLOCK
-------- -------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
A08E1304 A08E1314 29 TO 105421 1 3 0 1209396 0
A08D4904 A08D4914 30 TO 105421 1 3 0 1295439 0
A08E1188 A08E1198 32 TO 105421 1 3 0 1284027 0
A08E12B8 A08E12C8 77 TO 105421 1 3 0 1209674 0
A08E11D4 A08E11E4 120 TO 105421 1 3 0 1280668 0
A08E1350 A08E1360 144 TO 105421 1 3 0 1209330 0
A08E1220 A08E1230 151 TO 105421 1 3 0 1279593 0
在網上找了挺多有關oracle kill session的文章,可能是講如何kill掉一個session的.對於怎麼找到你要的session並未作講解,如下內容是有講解怎麼找到你要kill 掉的session的,這個版本較好。因此收入
select b.owner table_owner,b.object_name,c.username,c.sid,c.serial#
from v$locked_object a,dba_objects b,v$session c
where a.object_id=b.object_id and c.sid=a.session_id;
這樣根據sid和serial#就能夠直接殺掉(具體方法下面介紹)
查找一個表是否 被鎖的方法,例如:臨時表SHZGY.SHZGY_PZ_BB_ERROR1
select object_id, owner||'.'||object_name object_name
and object_name like 'SHZGY_PZ_BB_ERROR1';
---------- ----------------------------------
105421 SHZGY.SHZGY_PZ_BB_ERROR1
select * from v$lock where id1 = 105421;
ADDR KADDR SID TY ID1 ID2 LMODE REQUEST CTIME BLOCK
-------- -------- ---------- -- ---------- ---------- ---------- ---------- ---------- ----------
A08E1304 A08E1314 29 TO 105421 1 3 0 1209396 0
A08D4904 A08D4914 30 TO 105421 1 3 0 1295439 0
A08E1188 A08E1198 32 TO 105421 1 3 0 1284027 0
A08E12B8 A08E12C8 77 TO 105421 1 3 0 1209674 0
A08E11D4 A08E11E4 120 TO 105421 1 3 0 1280668 0
A08E1350 A08E1360 144 TO 105421 1 3 0 1209330 0
A08E1220 A08E1230 151 TO 105421 1 3 0 1279593 0
若是能夠kill,就能夠 drop table shzgy.shzgy_pz_bb_error1;
select a.sid, a.SERIAL#, b.spid, a.status, a.PROGRAM
where a.sid in (29, 30, 32, 77, 120, 144, 151)
SID SERIAL# SPID STATUS PROGRAM
---------- ---------- ------------ -------- ------------------------
29 619 9738 INACTIVE JDBC Thin Client
30 47 7608 INACTIVE JDBC Thin Client
32 148 8014 INACTIVE JDBC Thin Client
77 198 9736 INACTIVE JDBC Thin Client
120 258 8204 INACTIVE JDBC Thin Client
144 17 9762 INACTIVE JDBC Thin Client
151 253 8232 INACTIVE JDBC Thin Client
這七個會話都是JDBC調用,status=INACTIVE。
而後根據這些調用和活動狀態判斷是否能夠kill掉這些session。
使用 dbms_system.set_sql_trace_in_session包來對這個session進行trace:
SQL > alter system kill session 'sid,SERIAL#' immediate;
這時這些session的狀態就被標記爲killed,Oracle會在該用戶下一次 touch時清除該進程。
咱們發現當一個session被kill掉之後,該session的paddr被修改,若是有多個session被kill,那麼多個session的paddr都被更改成相同的進程地址:
SQL> select saddr,sid,serial#,paddr,username,status from v$session where username is not null;
SADDR SID SERIAL# PADDR USERNAME STATUS
-------- ---------- ---------- -------- ------------------------------ --------
542E0E6C 11 314 542B70E8 EYGLE INACTIVE
542E5044 18 662 542B6D38 SYS ACTIVE
SQL> alter system kill session '11,314';
SQL> select saddr,sid,serial#,paddr,username,status from v$session where username is not null;
SADDR SID SERIAL# PADDR USERNAME STATUS
-------- ---------- ---------- -------- ------------------------------ --------
542E0E6C 11 314 542D6BD4 EYGLE KILLED
542E5044 18 662 542B6D38 SYS ACTIVE
SQL> select saddr,sid,serial#,paddr,username,status from v$session where username is not null;
SADDR SID SERIAL# PADDR USERNAME STATUS
-------- ---------- ---------- -------- ------------------------------ --------
542E0E6C 11 314 542D6BD4 EYGLE KILLED
542E2AA4 14 397 542B7498 EQSP INACTIVE
542E5044 18 662 542B6D38 SYS ACTIVE
SQL> alter system kill session '14,397';System altered.
SQL> select saddr,sid,serial#,paddr,username,status from v$session where username is not null;
SADDR SID SERIAL# PADDR USERNAME STATUS
-------- ---------- ---------- -------- ------------------------------ --------
今天在10g庫中發現有許多BIN$...等開頭的一些表,突然想起來是回收站的表。%bV&gDm"lw!PT@0
R)ai$p"b5B0在Oralce 10g中的回收站實際上是一個邏輯容器(一個數據字典表,它包含了被刪除的表的相關的信息)z"ST4`'h B/Vl0
z0L*_1HT__N:LB2b0desc recyclebin;
查看recyclebin視圖的表結構信息。7X OBQ7YvD-Z,O]U@0ITPUB我的空間'blEb M7])sn$uM
查看回收站中的內容:
pNr:D~*\;n.v0SQL>select object_name,droptime,dropscn,purge_object from recyclebin;L{G`#e!km GR0
U[(e1G*}e)@0在10R2中,咱們能夠經過控制初始化參數recyclebin關閉閃回刪除功能,此參數默認值爲ON,因此數據庫默認狀況下將把全部刪除的表都要進入回收站,這樣呢,咱們能夠利用閃回刪除特性恢復它們;若是設置爲OFF,那麼將關閉數據庫閃回刪除功能,表在被刪除以後將不進入回收站。XW$? MA6sc['^+z&[F0ITPUB我的空間 X7M/f1oOa|n |*B}
若是咱們確認要刪除一個張表,絕不含糊,那麼可使用:
?7cE^S}H0SQL>drop table table_name purge;
這樣的話,被刪除的表將被完全刪除,再也不會進回收站。
*nm1H0QsI+U0
Q-m.P:?*d@i0咱們能夠查看本身回收站中的內容,使用user_recyclebin視圖;亦能夠查看數據庫中全部的回收站內容,使用dba_recyclebin視圖。
.x_4Ykf]gs0如:
n"y7ypG0SQL>select owner,original_name,object_name,ts_name,droptime from dba_recyclebin;!W1O@(_.gwf3k0ITPUB我的空間kMv*x3]
咱們能夠看到無論是recyclebin、user_recyclebin仍是dba_recyclebin;他們中的object_name都是一些很奇怪的名字(以BIN$開頭,是系統自動生成的,此名稱的長度一般爲30個字符)。若是咱們想查看回收站中某個對象的內容,那麼咱們必須使用系統生成的名稱(以BIN$開頭的),且用雙引號括住。ITPUB我的空間8Ny TKt{%V
如:
b R L|6F3So!ot&{0SQL>select * from "BIN$.....";ITPUB我的空間2y8GD9\J
8DgR REQ0若是須要恢復回收站中的對象,那麼:
3bX5@$jX0SQL>flashback table table_name to before drop;B#{\Q\i`@s0ITPUB我的空間(B0N&S!L']gBoR`'d
若是須要刪除回收站中的對象,那麼:ITPUB我的空間BYMI5Oo
SQL>purge table table_name;/purge index index_name;ITPUB我的空間dtPAYJ}
還有更省勁的呢,呵呵!那就是:
QdWAO9s5a"h$VD0SQL>purge recyclebin;清空整個回收站。
查看select
trunc(completion_time) as "Date"
,count(*) as "Count"
,trunc((sum(blocks * block_size)) /1024 /1024) as "MB"
from v$archived_log
group by trunc(completion_time)
order by "Date"
;
SQL> select
2 trunc(completion_time) as "Date"
3 ,count(*) as "Count"
4 ,trunc((sum(blocks * block_size)) /1024 /1024) as "MB"
5 from v$archived_log
6 group by trunc(completion_time)
7 order by "Date"
8 ;
Date Count MB
--------------- ---------- ----------
02-JUN-10 87 3727
17-JUN-10 266 11344
18-JUN-10 655 29995
19-JUN-10 2 86
20-JUN-10 1 43
21-JUN-10 27 1140
22-JUN-10 18 777
23-JUN-10 6 247
24-JUN-10 4 172
25-JUN-10 6 259
26-JUN-10 4 172
Date Count MB
--------------- ---------- ----------
27-JUN-10 3 129
28-JUN-10 4 172
29-JUN-10 4 172
30-JUN-10 7 294
01-JUL-10 3 129
02-JUL-10 4 172
03-JUL-10 7 302
04-JUL-10 3 129
05-JUL-10 2 86
20 rows selected.
select sum(bytes)/1024/1024/1024 from dba_data_files; 全部的總量
select sum(bytes)/1024/1024/1024 G from dba_free_space; 全部的餘量
select sum(bytes)/1024/1024/1024 from dba_data_files where TABLESPACE_NAME='APPS_UNDOTS1'; 查看某個表空間的總量
select sum(bytes)/1024/1024/1024 G from dba_free_space where TABLESPACE_NAME='APPS_UNDOTS1';
監控表空間的使用是DBA的平常工做之一,Oracle擴展表空間很簡單,通常有擴展某個數據文件大小或增長新的數據文件兩種辦法。舉例說明以下。
首先咱們要獲取某個表空間的數據文件信息:
select file_name,file_id,tablespace_name,bytes/1024/1024 from dba_data_files
order by file_name;
根據file_id擴展某個數據文件大小:
alter database datafile 12 resize 13312m;
要注意的是,若是使用裸設備,通常要先查看LV是否足夠,不然以上擴展命令可能出錯,查看方式以下:
查看VG信息:
ERPDB1@/home/oracle>lsvg
rootvg
oraclevg
查看VG的LV:
ERPDB1@/home/oracle>lsvg -l oraclevg
oraclevg:
LV NAME TYPE LPs PPs PVs LV STATE MOUNT POINT
db_oravote raw 1 1 1 closed/syncd N/A
db_oraocr raw 1 1 1 closed/syncd N/A
db_system raw 3 3 1 open/syncd N/A
db_sysaux raw 5 5 1 open/syncd N/A
db_undotbs1 raw 3 3 1 open/syncd N/A
db_undotbs2 raw 3 3 1 open/syncd N/A
db_temp raw 46 46 1 closed/syncd N/A
db_erp_ht2 raw 56 56 1 open/syncd N/A
db_erp2 raw 72 72 1 open/syncd N/A
查看VG的詳細信息:
ERPDB1@/home/oracle>lsvg oraclevg
VOLUME GROUP: oraclevg VG IDENTIFIER: 00c65fbf00004c000000011697e0f5f9
VG STATE: active PP SIZE: 256 megabyte(s)
VG PERMISSION: read/write TOTAL PPs: 2328 (595968 megabytes)
MAX LVs: 512 FREE PPs: 1146 (293376 megabytes)
LVs: 57 USED PPs: 1182 (302592 megabytes)
OPEN LVs: 39 QUORUM: 5
TOTAL PVs: 8 VG DESCRIPTORS: 8
STALE PVs: 0 STALE PPs: 0
ACTIVE PVs: 8 AUTO ON: no
Concurrent: Enhanced-Capable Auto-Concurrent: Disabled
VG Mode: Concurrent
Node ID: 1 Active Nodes:
MAX PPs per VG: 130048
MAX PPs per PV: 1016 MAX PVs: 128
LTG size (Dynamic): 1024 kilobyte(s) AUTO SYNC: no
HOT SPARE: no BB POLICY: relocatable
這裏可見還有1146個可用的pp ,根據pp size能計算出VG的容量。
查看某個LV的詳細信息:
ERPDB1@/home/oracle>lslv db_erp2
LOGICAL VOLUME: db_erp2 VOLUME GROUP: oraclevg
LV IDENTIFIER: 00c65fbf00004c000000011697e0f5f9.44 PERMISSION: read/write
VG STATE: active/complete LV STATE: opened/syncd
TYPE: raw WRITE VERIFY: off
MAX LPs: 512 PP SIZE: 256 megabyte(s)
COPIES: 1 SCHED POLICY: parallel
LPs: 72 PPs: 72
STALE PPs: 0 BB POLICY: relocatable
INTER-POLICY: minimum RELOCATABLE: no
INTRA-POLICY: middle UPPER BOUND: 128
MOUNT POINT: N/A LABEL: None
MIRROR WRITE CONSISTENCY: off
EACH LP COPY ON A SEPARATE PV ?: no
Serialize IO ?: NO
DEVICESUBTYPE : DS_LVZ
注意這裏能夠根據pp 的數量和大小計算能提供的容量。
擴展某個LV,增長32個pp :
p5a1@/orabak/arch/transmited#extendlv db_erp_cw 32
p5a1@/orabak/arch/transmited#ls -l /dev/rdb_erp_cw
crw-rw---- 1 oracle dba 53, 35 Dec 02 2007 /dev/rdb_erp_cw
LV增長了之後,就能夠用上面的命令擴展對應的數據文件了。
若是要新增LV,則通常這樣操做:
p5a1@/#mklv -y db_erp_index2 -T O -w n -t raw -s n -r n oraclevg 156
p5a1@/#chown oracle.dba /dev/rdb_erp_index2
p5a1@/#ls -l /dev/rdb_erp_index2
crw-rw---- 1 oracle dba 53, 58 Mar 26 20:02 /dev/rdb_erp_index2
而後增長數據文件:
SQL> ALTER TABLESPACE erp_index ADD DATAFILE '/dev/rdb_erp_index2' SIZE 4096m;
Tablespace altered.
若是是ASM環境,查看可用空間和爲表空間增長數據文件的腳本以下:
select group_number,name,total_mb,free_mb from v$asm_diskgroup;
ALTER TABLESPACE erp_index ADD DATAFILE '+DATA' SIZE 4096m;
單個數據文件的大小對性能基本沒什麼影響,單個數據文件過大就是可能有管理維護方面的潛在問題,好比數據文件損壞帶來的數據損失。
select sql_text from v$sql where sql_id='064wqx7c5b81z';
select sql_text from v$sqltext where sql_id='064wqx7c5b81z';
Col what_granted for a30
Col GRANTEE for a20
select b.privilege what_granted,
b.admin_option, a.username
from sys.dba_users a, sys.dba_sys_privs b
where a.username = b.grantee
order by 1,2;
/*
select privilege what_granted,
admin_option, grantee
from sys.dba_sys_privs
where not exists
(select 'x' from sys.dba_users
where username = grantee)
order by 1,2;
*/
COL granted_role for a50
select b.granted_role ||decode(admin_option, 'YES', ' (With Admin Option)', null) granted_role, a.username FROM sys.dba_users a, sys.dba_role_privs b
where a.username = b.grantee order by 1;
COL what_granted for a50
select granted_role || decode(admin_option, 'YES', ' (With Admin Option)', null) what_granted, grantee
from sys.dba_role_privs
where not exists (select 'x' from sys.dba_users where username = grantee)
order by 1;
select a.username, b.granted_role || decode(admin_option,'YES',
' (With Admin Option)',null) what_granted
from sys.dba_users a, sys.dba_role_privs b
where
a.username = upper('&&user_name') AND
a.username = b.grantee
UNION
select a.username, b.privilege || decode(admin_option,'YES',
' (With Admin Option)', null) what_granted
from sys.dba_users a, sys.dba_sys_privs b
where
a.username = upper('&&user_name') AND
a.username = b.grantee
UNION
select a.username,
b.table_name || ' - ' || b.privilege
|| decode(grantable,'YES',
' (With Grant Option)',null) what_granted
from sys.dba_users a, sys.dba_tab_privs b
where
a.username = upper('&&user_name') AND a.username = b.grantee
order by 1;
col PROFILE for a20
col temporary_tablespace for a20
col DEFAULT_TABLESPACE for a20
select username, profile, default_tablespace,
temporary_tablespace, created
from sys.dba_users
order by username;
select username from
dba_users
where default_tablespace =
'SYSTEM';
select username from
dba_users
where temporary_tablespace =
'SYSTEM';
SELECT 'PROMPT Compile VIEW ' || OBJECT_NAME || ' ...' || CHR(10) ||
'ALTER VIEW ' || OBJECT_NAME || ' COMPILE;' || CHR(10)
|| 'SHOW ERRORS;' || CHR(10) "--COMPILE VIEW "
FROM DBA_OBJECTS
WHERE STATUS <> 'VALID'
AND OBJECT_TYPE = 'VIEW'
ORDER BY OBJECT_NAME;
SELECT 'PROMPT Compile TRIGGER ' || OBJECT_NAME || ' ...' || CHR(10) ||
'ALTER TRIGGER ' || OBJECT_NAME || ' COMPILE;' || CHR(10)
|| 'SHOW ERRORS;' || CHR(10) "--COMPILE TRIGGER "
FROM DBA_OBJECTS
WHERE STATUS <> 'VALID'
AND OBJECT_TYPE = 'TRIGGER'
ORDER BY OBJECT_NAME;
COL –Compile_PROCEDURE for a80
SELECT 'PROMPT Compile PROCEDURE ' || OBJECT_NAME || ' ...' || CHR(10) ||
'ALTER PROCEDURE ' || OBJECT_NAME || ' COMPILE;' || CHR(10)
|| 'SHOW ERRORS;' || CHR(10) "—COMPILE_PROCEDURE "
FROM DBA_OBJECTS
WHERE STATUS <> 'VALID'
AND OBJECT_TYPE = 'PROCEDURE'
ORDER BY OBJECT_NAME;
SELECT 'PROMPT Compile FUNCTION ' || OBJECT_NAME || ' ...' || CHR(10) ||
'ALTER FUNCTION ' || OBJECT_NAME || ' COMPILE;' || CHR(10)
|| 'SHOW ERRORS;' || CHR(10) "--COMPILE FUNCTION "
FROM DBA_OBJECTS
WHERE STATUS <> 'VALID'
AND OBJECT_TYPE = 'FUNCTION'
ORDER BY OBJECT_NAME;
SELECT 'PROMPT Compile PACKAGE ' || OBJECT_NAME || ' ...' || CHR(10) ||
'ALTER PACKAGE ' || OBJECT_NAME || ' COMPILE;' || CHR(10)
|| 'SHOW ERRORS;' || CHR(10) "--COMPILE PACKAGE "
FROM DBA_OBJECTS
WHERE STATUS <> 'VALID'
AND OBJECT_TYPE = 'PACKAGE'
ORDER BY OBJECT_NAME;
column owner format a15 heading 'Synonym Owner'
column table_owner format a12 heading 'Object Owner'
column table_name format a30 heading 'Object Name'
column table_type format a6 heading 'Type'
column synonym_name format a30 heading 'Synonym Name'
column db_link format a18 heading 'DB Link'
break on owner skip page on table_type on table_owner skip 1
select ds.owner,
table_owner,
substr(dc.table_type,1,1) table_type,
ds.table_name,
synonym_name,
db_link
from sys.dba_synonyms ds,
sys.dba_catalog dc
where ds.table_owner = upper('&&user_name') and
ds.table_owner = dc.owner
and ds.table_name = dc.table_name ;
SELECT 'PROMPT Compile PACKAGE BODY ' || OBJECT_NAME || ' ...' || CHR(10) ||
'ALTER PACKAGE ' || OBJECT_NAME || ' COMPILE BODY;'
|| CHR(10) || 'SHOW ERRORS;' || CHR(10) "--COMPILE BODY"
FROM DBA_OBJECTS
WHERE STATUS <> 'VALID'
AND OBJECT_TYPE = 'PACKAGE BODY'
ORDER BY OBJECT_NAME;
/* 本命令所產生的腳本不要試圖運行,由於可能影響當前Oracle的運行 */
select 'alter index "'||owner||'"."'||index_name||
'" rebuild nologging compute statistics;' cmd
from dba_indexes
where status = 'UNUSABLE'
union
select 'alter index "'||index_owner||'"."'||index_name||
'" rebuild partition "'||partition_name||
'" nologging compute statistics;' cmd
from dba_ind_partitions
where status = 'UNUSABLE'
union
select 'alter index "'||index_owner||'"."'||index_name||
'" rebuild subpartition "'||subpartition_name||';' cmd
from dba_ind_subpartitions
where status = 'UNUSABLE'
order by 1 ;
SELECT TABLE_OWNER "表全部者" ,TABLE_NAME "表名" ,
PARTITION_NAME "分區名"
from dba_tab_partitions
WHERE TABLE_OWNER = upper('&&user_name');
SELECT INDEX_OWNER ,
INDEX_NAME ,PARTITION_NAME ,TABLESPACE_NAME
FROM dba_ind_partitions
WHERE INDEX_OWNER = upper('&&user_name') ;
COLUMN table_owner FORMAT a10 HEADING 'Table|Owner'
COLUMN table_name FORMAT a30 word_wrapped HEADING 'Table Name'
COLUMN index_name FORMAT a30 word_wrapped HEADING 'Index Name'
COLUMN index_cols FORMAT a30 word_wrapped HEADING 'Index Columns'
column redun_index FORMAT a30 word_wrapped HEADING 'Redundant Index'
COLUMN redun_cols FORMAT a30 word_wrapped HEADING 'Redundant Columns'
clear breaks
break on owner skip 0
TTITLE -
center 'Redudnant Index Analysis' skip 1 -
center '~~~~~~~~~~~~~~~~~~~~~~~~' skip 2
SELECT ai.table_owner table_owner,
ai.table_name table_name,
ai.index_name index_name,
ai.columns index_cols,
bi.index_name redun_index,
bi.columns redun_cols
FROM
( SELECT a.table_owner,
a.table_name,
a.index_name,
MAX(DECODE(column_position, 1,
SUBSTR(column_name,1,30),NULL)) ||
MAX(DECODE(column_position, 2,',
'||SUBSTR(column_name,1,30),NULL)) ||
MAX(DECODE(column_position, 3,',
'||SUBSTR(column_name,1,30),NULL)) ||
MAX(DECODE(column_position, 4,',
'||SUBSTR(column_name,1,30),NULL)) ||
MAX(DECODE(column_position, 5,',
'||SUBSTR(column_name,1,30),NULL)) ||
MAX(DECODE(column_position, 6,',
'||SUBSTR(column_name,1,30),NULL)) ||
MAX(DECODE(column_position, 7,',
'||SUBSTR(column_name,1,30),NULL)) ||
MAX(DECODE(column_position, 8,',
'||SUBSTR(column_name,1,30),NULL)) ||
MAX(DECODE(column_position, 9,',
'||SUBSTR(column_name,1,30),NULL)) ||
MAX(DECODE(column_position,10,',
'||SUBSTR(column_name,1,30),NULL)) ||
MAX(DECODE(column_position,11,',
'||SUBSTR(column_name,1,30),NULL)) ||
MAX(DECODE(column_position,12,',
'||SUBSTR(column_name,1,30),NULL)) ||
MAX(DECODE(column_position,13,',
'||SUBSTR(column_name,1,30),NULL)) ||
MAX(DECODE(column_position,14,',
'||SUBSTR(column_name,1,30),NULL)) ||
MAX(DECODE(column_position,15,',
'||SUBSTR(column_name,1,30),NULL)) ||
MAX(DECODE(column_position,16,',
'||SUBSTR(column_name,1,30),NULL)) columns
FROM dba_ind_columns a
WHERE a.index_owner = upper('&&user_name')
GROUP BY a.table_owner,
a.table_name,
a.index_owner,
a.index_name) ai,
( SELECT b.table_owner,
b.table_name,
b.index_name,
MAX(DECODE(column_position, 1,
SUBSTR(column_name,1,30),NULL)) ||
MAX(DECODE(column_position, 2,',
'||SUBSTR(column_name,1,30),NULL)) ||
MAX(DECODE(column_position, 3,',
'||SUBSTR(column_name,1,30),NULL)) ||
MAX(DECODE(column_position, 4,',
'||SUBSTR(column_name,1,30),NULL)) ||
MAX(DECODE(column_position, 5,',
'||SUBSTR(column_name,1,30),NULL)) ||
MAX(DECODE(column_position, 6,',
'||SUBSTR(column_name,1,30),NULL)) ||
MAX(DECODE(column_position, 7,',
'||SUBSTR(column_name,1,30),NULL)) ||
MAX(DECODE(column_position, 8,',
'||SUBSTR(column_name,1,30),NULL)) ||
MAX(DECODE(column_position, 9,',
'||SUBSTR(column_name,1,30),NULL)) ||
MAX(DECODE(column_position,10,',
'||SUBSTR(column_name,1,30),NULL)) ||
MAX(DECODE(column_position,11,',
'||SUBSTR(column_name,1,30),NULL)) ||
MAX(DECODE(column_position,12,',
'||SUBSTR(column_name,1,30),NULL)) ||
MAX(DECODE(column_position,13,',
'||SUBSTR(column_name,1,30),NULL)) ||
MAX(DECODE(column_position,14,',
'||SUBSTR(column_name,1,30),NULL)) ||
MAX(DECODE(column_position,15,',
'||SUBSTR(column_name,1,30),NULL)) ||
MAX(DECODE(column_position,16,',
'||SUBSTR(column_name,1,30),NULL)) columns
FROM dba_ind_columns b
GROUP BY b.table_owner,
b.table_name,
b.index_owner,
b.index_name ) bi
WHERE ai.table_owner = bi.table_owner
AND ai.table_name = bi.table_name
AND ai.columns LIKE bi.columns || ',%'
AND ai.columns <> bi.columns
ORDER BY ai.table_owner,
ai.table_name,
bi.index_name
/
Select job,next_sec,failures ,broken from DBA_jobs
WHERE LOG_USER= upper('&&user_name');
SELECT OWNER ,NAME , TABLE_NAME , REFRESH_METHOD ,
LAST_REFRESH , ERROR , NEXT ,START_WITH
FROM DBA_SNAPSHOTS
WHERE OWNER= upper('&&user_name');
--set lines 9999 trimsp on pages 0 echo off feed off ver off sqlbl on
set heading off
select decode(line,1,'create or replace '||text,text)
from DBA_source where owner = upper('&&user_name')
order by owner,name,line
set heading on
/* 太長的結果致使查詢無效 :
ORA-01489: result of string concatenation is too long
*/
set lines 9999 trimsp on pages 0 echo off feed off ver off sqlbl on
set heading off
select decode(line,1,'create or replace '||text,text)
from DBA_source
where owner = upper('&&user_name')
and type = 'PACKAGE'
order by line;
prompt
select decode(line,1,'create or replace '||text,text)
from DBA_source
where owner = upper('&&user_name')
and type = 'PACKAGE BODY'
order by line;
set heading on
--
select 'select dbms_metadata.get_ddl('||chr(39)||'PROCEDURE'||chr(39)||','
||chr(39)|| object_name ||chr(39)||','||chr(39)||owner||chr(39)||') from dual ;'
from dba_objects
where owner='&&user_name' AND object_type='TRIGGER'
/
undo 表空間應該是限制大小的,通常用個10g左右,也最好建立兩個undo tablespace,數據庫出問題時,也能夠進行切換undo
0)表空間管理應該採用local 的管理方式
0)段空間管理採用mannul管理方式,這也是oracle對undo tablespace默認的管理方式
0)還有undo_management = AUTO
0)undo_retention設置能夠比默認值稍微小一些,這樣也有利於undo tablespace的空間回收
Select occupant_name, occupant_desc, space_usage_kbytes from v$sysaux_occupants where occupant_name like '%AWR%' ;
select * from v$sgastat
select * from v$sga;
column buffers_for_estimate format 999,999,999 heading 'Buffers'
column estd_physical_read_factor format 999.90 heading 'Estd Phys|Read Fact'
column estd_physical_reads format 999,999,999 heading 'Estd Phys| Reads'
SELECT size_for_estimate, buffers_for_estimate,
estd_physical_read_factor, estd_physical_reads
FROM V$DB_CACHE_ADVICE
WHERE name = 'DEFAULT'
AND block_size =
(SELECT value
FROM V$PARAMETER
WHERE name = 'db_block_size')
AND advice_status = 'ON';
在V$SESSION_WAIT中找到的東西如今在V$SESSION中也能夠找到。
WAIT_TIME = 0 means that it's waiting
WAIT_TIME > 0 means that it previously waited this many ms
select event, sum(decode(wait_time,0,1,0)) "Waiting Now",
sum(decode(wait_time,0,0,1)) "Previous Waits",
count(*) "Total"
from v$session_wait
group by event
order by count(*);
SELECT /*+ ordered */ sid, event, owner, segment_name, segment_type,p1,p2,p3
FROM v$session_wait sw, dba_extents de
WHERE de.file_id = sw.p1
AND sw.p2 between de.block_id and de.block_id+de.blocks - 1
AND (event = 'buffer busy waits' OR event = 'write complete waits')
AND p1 IS NOT null
ORDER BY event,sid;
找出這兩個等待事件對應的段名和段類型。
從歷史表中取值,不只僅是當前buffer中的數據。
col name for a30
col p1 for a10
col p2 for a10
col p3 for a10
select event#,name,parameter1 p1,parameter2 p2,parameter3 p3
from v$event_name
where name in ('buffer busy waits', 'write complete waits');
select sid, event, total_waits, time_waited, event_id
from v$session_event
where time_waited > 0
order by time_waited;
一共多少個session發生過等待事件
select distinct(sid) from v$session_event where time_waited>0;
select sid, wait_class, total_waits
from v$session_wait_class order by sid;
select wait_class, total_waits
from v$system_wait_class
order by total_waits desc;
select b.privilege what_granted,b.admin_option, a.username
from sys.dba_users a, sys.dba_sys_privs b
where a.username = b.grantee
and username='SCOTT'
order by 1,2;
select b.owner || '.' || b.table_name obj,
b.privilege what_granted, b.grantable,a.username
from sys.dba_users a, sys.dba_tab_privs b
where a.username = b.grantee
and a.username='SCOTT'
order by 1,2,3;
select b.granted_role ||decode(admin_option,'YES','(With Admin Option)',null)
what_granted from sys.dba_users a,sys.dba_role_privs b
where a.username=b.grantee
and username='SCOTT'
order by 1;
select a.username,
b.granted_role || decode(admin_option,'YES',' (With Admin Option)',null)
what_granted
from sys.dba_users a, sys.dba_role_privs b
where a.username = b.grantee
and username='SCOTT'
UNION
select a.username,
b.privilege || decode(admin_option,'YES',' (With Admin Option)', null)
what_granted
from sys.dba_users a, sys.dba_sys_privs b
where a.username = b.grantee
and username='SCOTT'
UNION
select a.username,
b.table_name || ' - ' || b.privilege|| decode(grantable,'YES',' (With Grant Option)',null) what_granted
from sys.dba_users a, sys.dba_tab_privs b
where a.username = b.grantee
and username='SCOTT'
order by 1;
Select username, profile, default_tablespace,
temporary_tablespace, created
from sys.dba_users
where username='SCOTT'
order by username;
Select event, total_waits,
total_timeouts,(time_waited / 100) tot_time,
(average_wait / 100) Avg_time
from v$system_event
order by total_waits desc;
select object_name, statistic_name, value
from v$segment_statistics
where value > 100
order by value;
select username, count(*)
from v$session
group by username;
V$SESSION視圖中用戶名NULL的行是Oracle的後臺進程。
技巧:
肯定使用了多會話的用戶,並斷定是一個管理問題(用戶使用了多終端)仍是一個系統問題(會話沒有被清除,或者產生了多餘的進程)。
select username, sid, serial#, program, terminal
from v$session
where username is not null;
alter system kill session '144,9';
咱們發現當一個session被kill掉之後,該session的paddr被修改,若是有多個session被kill,那麼多個session
的paddr都被更改成相同的進程地址:
在這種狀況下,不少時候,資源是沒法釋放的,咱們須要查詢spid,在操做系統級來kill這些進程.
可是因爲此時v$session.paddr已經改變,咱們沒法經過v$session和v$process關聯來得到spid
那還能夠怎麼辦呢?
如今咱們得到了進程地址,就能夠在v$process中找到spid,而後可使用Kill或者orakill在系統級來殺掉這些進程.
當在Oracle中kill session之後, Oracle只是簡單的把相關session的paddr 指向同一個虛擬地址.
此時v$process和v$session失去關聯,進程就此中斷.
而後Oracle就等待PMON去清除這些Session.因此一般等待一個被標記爲Killed的Session退出須要花費很長的時間.
若是此時被Kill的process,從新嘗試執行任務,那麼立刻會收到進程中斷的提示,process退出,此時Oracle會當即啓動PMON
來清除該session.這被做爲一次異常中斷處理.
select a.username username, a.sid sid, a.serial# serial,b.id1 id1, c.sql_text sqltext
from v$session a, v$lock b, v$sqltext c
where b.id1 in
(select distinct e.id1
from v$session d, v$lock e
where d.lockwait = e.kaddr)
and a.sid = b.sid
and c.hash_value = a.sql_hash_value
and b.request = 0;
select /*+ ordered */ username, v$lock.sid, trunc(id1/power(2,16)) rbs,
bitand(id1,to_number('ffff','xxxx'))+0 slot,id2 seq, lmode, request
from v$lock, v$session
where v$lock.type = 'TX'
and v$lock.sid = v$session.sid;
查詢 的是行級排他鎖。
一旦發現某些用戶或者系統中的查詢存在問題,查詢V$ACCESS能夠爲您指出有潛在問題的對象(可能缺乏索引)。當想修改一個特殊的對象,或者須要知道在一個給定的時間點上誰在使用該對象時,它也很是有幫助。
select a.sid, a.username, b.owner, b.object, b.type
from v$session a, v$access b
where a.sid = b.sid
and username='SCOTT'
/
用戶正在訪問的對象。對於已經訪問過的對象,不會出如今結果集中。
經過查詢V$ACCESS視圖可查看在給定的時間點上用戶所訪問的全部對象。這有助於查明有問題的對象,在想修改一個特定的對象時也頗有用(查找誰在訪問它)。然而,當系統有一個很大的共享池和數百個用戶時,這個操做的開銷將很大。
得到詳細的用戶信息
select a.username, c.name, sum(b.value) value
from v$session a, v$sesstat b, v$statname c
where a.sid = b.sid
and b.statistic# = c.statistic#
and b.value != 0
and username='SCOTT'
group by name, username;
select a.sid, a.username, s.sql_id
from v$session a, v$sqltext s
where a.sql_address = s.address
and a.sql_hash_value = s.hash_value
order by a.username, a.sid, s.piece;
這就很是容易發現哪些用戶執行了大量的物理磁盤和內存讀操做。
select a.username, b.block_gets, b.consistent_gets,
b.physical_reads, b.block_changes, b.consistent_changes
from v$session a, v$sess_io b
where a.sid = b.sid
order by a.username;
用以下SQL查詢到正在運行的事務,如其used_urec字段不斷增長,說明該事物正在繼續,若是該字段不斷降低,說明該事物正在回滾。
SQL> SELECT a.sid, a.username, b.xidusn, b.used_urec, b.used_ublk
FROM v$session a, v$transaction b
WHERE a.saddr = b.ses_addr;
根據session id能夠查到當前session正在執行的事務信息
select * from v$transaction where addr in (select taddr from v$session where sid=&sid );
select a.sid,a.serial#,a.user#,a.username,b.addr,b.USED_UBLK,b.USED_UREC from v$transaction b,v$session a where b.addr in (select a.taddr from v$session a where a.sid = &sid);
USED_UBLK和USED_UREC能夠看到事務進行到什麼程度了
重複查詢這兩個值,能夠看到變化,能夠估計事務的進度,尤爲是長時間的回滾操做,當這兩個值爲0,回滾也就完成了
select spid from v$process p, v$session s where s.audsid=userenv('sessionid') and s.paddr=p.addr;
select spid from v$process p join v$session s on p.addr=s.paddr and s.audsid=userenv('sessionid');
--**查看當前用戶的trace file路徑
/*
select p.value || '\' || t.instance || '_ora_' || ltrim(to_char(p.spid,'fm99999')) || '.trc'
from v$process p, v$session s, v$parameter p, v$thread twhere p.addr = s.paddr and s.audsid= userenv('sessionid') and p.name = 'user_dump_dest';
*/
select a.name,a.checkpoint_change# start_SCN
,b.checkpoint_change# last_SCN
from v$datafile_header a, v$datafile b
where a.file#=b.file#
select name,completion_time,status from v$archived_log;
STATUS=A Available,表示歸檔日誌文件有效
STATUS=U Unavailable,表示歸檔日誌文件無效
STATUS=D Deleted,表示歸檔日誌已經被刪除
STATUS=X eXpired,表示歸檔日誌被用戶使用操做系統的命令刪除了
select MEMBER,GROUP#,STATUS from v$logfile;
status null表示在使用
select MEMBERS,GROUP#,STATUS from v$log;
MEMBERS GROUP# STATUS
---------- ---------- ----------
3 1 ACTIVE
3 2 ACTIVE
3 3 CURRENT
--**
select pro.spid from v$session ses,v$process pro where ses.sid=xxx and ses.paddr=pro.addr;
select s.sid,s.serial# from v$session s,v$process p where s.paddr=p.addr and p.spid='xxx';
SELECT SID,SERIAL#, USERNAME,MACHINE
FROM v$session b
WHERE b.paddr = (SELECT addr
FROM v$process c
WHERE c.spid = '&pid');
經過sid找出執行的sql語句
1 SELECT SID,SERIAL#, USERNAME,MACHINE
FROM v$session b
WHERE b.paddr = (SELECT addr
FROM v$process c
WHERE c.spid = '&pid');
2 select sql_address,sql_hash_value,sql_id from v$session where sid=20;
3 select sql_fulltext from V$sqlarea where sql_id='301r15qus4kp1'
select wait_class, event, sid, state, wait_time, seconds_in_wait
from v$session_wait
where wait_class='Application'
order by wait_class, event, sid;
select wait_class, event, sid, state, wait_time, seconds_in_wait
from v$session_wait
order by wait_class, event, sid;
select * from v$locked_object;
若是查詢結果爲no rows selected,說明數據庫中沒有死鎖。不然說明數據庫中存在死鎖
SELECT machine , terminal FROM V$SESSION;
Select sql_fulltext from v$sqlarea where sql_id='7pww837hx8qj5';
column column_name format a36
column sql_text format a99
select dbms_metadata.get_ddl('TABLE','&1') from dual;
select dbms_metadata.get_ddl('INDEX','&1') from dual;
Select startup_time from v$instance; 固然 從還原中恢復的時間是不算得
select b.sql_text "SQL Text"
from v$session a, v$sqltext b
where a.sql_address = b.address
and a.sql_hash_value = b.hash_value
and (a.SID = &sid)
order by piece;
select index_name,table_name,column_name from user_ind_columns
where table_name=upper('categoryarticleassign');