您的位置:首页 > 数据库 > Oracle

ORACLE系统视图

2015-07-30 15:59 579 查看
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语句杀。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: