数据库管理员平常工做中必备的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');