oracle動態檢視v$,v_$,gv$,gv_$與x$之間的關係
前言:在oracle運維的過程中,經常會使用到一些以V$開頭的動態檢視,比如V$session, 有一次偶然看到有人用V_$session, 初以為別人寫錯了,沒想到desc v_$session以後能看到和v$session一樣的結構,再以後又發現以gv$開頭的檢視等等。趁這次在一臺Linux系統上裝oracle的機會,終於弄清楚了這些動態檢視與相應表之間的關係。
這些都是由oracle自己管理的資料結構,得從v$fixed_table入手:
[oracle@3857 admin]$ sqlplus sys/sys@archdw as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Mon Dec 14 11:27:20 2009
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> desc v$fixed_table;
Name Null? Type
—————————————– ——– —————————-
NAME VARCHAR2(30)
OBJECT_ID NUMBER
TYPE VARCHAR2(5)
TABLE_NUM NUMBER
SQL> select * from v$fixed_table
NAME OBJECT_ID TYPE TABLE_NUM
—————————— ———- —– ———-
X$KQFTA 4294950912 TABLE 0
X$KQFVI 4294950913 TABLE 1
GV$PROCESS 4294951256 VIEW 65537
V$PROCESS 4294950917 VIEW 65537
GV$BGPROCESS 4294951257 VIEW 65537
………………………………………
從上面可以看到GV$與V$是檢視,X$是表。那它們之間是什麼關係呢?從另一個檢視v$fixed_view_definition中得到如下資訊(以v$fixed_table為例):
SQL> set linesize 100
SQL> col view_name for a15
SQL> col view_definition for a80
SQL> select * from v$fixed_view_definition where view_name=’V$FIXED_TABLE’;
VIEW_NAME VIEW_DEFINITION
———————- ——————————————————————————–
V$FIXED_TABLE select NAME , OBJECT_ID , TYPE , TABLE_NUM from GV$FIXED_TABLE where inst_id =
USERENV(’Instance’)
SQL> select * from v$fixed_view_definition where view_name=’GV$FIXED_TABLE’;
VIEW_NAME VIEW_DEFINITION
————————- ——————————————————————————–
GV$FIXED_TABLE select inst_id,kqftanam, kqftaobj, ‘TABLE’, indx from x$kqfta union all select i
nst_id,kqfvinam, kqfviobj, ‘VIEW’, 65537 from x$kqfvi union all select inst_id,k
qfdtnam, kqfdtobj, ‘TABLE’, 65537 from x$kqfdt
原來gv$是全域性檢視,而v$是針對某個例項的檢視,$X是所有gv$的資料來源,從gv$到v$需要加上where inst_id = USERENV(’Instance’)。一般來說一個oracle資料庫只會有一個例項對其操作,但在RAC上可以有多臺例項同時裝載並開啟一個資料庫,在RAC上得到的結果是:
etl@ALIDW> select distinct inst_id from gv$session;
INST_ID
———-
1
2
4
3
這rac上有四個例項。嗯,再次加深了對例項與資料庫的理解。
那gv_$與v_$的定義又在什麼地方呢?原來在$ORACLE_HOME/rdbms/admin存放著系統管理指令碼,在catalog.sql中發現:
–CATCTL -S Initial scripts single process
@@cdstrt
@@cdfixed.sql
@@cdcore.sql
–CATCTL -M
@@cdplsql.sql
@@cdsqlddl.sql
…………………………………………………………………………….
進一步在cdfixed.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;
grant select on v_$fixed_table to select_catalog_role;
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;
grant select on gv_$fixed_table to select_catalog_role;
…………………………………………………………………………………………………………….
[oracle@3857 admin]$ sqlplus sys/sys@archdw as sysdba
SQL> select * from user_role_privs;
USERNAME GRANTED_ROLE ADM DEF OS_
—————————— —————————— — — —
SYS SELECT_CATALOG_ROLE YES YES NO
因此我們常用的v$ 是v_$的同義詞,v_$是基於真正的檢視v$,而真正的v$檢視是在gv$的基礎上限制inst_id得到;
我們常用的gv$是gv_$的同義詞,gv_$基於真正的檢視gv$,而真正的gv$檢視基於系統表X$。
這些都是由oracle自己管理的資料結構,得從v$fixed_table入手:
[oracle@3857 admin]$ sqlplus sys/sys@archdw as sysdba
SQL*Plus: Release 11.2.0.1.0 Production on Mon Dec 14 11:27:20 2009
Copyright (c) 1982, 2009, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> desc v$fixed_table;
Name Null? Type
—————————————– ——– —————————-
NAME VARCHAR2(30)
OBJECT_ID NUMBER
TYPE VARCHAR2(5)
TABLE_NUM NUMBER
SQL> select * from v$fixed_table
NAME OBJECT_ID TYPE TABLE_NUM
—————————— ———- —– ———-
X$KQFTA 4294950912 TABLE 0
X$KQFVI 4294950913 TABLE 1
GV$PROCESS 4294951256 VIEW 65537
V$PROCESS 4294950917 VIEW 65537
GV$BGPROCESS 4294951257 VIEW 65537
………………………………………
從上面可以看到GV$與V$是檢視,X$是表。那它們之間是什麼關係呢?從另一個檢視v$fixed_view_definition中得到如下資訊(以v$fixed_table為例):
SQL> set linesize 100
SQL> col view_name for a15
SQL> col view_definition for a80
SQL> select * from v$fixed_view_definition where view_name=’V$FIXED_TABLE’;
VIEW_NAME VIEW_DEFINITION
———————- ——————————————————————————–
V$FIXED_TABLE select NAME , OBJECT_ID , TYPE , TABLE_NUM from GV$FIXED_TABLE where inst_id =
USERENV(’Instance’)
SQL> select * from v$fixed_view_definition where view_name=’GV$FIXED_TABLE’;
VIEW_NAME VIEW_DEFINITION
————————- ——————————————————————————–
GV$FIXED_TABLE select inst_id,kqftanam, kqftaobj, ‘TABLE’, indx from x$kqfta union all select i
nst_id,kqfvinam, kqfviobj, ‘VIEW’, 65537 from x$kqfvi union all select inst_id,k
qfdtnam, kqfdtobj, ‘TABLE’, 65537 from x$kqfdt
原來gv$是全域性檢視,而v$是針對某個例項的檢視,$X是所有gv$的資料來源,從gv$到v$需要加上where inst_id = USERENV(’Instance’)。一般來說一個oracle資料庫只會有一個例項對其操作,但在RAC上可以有多臺例項同時裝載並開啟一個資料庫,在RAC上得到的結果是:
etl@ALIDW> select distinct inst_id from gv$session;
INST_ID
———-
1
2
4
3
這rac上有四個例項。嗯,再次加深了對例項與資料庫的理解。
那gv_$與v_$的定義又在什麼地方呢?原來在$ORACLE_HOME/rdbms/admin存放著系統管理指令碼,在catalog.sql中發現:
–CATCTL -S Initial scripts single process
@@cdstrt
@@cdfixed.sql
@@cdcore.sql
–CATCTL -M
@@cdplsql.sql
@@cdsqlddl.sql
…………………………………………………………………………….
進一步在cdfixed.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;
grant select on v_$fixed_table to select_catalog_role;
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;
grant select on gv_$fixed_table to select_catalog_role;
…………………………………………………………………………………………………………….
[oracle@3857 admin]$ sqlplus sys/sys@archdw as sysdba
SQL> select * from user_role_privs;
USERNAME GRANTED_ROLE ADM DEF OS_
—————————— —————————— — — —
SYS SELECT_CATALOG_ROLE YES YES NO
因此我們常用的v$ 是v_$的同義詞,v_$是基於真正的檢視v$,而真正的v$檢視是在gv$的基礎上限制inst_id得到;
我們常用的gv$是gv_$的同義詞,gv_$基於真正的檢視gv$,而真正的gv$檢視基於系統表X$。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31397003/viewspace-2130275/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle的v$動態檢視 收藏Oracle
- Oracle動態效能檢視學習之v$sqltext & v$sqlareaOracleSQL
- (轉)Oracle動態效能檢視學習之v$processOracle
- Oracle動態效能檢視學習之 V$ROLLSTAT -- 轉Oracle
- Oracle動態效能檢視學習之v$lock & v$locked_objectOracleObject
- Oracle動態效能檢視之v$session_longops ztOracleSessionGo
- 【檢視】SMON_SCN_TIME檢視--SCN與時間的對應關係
- Oracle ASM 相關的 檢視(V$) 和 資料字典(X$)OracleASM
- Oracle 資料庫檢視與基表的關係Oracle資料庫
- 【Oracle】gv$px_session 檢視介紹OracleSession
- (轉)Oracle動態效能檢視學習之V$DB_OBJECT_CACHEOracleObject
- MFC中文件檢視框架和文件模板之間的關係框架
- V$PGASTAT動態效能檢視AST
- ODS與DW之間的關係
- oracle常用的動態檢視Oracle
- Oracle檢視:常用動態效能檢視Oracle
- 動態檢視學習之v$session_waitSessionAI
- TLS與SSL之間關係TLS
- ps 與 svmon之間關係
- Oracle許可權(二)許可權相關的動態效能檢視與資料字典檢視Oracle
- 【檢視】V$BGPROCESS與V$PROCESS間的區別與聯絡
- Oracle動態效能檢視學習筆記(1)_v$sysstatOracle筆記
- Oracle動態效能檢視學習筆記(3)_v$undostatOracle筆記
- Oracle動態效能檢視學習筆記(4)_v$rollstatOracle筆記
- Oracle動態效能檢視學習筆記(6)_v$filestatOracle筆記
- Oracle動態效能檢視學習筆記(7)_v$sessionOracle筆記Session
- Oracle內部檢視:X$BH與X$LEOracle
- Oracle 查詢表與表之間的 主外來鍵關係Oracle
- (轉)Oracle 動態效能檢視Oracle
- RMAN相關的動態效能檢視
- 思考 TPS 與 RT 之間的關係
- 談Ubuntu與FOSS之間的關係(轉)Ubuntu
- FAILGROUP和REDUNDANCY之間的關係關係!AI
- Oracle動態效能檢視學習筆記(4)_v$waitstatOracle筆記AI
- Oracle動態效能檢視學習筆記(8)_v$waitstatOracle筆記AI
- Oracle動態效能檢視學習筆記(2)_v$sesstat_v$mystat_v$statnameOracle筆記
- 類之間的關係
- 【Oracle九大效能檢視】之6.v$process檢視Oracle