動態效能檢視
oracle記憶體在運行中時刻都在變化,這些變化的資料寄存於動態效能表(記憶體表,固定表)中,隨著資料庫啟動而建立,隨資料庫運行而增加內容,動態效能表也過於複雜,oracle在此基礎之上又建立了視圖和同義字,用於DBA判斷系統的效能狀態資訊
這類別檢視和同義字我們稱之為動態效能檢視,它儲存的是時刻改變的資料
select * from v$FIXED_TABLE
在oracle資料庫中還維護與資料執行個體的操作和效能相關的動態資料集。這些動態效能檢視建立在通過資料庫伺服器內的記憶體結構構建的虛擬表基礎上。也就是說,它們不是駐留在資料庫中的常規表。因此,其中的某些視圖可以在裝載或開啟資料庫之前顯示資料。
動態效能檢視包括關於以下內容的資訊:
· 會話 · 檔案狀態 · 作業和任務的進度 · 鎖 ·備份狀態 ·記憶體使用量和分配 ·系統和會話參數 ·SQL 執行 ·統計資訊和度量
註:DICT 和 DICT_COLUMNS 視圖也包含這些動態效能檢視的名稱。
某些動態視圖包含的資料不一定適用於執行個體或資料庫的所有狀態。例如,如果剛剛啟動一個執行個體,但未裝載資料庫,則可以通過查詢v$BGPROCESS 查看正在啟動並執行後台進程的列表。但不能通過查詢v$DATAFILE查看資料庫資料檔案的狀態,因為要由進行裝載的資料庫讀取控制檔案後才能找出資料庫關聯的資料檔案。
· 這些視圖由SYS使用者擁有。
· 不同時間可以使用不同視圖:
---- 執行個體已啟動
---- 資料庫已裝載
---- 資料庫已開啟
· 通過查詢V$FIXED_TABLE 可查看所有視圖名稱
· 這些視圖通常又稱為“v$視圖”
· 由於資料是動態,因此這些視圖不保證讀取一致性
v$開頭的就一定是視圖嗎?
① 以V$PARAMETER 為例,查看一下這個視圖的基表是什麼,我們利用dbms_metadata.get_ddl(),用它擷取V$PARAMETER 的定義,那麼需要知道V$PARAMETER 的類型及 owner ,我們用如下命令查詢得到類型及owner。
SYS@ORCL>COL OBJECT_NAME FOR A20
SYS@ORCL>COL OBJECT_TYPE FOR A20
SYS@ORCL>COL OWNER FOR A20
SYS@ORCL>select object_name,object_type,owner from all_objects where object_name=upper('v$parameter');
OBJECT_NAME OBJECT_TYPE OWNER
-------------------- -------------------- --------------------
V$PARAMETER SYNONYM PUBLIC
SYS@ORCL>select dbms_metadata.get_ddl(upper('SYNONYM'),upper('V$PARAMETER'),upper('PUBLIC')) from dual;
DBMS_METADATA.GET_DDL(UPPER('S
--------------------------------------------------------------------------------
CREATE OR REPLACE PUBLIC SYNONYM "V$PARAMETER" FOR "SYS"."V_$PARAMETER"
② 通過這一步我們會發現 V$PARAMETER 其實是V_$PARAMETER 的同義字,
SYS@ORCL>select object_name,object_type,owner from all_objects where object_name=upper('v_$parameter');
OBJECT_NAME OBJECT_TYPE OWNER
-------------------- -------------------- --------------------
V_$PARAMETER VIEW SYS
SYS@ORCL>select dbms_metadata.get_ddl (upper('VIEW'),upper('V_$PARAMETER'),upper('SYS')) from dual;
DBMS_METADATA.GET_DDL(UPPER('V
--------------------------------------------------------------------------------
CREATE OR REPLACE FORCE VIEW "SYS"."V_$PARAMETER" ("NUM", "NAME", "TYPE", "VA
......
......from v$parameter
③ 此時就懵了,怎麼又回到了 v$parameter 了,如果我們再次get_ddl ,那麼就又回到了第一步了,那一定是不對的。我們看一下v_$parameter 是一個視圖,那麼v$parameter 也有可能是一個固定視圖,我們在固定視圖定義視圖中查詢一下。
SYS@ORCL>select view_definition from v$fixed_view_definition where view_name=upper('v$parameter');
VIEW_DEFINITION
--------------------------------------------------------------------------------
select NUM , NAME , TYPE , VALUE , DISPLAY_VALUE, ISDEFAULT , ISSES_MODIFIABLE
, ISSYS_MODIFIABLE , ISINSTANCE_MODIFIABLE, ISMODIFIED , ISADJUSTED , ISDEPRECAT
ED, DESCRIPTION, UPDATE_COMMENT, HASH from GV$PARAMETER where inst_id = USERENV
('Instance')
④ 果然是固定視圖,這個固定視圖也是根據固定視圖所定義的,我們再次查看 GV$parameter 這個固定視圖。
SYS@ORCL>select view_definition from v$fixed_view_definition where view_name=upper('gv$parameter');
VIEW_DEFINITION
--------------------------------------------------------------------------------
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,'I
MMEDIATE',2,'DEFERRED', 3,'IMMEDIATE','FALSE'),
decode(bitand(ksppiflg,4),4,'FALSE', decod
e(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'), ksppdesc, ksppstcmn
t, ksppihash from x$ksppi x, x$ksppcv y where (x.indx = y.indx) and ((translat
e(ksppinm,'_','#') not like '##%') and ((translate(ksppinm,'_','#') not like
'#%') or (ksppstdf = 'FALSE') or (bitand(ksppstvf,5) > 0)))
SYS@ORCL>
⑤ 看到 GV$PARAMETER 的基表,終於知道動態效能檢視的來龍去脈了。
總結:
-- 在非sys 使用者下查看的動態效能檢視均為同義字
-- “動態效能檢視” 的出處:
X$開頭 oracle 的基表 ----> gv$ 開頭的 固定視圖 -----> v$ 開頭的固定視圖 ----> v_$ 開頭的視圖 -----> v$開頭的同義字