ORACLE系统视图说明
1、静态视图
DBA_****** 以DBA_开头的静态视图包含数据库中整个对象的信息,该视图只能由管理员查询
ALL_****** 以ALL_开头的静态视图包含某个用户所能看到的全部数据库信息,以及被授权访问的信息。
USER_****** 以USER_开头的静态视图包含当前用户访问的数据库对象信息。它是以ALL_为前缀的视图的子集。
2、动态性能视图
动态性能视图是以V$为前缀
##############################
-- 常用视图
select * from v$fixed_table --当前数据库中所有动态性能视图
select * from dba_data_files --数据文件信息
select * from dba_free_space --剩余空间信息
--dba_free_space 显示的是有free 空间的tablespace ,如果一个tablespace 的free 空间不连续,那每段free空间都会在dba_free_space中存在一条记录。
--如果一个tablespace 有好几条记录,说明表空间存在碎片,当采用字典管理的表空间碎片超过500就需要对表空间进行碎片整理。
select * from dba_segments --数据段信息 可以查某个用户 或某个表、索引等占用的空间
--锁表相关的五张表 SELECT * FROM v$locked_object;
SELECT * FROM v$session;
SELECT * FROM v$process;
SELECT * FROM all_objects;
SELECT * FROM v$sqlarea;
---------- 常用查询 ----------
--表空间使用率
select a.tablespace_name "表空间名",totalspace "总空间M",freespace "剩余空间M",round((1-freespace/totalspace)*100,2) "使用率%"
from (select tablespace_name,round(sum(bytes)/1024/1024) totalspace from dba_data_files group by tablespace_name) a,
(select tablespace_name,round(sum(bytes)/1024/1024) freespace from dba_free_space group by tablespace_name) b
where a.tablespace_name=b.tablespace_name;
--查看锁表 主要字段
SELECT s.SID,l.SESSION_ID lock_session_id,s.SESSION_EDITION_ID,s.SERIAL#,p.PID,p.SPID,o.OBJECT_NAME,o.OBJECT_TYPE,s.MACHINE,s.CLIENT_INFO,s.LOGON_TIME,
l.OS_USER_NAME,s.OSUSER,s.AUDSID,s.USERNAME,s.COMMAND,s.STATUS,s.PROGRAM,
s.SQL_EXEC_START,s.PREV_EXEC_START,s.EVENT,s.P2TEXT,s.P3TEXT,s.WAIT_TIME,s.SECONDS_IN_WAIT,s.STATE,
q1.SQL_TEXT,q1.SQL_FULLTEXT,q1.LAST_ACTIVE_TIME,q2.SQL_TEXT prev_sql_text,q2.SQL_FULLTEXT prev_SQL_FULLTEXT,q2.LAST_ACTIVE_TIME prev_LAST_ACTIVE_TIME
FROM v$locked_object l
LEFT JOIN v$session s ON l.SESSION_ID=s.SID
LEFT JOIN v$process p ON p.ADDR=s.PADDR
LEFT JOIN all_objects o ON o.OBJECT_ID=l.OBJECT_ID
LEFT JOIN v$sqlarea q1 ON q1.SQL_ID = s.SQL_ID
LEFT JOIN v$sqlarea q2 ON q2.SQL_ID=s.PREV_SQL_ID
--查看会话 主要字段
SELECT s.SID,l.SESSION_ID lock_session_id,s.SESSION_EDITION_ID,s.SERIAL#,p.PID,p.SPID,o.OBJECT_NAME,o.OBJECT_TYPE,s.MACHINE,s.CLIENT_INFO,s.LOGON_TIME,
l.OS_USER_NAME,s.OSUSER,s.AUDSID,s.USERNAME,s.COMMAND,s.STATUS,s.PROGRAM,
s.SQL_EXEC_START,s.PREV_EXEC_START,s.EVENT,s.P2TEXT,s.P3TEXT,s.WAIT_TIME,s.SECONDS_IN_WAIT,s.STATE,
q1.SQL_TEXT,q1.SQL_FULLTEXT,q1.LAST_ACTIVE_TIME,q2.SQL_TEXT prev_sql_text,q2.SQL_FULLTEXT prev_SQL_FULLTEXT,q2.LAST_ACTIVE_TIME prev_LAST_ACTIVE_TIME
FROM v$session s
LEFT JOIN v$locked_object l ON l.SESSION_ID=s.SID
LEFT JOIN v$process p ON p.ADDR=s.PADDR
LEFT JOIN all_objects o ON o.OBJECT_ID=l.OBJECT_ID
LEFT JOIN v$sqlarea q1 ON q1.SQL_ID = s.SQL_ID
LEFT JOIN v$sqlarea q2 ON q2.SQL_ID=s.PREV_SQL_ID
ORDER BY machine,logon_time desc
-- 二、再查冻表情况
--查找冻表
select sid,seconds_in_wait,state,wait_time_micro from v$session_wait where event='library cache lock';
--1、在PL/SQL软件中分别用下列语句杀死冻表会话。100*mode+namespace -599 18516 06:02 -317 2886 10:04 -33 46427 14:04 SELECT SPARE4 FROM SYS.OPTSTAT_HIST_CONTROL$ WHERE SNAME = :B1
select * from v$session where sid =&sid
alter system kill session '&SID,&SERIAL#'
--2、如果杀不死,用下面方法
--2根据SID找出SPID
select spid, osuser, s.program
from v$session s,v$process p
where s.paddr=p.addr and s.sid=&sid
-- 再在LINUX下用kill -9 &spid语句杀。
|