- 浏览: 328461 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (224)
- Java (34)
- Test (3)
- Linux/Unix (32)
- Windows (8)
- Oracle (78)
- Oracle Backup & Recovery (3)
- SqlServer (1)
- Database (3)
- Open Source (2)
- Server Management (1)
- Apache ActiveMQ (1)
- IBM WebSphere MQ (7)
- IBM WAS (15)
- 其它 (11)
- UML (1)
- Tools (1)
- Reference (0)
- Spring (11)
- Hibernate (5)
- VBScript (3)
- Network (1)
- Securities (2)
- Maven (6)
- logging (2)
- Web (1)
- AWS (3)
最新评论
sys : x$(内存对象))--->v$(内存对象)---->v_$(view)----->v$(public sysnonym)
一. 动态性能视图
1.1 动态性能图
动态性能视图属于数据字典,系统管理员用户 SYS 可以访问它们。 关于这部分的内容,参考我的Blog:
Oracle 数据字典
http://blog.csdn.net/tianlesoftware/archive/2010/09/04/5862508.aspx
动态性能视图在数据库打开和使用时不断进行更新,而且它们的内容主要与性能有关。虽然这些视图很像普通的数据库表,但它们不允许用户直接进行修改。这些视图提供内部磁盘结构和内存结构方面的数据。用户可以对这些视图进行查询,以便对系统进行管理与优化。
CATALOG.SQL 文件包含这些视图的定义以及公用同义词,必须运行CATALOG.SQL 创建这些视图及同义词。升级系统也后要执行这个脚本.
当数据库管理员启动某个例程时,数据库会自动建立动态性能视图;
当停止某个例程时,数据库又会自动删除这些动态性能视图。
数据字典的信息是从数据文件中取得; 而动态性能视图的信息则是从SGA内存以及控制文件中取得。所以,两者所反映的信息还是有很大差异的。数据库管理员利用这些动态性能视图,可以了解数据库运行的一些基本信息,为我们进行数据库维护以及数据库性能优化提供一些数据上的支持。
一般情况下,我们可以通过动态性能数据掌握两类重要的数据库运行信息。
(1)了解数据库运行相关的性能数据,如内存的使用量、磁盘排序发生的机率等等。
(2)取得与磁盘和内存结构相关的其他信息。
在通常情况下,数据库不同的状态其动态性能视图还是有比较大的差异:
(1)数据库处于“NOMOUNT”状态。数据库启动例程时,Oracle数据库会打开参数文件,分配SGA内存并启动后台进程。此时,其实数据库还没有挂栽。此时,动态性呢视图收集的信息来源只有是SGA,而不会从控制文件中收集相关的信息。所以,动态性能视图的数量要少得多。
(2)当数据库处于MOUNT状态时,数据库会根据初始化参数打开所有的控制文件。所以,当例程处于Mount状态时,动态性能视图其收集到的信息就要第一个状态多的多。因为此时,动态性能视图还会去收集控制文件的相关信息。不过,此时动态性能视图所收集到的资料还不是最全的。
(3)当用户打开数据库时,Oracle系统会根据控制文件所记载的信息去打开所有的数据库文件以及重做日志。此时,数据库管理员除了可以从 SGA和控制文件中获取信息的动态性能视图外,还可能访问与Oracle数据库性能相关的动态性能视图,如会话等待时间等视图。另外需要注意一点,就是只有在这个状态时,我们才能够访问数据库的数据字典视图。
SYS owns the dynamic performance tables, whose names begin with V_$. Views are created on these tables, and then public synonyms prefixed with V$. For example, the V$DATAFILE view contains information about data files. The V$FIXED_TABLE view contains information about all of the dynamic performance tables and views.
从这段描述里,我们可以理解,通过V$FIXED_TBLE 视图可以查看几乎所有的动态性能表和视图。 V$是V_$的同义词。
1.2 V$, V_$, GV$, X$ 视图说明
1.2.1 X$ 表
X$表包含了特定实例的各方面的信息,是Oracle数据库的运行基础,如当前的配置信息,连接到实例的会话,以及丰富而有价值的性能信息。 X$表并不是驻留在数据库文件的永久表或临时表。X$表仅仅驻留在内存中,当实例启动时,由Oracle应用程序动态创建,在内存中进行实时的维护。 它们中的大多数至少需要装载或已经打开的数据库。X$表为SYS用户所拥有,并且是只读的。 不能进行DML(更新,插入,删除)。X$表对数据库来说至关重要,所以Oracle不允许SYSDBA之外的用户直接访问,显示授权不被允许。
可以从v$fixed_table中查到X$:
SQL> select count(*) from v$fixed_table where name like 'X$%';
COUNT(*)
----------
945
在Oracle 11g共有945个X$表。
关于X$表,其创建信息我们也可以通过bootstrap$表查看,该表中记录了数据库启动的基本及驱动信息。
bootstrap$ 实际上存储的是数据字典的基表的定义,如OBJ$,C_OBJ$,TAB$等等。Oracle通过读取这些定义创建数据字典的基表,进而创建数据字典。
SQL> select * from bootstrap$;
bootstrap$ 部分比较深,有空在研究。
1.2.2 GV$ 和V$ 同义词
1.2.2.1 V$ 视图
动态性能视图由前缀V_$标识。这些视图的公用同义词具有前缀V$。数据库管理员或用户应该只访问V$对象,而不是访问V_$对象。动态性能视图由企业管理器和Oracle Trace 使用,Oracle Trace 是访问系统性能信息的主要界面。一旦实例启动,从内存读取数据的 V$视图就可以访问了。
注意: 每个V$视图都包含类似语句:
where inst_id = USERENV('Instance')
用于限制返回当前实例信息。
这一点我们可以通过V$FIXED_VIEW_DEFINITION 视图 来验证。如:
SQL> select view_definition from v_$fixed_view_definition where view_name='V$FIXED_TABLE';
VIEW_DEFINITION
-----------------------------------------------------------------------------------------------------
select NAME , OBJECT_ID , TYPE , TABLE_NUM from GV$FIXED_TABLE where inst_id = USERENV('Instance')
通过v$fixed_table 查询V$视图信息:
SQL> select count(*) from v$fixed_table where name like 'V$%';
COUNT(*)
----------
525
1.2.2.2 GV$ 视图
从Oracle8开始,GV$视图开始被引入, GV$(Global V$,全局V$)。除了一些特例以外(如:V$CACHE_LOCK、V$LOCK_ACTIVITY、V$LOCKS_WITH_COLLISIONS和V$ROLLNAME),每个V$视图都有一个对应的GV$视图存在。在并行服务器环境下,可查询GV$视图从所有限定实例中检索V$视图的信息。V$视图和GV$视图是相同的,V$比GV$只是少了INST_ID字段。INST_ID 列显示从其获得相关的V$视图信息的实例号。INST_ID 列可用作一个从可得到的实例集检索V$信息的过滤器。
如:
SQL>SELECT * FROM GV$LOCK WHERE INST_ID = 2;
表示从实例2上的V$ 视图中检索信息。
通过v$fixed_table 查询GV$视图信息:
SQL> select count(*) from v$fixed_table where name like 'GV$%';
COUNT(*)
----------
496
从查询结果看,GV$是496个,V$是525个,从这个结果可以证明:不是每个V$同义词都有对应的GV$同义词。
1.2.2.3 V$FIXED_VIEW_DEFINITION 视图
通过 V$FIXED_VIEW_DEFINITION 视图可以获取组成V$视图的底层X$表的所有信息。
示例1.查看V$FIXED_TABLE 视图定义
SQL> select view_definition from v$fixed_view_definition where view_name='V$FIXED_TABLE';
VIEW_DEFINITION
--------------------------------------------------------------------------------------------------------
select NAME , OBJECT_ID , TYPE , TABLE_NUM from GV$FIXED_TABLE where inst_id = USERENV('Instance')
从这里,我们看到V$FIXED_TABLE基于GV$FIXED_TABLE创建。
示例2.查看GV$FIXED_TABLE定义
SQL> select view_definition from v$fixed_view_definition where view_name='GV$FIXED_TABLE';
VIEW_DEFINITION
-------------------------------------------------------------------------------------------------------
select inst_id,kqftanam, kqftaobj, 'TABLE', indx from x$kqfta
union all select inst_id,kqfvinam, kqfviobj, 'VIEW', 65537 from x$kqfvi
union all select inst_id,kqfdtnam, kqfdtobj, 'TABLE', 65537 from x$kqfdt
从这里,我们找到了GV$FIXED_TABLE视图的创建语句,该视图基于X$表创建。
示例3. 研究下V$PARAMETER 视图
SQL> select view_definition from v$fixed_view_definition a where a.VIEW_NAME='V$PARAMETER';
VIEW_DEFINITION
-----------------------------------------------------------------------------------------------------------------------
/* Formatted on 2010/9/4 13:37:37 (QP5 v5.115.810.9015) */
SELECT NUM,
NAME,
TYPE,
VALUE,
DISPLAY_VALUE,
ISDEFAULT,
ISSES_MODIFIABLE,
ISSYS_MODIFIABLE,
ISINSTANCE_MODIFIABLE,
ISMODIFIED,
ISADJUSTED,
ISDEPRECATED,
ISBASIC,
DESCRIPTION,
UPDATE_COMMENT,
HASH
FROM GV$PARAMETER
WHERE inst_id = USERENV ('Instance')
从这里,我们看到V$PARAMETER 是基于GV$PARAMETER 构造的。
SQL> select view_definition from v$fixed_view_definition a where a.VIEW_NAME='GV$PARAMETER';
VIEW_DEFINITION
--------------------------------------------------------------------------------------------------------------------------------------------------
/* Formatted on 2010/9/4 13:38:10 (QP5 v5.115.810.9015) */
SELECT x.inst_id,
x.indx + 1,
ksppinm,
ksppity,
ksppstvl,
ksppstdvl,
ksppstdf,
DECODE (BITAND (ksppiflg / 256, 1), 1, 'TRUE', 'FALSE'),
DECODE (BITAND (ksppiflg / 65536, 3),
1, 'IMMEDIATE',
2, 'DEFERRED',
3, 'IMMEDIATE',
'FALSE'),
DECODE (BITAND (ksppiflg, 4),
4, 'FALSE',
DECODE (BITAND (ksppiflg / 65536, 3), 0, 'FALSE', 'TRUE')),
DECODE (BITAND (ksppstvf, 7),
1, 'MODIFIED',
4, 'SYSTEM_MOD',
'FALSE'),
DECODE (BITAND (ksppstvf, 2), 2, 'TRUE', 'FALSE'),
DECODE (BITAND (ksppilrmflg / 64, 1), 1, 'TRUE', 'FALSE'),
DECODE (BITAND (ksppilrmflg / 268435456, 1), 1, 'TRUE', 'FALSE'),
ksppdesc,
ksppstcmnt,
ksppihash
FROM x$ksppi x, x$ksppcv y
WHERE (x.indx = y.indx) AND BITAND (ksppiflg, 268435456) = 0
AND ( (TRANSLATE (ksppinm, '_', '#') NOT LIKE '##%')
AND ( (TRANSLATE (ksppinm, '_', '#') NOT LIKE '#%')
OR (ksppstdf = 'FALSE')
OR (BITAND (ksppstvf, 5) > 0)))
在这里我们看到GV$PARAMETER来源于x$ksppi, x$ksppcv两个X$表, x$ksppi, x$ksppcv 基本上包含所有数据库可调整参数.
v$parameter展现的是不包含"_"开头的参数。以"_"开头的参数我们通常称为隐含参数,一般不建议修改,但很多因为功能强大经常使用而广为人知。
关于参数的更多内容参考Blog:
Oracle 参数分类 和 参数的查看方法
http://blog.csdn.net/tianlesoftware/archive/2010/05/13/5583655.aspx
感兴趣的,可以自己研究下V$FIXED_VIEW_DEFINITION 视图,它是我们研究数据字典的一个入口。
1.2.3 GV_$, V_$视图
动态性能的视图是通过catalog.sql创建。当catalog.sql运行时:
create or replace view v_$fixed_table as select * from v$fixed_table;
create or replace public synonym v$fixed_table for v_$fixed_table;
create or replace view gv_$fixed_table as select * from gv$fixed_table;
create or replace public synonym gv$fixed_table for gv_$fixed_table;
我们注意到, 先创建 V_$和GV_$ 视图,然后基于V_$视图和GV_$视图来创建V$和GV$同义词。
所以,实际上通常我们访问的V$视图,其实是指向V_$视图的同义词。而V_$视图是基于X$表建立的。关于这一点可以通过:v$fixed_view_definition视图 来验证。 在上面1.2.2 节有相关的示例。
访问V$FIXED_VIEW_DEFINITION 视图可以获取组成V$视图的底层X$表的所有信息
SQL> select count(*) from v$fixed_table where name like 'GV_%';
COUNT(*)
----------
496
SQL> select count(*) from v$fixed_table where name like 'V_%';
COUNT(*)
----------
525
动态性能对象那么多,如何来判断某个对象到底是同义词还是视图呢? 可以通过如下SQL来实现:
SQL> select object_type from all_objects where object_name=upper('v$datafile');
OBJECT_TYPE
-------------------
SYNONYM
总结一下:
在实例启动时,会先创建X$表,然后基于X$表创建GV_$ 和 V_$ 视图,在基于GV_$ 和V_$视图创建GV$和V$同义词。 我们一般查询的都是同义词。 关于这些视图的定义,可以通过V$FIXED_VIEW_DEFINITION 视图 来查看。 在数据库运行期间,动态性能视图保存在内存中,时刻监控着数据库的状态,我们在需要的时候可以查看这些视图。 当实例关闭时,数据库又会从内存中自动删除这些动态性能视图。
20个常用的动态性能视图:
(1)v$sysstat
(2)v$sesstat
(3)v$sql & v$sql_plan
(4)v$sqltext & v$sqlarea
(5)v$session
(6)v$session_wait & v$session_event
(7)v$process
(8)v$lock & v$locked_object
(9)v$filestat
(10)v$session_longops
(11)v$latch$ v$latch_children
(12)v$db_object_cache
(13)v$open_cursor
(14)v$parameter & v$system_parameter
(15)v$rollstat
(16)v$rowcache
(17)v$segstat & v$segment_statistics
(18)v$system_event
(19)v$undostat
(20)v$waitstat
发表评论
-
DBCP连接池介绍
2018-09-12 13:17 460目前 DBCP 有两个版本分别是 1.3 和 1.4。 D ... -
Update两表(多表)关联update -- 被修改值由另一个表运算而来
2016-10-22 00:50 985UPDATE trd_sess A SET A.r ... -
GV$LOCKED_OBJECT
2016-09-27 01:21 1128SELECT OBJECT_NAME, MACHINE, ... -
v$sql v$sqlarea v$sqltext v$sql_plan
2015-08-13 16:55 808v$sqltext存储的是完整的SQL,SQL被分割 SQ ... -
Oracle performance tuning
2015-08-10 17:47 602db block get+consistent gets ... -
JDBC driver 的类型 Type 1 Type2 Type3 Type4
2014-06-12 16:01 856在网上下载jdbc驱动程序,常看见type4字样,开始以为是 ... -
undo segment behavior
2014-04-04 19:04 782FAQ – Automatic Undo Managemen ... -
Connect to Oracle DB - Java
2014-04-04 15:14 719import java.sql.*; public ... -
Dataguard网络优化调整
2014-03-31 16:02 959Dataguard网络优化调整 Datagu ... -
Production error ORA-01001, ORA-03120, ORA-01460
2014-03-19 20:38 990ORA-01001: invalid cursor OR ... -
Oracle 常见的33个等待事件
2014-03-12 15:42 4067一. 等待事件的相关知识: 1.1 等待事件主要可以 ... -
WBFC on Exadata
2014-02-27 14:57 8621. "Should we turn on Sto ... -
Oracle dump files
2014-02-27 12:58 667audit_file_dest = C:\ ... -
Adaptive Log File Sync
2014-02-26 19:52 1061Adaptive Log File sync was int ... -
ORA-39046: Metadata remap REMAP_TABLESPACE has already been specified.
2014-01-22 16:01 6716Import: Release 10.2.0.4.0 - 6 ... -
EXPDP – ORA-39142: incompatible version number 3.1
2014-01-22 12:25 1667Using EXPDP export a schema in ... -
Oracle 11g Real Time SQL Monitoring
2014-01-20 17:01 785http://kerryosborne.oracle-guy ... -
java.sql.SQLException: ORA-01001: invalid cursor
2013-12-20 13:59 3789There are three parameters tha ... -
ORA-01013 user requested cancel of current operation
2013-12-20 13:34 2427今天我碰到的case就是timeout引起的。 T ... -
Cannot run sqlplus on Linux with EOF
2013-12-20 11:02 850今天碰到个小问题,记下来,在linux上,不可以run fi ...
相关推荐
Oracle的动态性能视图主要有X$、V$、V_$和GV$系列,每一系列都有其独特的用途和访问权限。 ### X$ 系列视图 X$系列视图包含了Oracle数据库实例的底层数据结构信息,它们是数据库内核的一部分,由Oracle服务器直接...
`GV$`视图是`V$`视图的全局版本,适用于Oracle并行服务器环境。`GV$`视图允许DBA跨多个实例收集信息,它们包含了`INST_ID`列,标识信息来源的实例编号。通过指定`INST_ID`,可以筛选特定实例的数据。在OPS(Oracle ...
Oracle数据库的动态性能视图,通常被称为V$视图,是Oracle系统内部维护的一组特殊视图,主要为系统管理员和数据库管理员提供实时性能监控和诊断数据库运行状态的能力。动态性能视图的内容与数据库的性能相关,并且...
简单描述Oracle v$sqlarea, v$sql, v$sqltext视图说明
### ORACLE 动态性能视图详解 #### 引言 在Oracle数据库系统中,动态性能视图(Dynamic Performance Views)扮演着至关重要的角色。这些视图提供了关于数据库内部操作和性能的关键信息,使得数据库管理员(DBA)...
除了V$视图外,Oracle还提供了另一种类型的视图——GV$视图(Global V$),主要用于在RAC环境中获取所有实例的信息。 **特点:** - 对于大多数V$视图(除了V$CACHE_LOCK、V$LOCK_ACTIVITY、V$LOCKS_WITH_...
在Oracle数据库管理与优化领域,深入了解和利用Oracle性能视图(V$视图)至关重要。随着Oracle版本的不断升级,V$视图的数量也在不断增加,从Oracle 6时代的23个到10g R2的372个,这反映了Oracle数据库复杂性的增长...
- `GV$`视图(Global V$视图)是针对Oracle Real Application Clusters (RAC)环境的一种扩展视图类型。 - 对于大多数`V$`视图,都有一个对应的`GV$`视图版本,除了少数几个例外(如`V$CACHE_LOCK`、`V$LOCK_ACTIVITY...
### 动态性能视图详解 #### 一、概述 动态性能视图是Oracle数据库管理系统中用于监控系统...此外,了解V$视图与GV$视图的区别及其各自的用途,对于在Oracle并行服务器环境中进行有效的性能管理和故障排除至关重要。
通过合理利用X$ 表、GV$ 和 V$ 视图以及GV_$ 和 V_$ 视图,可以实现对数据库内部结构和运行状态的全面掌握,这对于Oracle DBA来说是非常有价值的技能。 ### 结论 Oracle数据字典是理解Oracle数据库不可或缺的一...
通过深入了解X$ 表、GV$ 和 V$ 视图以及GV_$ 和 V_$ 视图的结构和用途,可以帮助我们更好地管理数据库、优化性能并解决问题。对于Oracle DBA和开发者来说,掌握这些知识是提升自身技能的重要途径。
Oracle动态性能表(Dynamic Performance Tables,也称为V$视图)是Oracle数据库系统中的一个重要组成部分,它们提供了关于数据库运行状态的实时信息。这些视图对于诊断性能问题、优化查询以及理解数据库行为至关重要...
首先,Oracle的数据字典包括三个主要层次:X$表、GV$和V$视图以及V$和GV$的同义词。X$表是Oracle数据库运行的基础,这些表在数据库启动时由Oracle应用程序动态生成,包含了数据库运行所需的关键信息。由于它们的重要...
在Oracle中,V$和GV$视图通常是通过执行`catalog.sql`脚本创建的。这个脚本首先创建V$和GV$视图,然后创建这两个视图的同义词,使得用户可以通过V$或GV$来访问数据。实际上,当我们查询V$视图时,我们实际上是通过V_...
Oracle数据库系统中,动态性能视图(V$ Views)是管理员监控和优化系统性能的关键工具。这些视图提供了关于数据库内部工作方式的实时信息,包括内存结构、磁盘活动、锁的状态、SQL执行情况等。V$视图的命名规则以V_$...
本文将基于给定的内容,详细介绍Oracle 10g中的动态性能视图(V$ views)以及全球固定视图(GV$ views),并解释其主要功能和用途。 #### 动态性能视图(V$ views) **概述:** 动态性能视图是Oracle 10g数据库...
动态性能视图可分为 X$ 表、GV$ 和 V$ 视图三类。 常用数据字典视图:对于日常的数据库开发和维护,常用的数据字典主要有静态数据字典视图的 DBA 视图和动态性能视图的 V$ 视图两类。 常用静态数据字典视图:...