v$instance如何生成

參考:http://www.itpub.net/thread-1284858-1-1.htmlhtml

 

1.ORACLE 先建立的x$ 表即RDBMS的內部表sql

2.而後在X$表的基礎上建立了GV$ 視圖。
   GV$視圖是爲了知足OPS環境的須要即集羣環境的須要數據庫

3.接着根據GV$視圖建立了 V$視圖,其實就是加了一個
   instance number的過濾條件。基本每一個v$視圖都對應一個GV$視圖。ssh

4.而後ORACLE又根據GV$視圖建立了GV_$視圖。隨即建立了V_$視圖。
 (注意是有區別的,下劃線__)xss

5.而後根據V_$視圖建立了同義詞。性能

 

所以咱們平時訪問的動態性能視圖都是同義詞。
這些工做實際上是建立數據庫的時候由一個腳原本實現的,$ORACLE_HOME/rdbms/admin/catalog.sqlui

這個腳本里你可能會發現以下語句:
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;.net

經過v_$視圖,ORACLE把用戶跟v$視圖隔離開了。code

 

以v$instance爲例。htm

1.查詢dba_objects 知,v$instance是同義詞
   SELECT * FROM Dba_OBJECTS WHERE OBJECT_name='V$INSTANCE'

2.查詢dba_synonyms,可知道他是V_$INSTANCE表的同義詞
   SELECT * FROM dba_synonyms WHERE synonym_name='V$INSTANCE'

3.查看v_$instance的建立語句,

   SELECT * FROM dba_views
   WHERE view_name=upper('V_$INSTANCE')
   發現它是有v$instance建立的.

4.查看v$instance建立語句。
   SELECT * FROM v$fixed_view_definition WHERE view_name =upper('v$instance')

   select INSTANCE_NUMBER , INSTANCE_NAME , HOST_NAME , VERSION ,
            STARTUP_TIME , STATUS , PARALLEL , THREAD# , ARCHIVER ,
            LOG_SWITCH_WAIT , LOGINS , SHUTDOWN_PENDING, DATABASE_STATUS,
            INSTANCE_ROLE, ACTIVE_STATE, BLOCKED
     from GV$INSTANCE
   where inst_id = USERENV('Instance')

    發現它是根據gv$instance建立的,只是加了一個inst_id的過濾條件。

5.繼續查看gv$instance的建立語句
    SELECT * FROM v$fixed_view_definition WHERE view_name =upper('v$instance')

發現它是由X$內部表建立的。
    select ks.inst_id,ksuxsins,ksuxssid,ksuxshst,ksuxsver,ksuxstim,
            decode(ksuxssts,0,'STARTED',1,'MOUNTED',2,'OPEN',3,'OPEN MIGRATE','UNKNOWN'),
            decode(ksuxsshr,0,'NO',1,'YES',2,NULL),ksuxsthr,
            decode(ksuxsarc,0,'STOPPED',1,'STARTED','FAILED'),
            decode(ksuxslsw,0,NULL,2,'ARCHIVE LOG',3,'CLEAR LOG',4,'CHECKPOINT',5,'REDO GENERATION'),
            decode(ksuxsdba,0,'ALLOWED','RESTRICTED'),decode(ksuxsshp,0,'NO','YES'),
            decode(kvitval,0,'ACTIVE',2147483647,'SUSPENDED','INSTANCE RECOVERY'),
            decode(ksuxsrol,1,'PRIMARY_INSTANCE',2,'SECONDARY_INSTANCE','UNKNOWN'),
            decode(qui_state,0,'NORMAL',1,'QUIESCING',2,'QUIESCED','UNKNOWN'),
            decode(bitand(ksuxsdst, 1), 0, 'NO', 1, 'YES', 'NO')
     from x$ksuxsinst ks, x$kvit kv, x$quiesce qu
   where kvittag = 'kcbwst'

   select INSTANCE_NUMBER , INSTANCE_NAME , HOST_NAME , VERSION ,             STARTUP_TIME , STATUS , PARALLEL , THREAD# , ARCHIVER ,             LOG_SWITCH_WAIT , LOGINS , SHUTDOWN_PENDING, DATABASE_STATUS,             INSTANCE_ROLE, ACTIVE_STATE, BLOCKED     from GV$INSTANCE   where inst_id = USERENV('Instance')

相關文章
相關標籤/搜索