1. 用户不能直接访问v$的视图,v$视图只有sys可以访问。
2. 如果我们要访问系统视图(v$开头的),只能新创建一个v_$开头的视图,
然后创建同义词与系统视图一样的名字,再访问这个别名视图,达到访问系统视图的目的。
(每个v$视图的底层视图定义,从技术角度讲,这些视图从没有被创建,它们的定义只是以二进制形式硬编码,
可以通过名为 v$fixed_view_definition 的v$视图查看,视图是通过选取一个或多个x$表中的信息来创建的)
例如:
create or replace view gv_$datafile as --创建新的视图v_$命名
select * from gv$datafile; --sys才能访问的系统视图(注:系统视图是根据x$表创建的)
create or replace public synonym gv$datafile for gv_$datafile; --创建同义词,与系统视图名一样,以达到访问系统视图的目的
3. 要获得某个版本的oracle的所有v$视图的数量,可以查询 v$fixed_table 视图.
例如:
select * from v$fixed_table where lower(name) like 'v%';
4. 从oracle8以后引入了gv$视图,gv$视图(全局v$)与v$视图基本一样,只是附加了一个实例id列。
例如:
select * from v$fixed_table where lower(name) like 'gv%';
5. 为了获得组成v$视图的x$表的列表,必须访问 v$fixed_view_definition 视图.
简单的说, 访问 v$fixed_view_definition 视图可以获得组成V$视图的底层X$表的所有信息。
例如:
select * from v$fixed_view_definition where lower(view_name) = 'gv$fixed_table'; --这里之所以不是查询 v$fixed_table, 是因为 v$fixed_table 也是访问 gv$fixed_table 视图
6. 从oracle8以后,底层的X$表存在索引,以使在V$视图上执行的查询可以更快地执行.
可以通过 v$indexed_fixed_column 视图来查看在底层X$表上的索引信息.
7. DBA_视图是从Oracle底层数据库的表中得到的(当然 也有些 是通过访问X$表得到的),并非是从X$表或者V$视图得到的。
下面的例子通过访问 dba_views 来查看DBA_视图是由哪些对象组成的。
例如:
select * from dba_views where view_name='DBA_IND_PARTITIONS';
8. --查询当前被锁定的用户,Oracle进程是否真地被锁定了,还是仅仅运行得比较慢.
--您还能够识别当前的语句是否正在执行锁定用户的操作
select /*+ ordered */ b.username, b.serial#, d.id1, a.sql_text
from v$lock d, v$session b, v$sqltext a
where b.lockwait = d.kaddr
and a.address = b.sql_address
and a.hash_value = b.sql_hash_value;
--查询是哪个用户造成了前一个用户被锁定的问题
select /*+ ordered */ a.serial#, a.sid, a.username, b.id1, c.sql_text
from v$lock b, v$session a, v$sqltext c
where b.id1 in (select /*+ ordered */
distinct e.id1
from v$lock e, v$session d
where d.lockwait = e.kaddr)
and a.sid = b.sid
and c.hash_value = a.sql_hash_value
and b.request = 0;