老實說剛碰Oracle時,對V$PARAMETER、V$PARAMETER2、V$SYSTEM_PARAMETER、V$SYSTEM_PARAMETER2、V$SPPARAMETER之
間有什麼差異,有什麼不同,完全搞不清楚,結果花了點時間Try一下,大概知道他們之間的差異‧
 
 
//V$PARAMETER、V$SYSTEM_PARAMETER、V$SPPARAMETER之間的差異
在 Oracle 10g 剛裝好時,Instance預設啟動是載入SPFILE參數檔,而SPFILE內有定義 db_file_multiblock_read_count=16 ,但
沒有定義 timed_statistics 該參數值的設定,由以下三個範例,可以看出‧
範例: //v$parameter
      SQL> select name,value,isdefault from v$parameter
         2 where name in ('timed_statistics','db_file_multiblock_read_count');
           NAME                           VALUE    ISDEFAULT
           ------------------------------ -------- ---------
           timed_statistics               TRUE     TRUE
           db_file_multiblock_read_count  16       FALSE
      備註: ISDEFAULT欄位為FALSE,代表該參數是定義在SPFILE或PFILE中‧TRUE代表該參數是未定義於SPFILE或PFILE,而是由
            Instance預設設定Value值(該Value值,也可以讓使用者在Instance啟動後,動態設定)‧

      //v$system_parameter
      SQL> select name,value,isdefault from v$system_parameter
         2 where name in ('timed_statistics','db_file_multiblock_read_count');
           NAME                           VALUE    ISDEFAULT
           ------------------------------ -------- ---------
           timed_statistics               TRUE     TRUE
           db_file_multiblock_read_count  16       FALSE
      備註: ISDEFAULT欄位為FALSE,代表該參數是定義在SPFILE或PFILE中‧TRUE代表該參數是未定義於SPFILE或PFILE,而是由
            Instance預設設定Value值(該Value值,也可以讓使用者在Instance啟動後,動態設定)‧

      //v$spparameter
      SQL> select name,value,isspecified from v$spparameter
         2 where name in ('timed_statistics','db_file_multiblock_read_count');
           NAME                           VALUE    ISSPEC
           ------------------------------ -------- ---------
           timed_statistics                        FALSE
           db_file_multiblock_read_count  16       TRUE
      備註: ISSPEC欄位為TRUE,代表該參數是定義在SPFILE中‧FALSE代表該參數未定義SPFILE或PFILE之中‧如果之後曾經執行
            命令對 timed_statistics 該參數做設定,該參數的ISSPEC將會變成TRUE‧
 
 
//V$PARAMETER、V$SYSTEM_PARAMETER之間的差異
範例: //Session1
      SQL> select name,value,isdefault from v$parameter where name ='timed_statistics';
           NAME                 VALUE      ISDEFAULT
           -------------------- ---------- ----------
           timed_statistics     TRUE       TRUE
      SQL> select name,value,isdefault from v$system_parameter where name ='timed_statistics';
           NAME                 VALUE      ISDEFAULT
           -------------------- ---------- ----------
           timed_statistics     TRUE       TRUE
      SQL> alter session set timed_statistics=false;
           已更改階段作業.
      SQL> select name,value,isdefault from v$parameter where name ='timed_statistics';
           NAME                 VALUE      ISDEFAULT
           -------------------- ---------- ----------
           timed_statistics     FALSE      TRUE
      SQL> select name,value,isdefault from v$system_parameter where name ='timed_statistics';
           NAME                 VALUE      ISDEFAULT
           -------------------- ---------- ----------
           timed_statistics     TRUE       TRUE
      //Session2(該Session是在Session1執行完alter session set timed_statistics=false;命令,方登入Oracle)
      SQL> select name,value,isdefault from v$parameter where name ='timed_statistics';
           NAME                 VALUE      ISDEFAULT
           -------------------- ---------- ----------
           timed_statistics     TRUE       TRUE
      SQL> select name,value,isdefault from v$system_parameter where name ='timed_statistics';
           NAME                 VALUE      ISDEFAULT
           -------------------- ---------- ----------
           timed_statistics     TRUE       TRUE
 
 
 
//V$PARAMETER、V$PARAMETER2、V$SYSTEM_PARAMETER、V$SYSTEM_PARAMETER2之間的差異
由下面的範例可以知道 V$PARAMETER、V$PARAMETER2這二個Dynamic Performance View結果是一樣的,差異在於 V$PARAMETER對於
該參數的Value是多個時,會合併成一筆資料,而 V$PARAMETER2則會分成數筆資料‧
同樣情形在V$SYSTEM_PARAMETER、V$SYSTEM_PARAMETER2該二個Dynamic Performance View的差異也僅只是顯示是否多筆‧
範例: //V$PARAMETER
      SQL> select name,value from v$parameter where name = 'control_files';
           NAME            VALUE
           --------------- ------------------------------------------------------
           control_files   C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL01.CTL,
                           C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL02.CTL,
                           C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL03.CTL
      //V$PARAMETER2
      SQL> select name,value from v$parameter2 where name = 'control_files';
           NAME            VALUE
           --------------- ------------------------------------------------------
           control_files   C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL01.CTL
           control_files   C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL02.CTL
           control_files   C:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\CONTROL03.CTL
 
 
<結論>
(一)V$PARAMETER、V$PARAMETER2這二個View都是顯示目前該Session下的參數設定,而二個View的差異在於,對於多值設定
    的參數,V$PARAMETER就算多個值設定,永遠一個Row,而V$PARAMETER2則是多個Row‧V$PARAMETER、V$PARAMETER2該二
    個View,不管是SPFILE或PFILE,的Value欄位都是會有值的‧
(二)V$SYSTEM_PARAMETER、V$SYSTEM_PARAMETER2這二個View都是顯示目前該 Instance下的參數設定,而二個View的差異在
    於,對於多值設定的參數,V$SYSTEM_PARAMETER就算多個值設定,永遠一個Row, 而V$SYSTEM_PARAMETER2則是多個Row
    ‧V$SYSTEM_PARAMETER、V$SYSTEM_PARAMETER2該二個View,不管是SPFILE或PFILE,的Value欄位都是會有值的‧
(三)如果是用SPFILE參數型式啟動Instance,V$SPPARAMETER該View的Value欄位是會有值的,但如果是 PFILE參數型式啟動
    Instance,則V$SPPARAMETER該View的Value欄位是Null的‧ 要注意的是V$SPPARAMETER是顯示SPFILE上設定的參數值,
    並不代表是目前Instance上設定的參數值,如果想要查看目前Instance上的參數值,請參考V$SYSTEM_PARAMETER‧
(四)請用如下範例即可以觀察三個Dynamic Performance View的差異‧
    SELECT * FROM V$PARAMETER WHERE NAME = 'control_files'
    SELECT * FROM V$PARAMETER2 WHERE NAME = 'control_files'
    SELECT * FROM V$SYSTEM_PARAMETER WHERE NAME = 'control_files'
    SELECT * FROM V$SYSTEM_PARAMETER2 WHERE NAME = 'control_files'
    SELECT * FROM V$SPPARAMETER WHERE NAME = 'control_files'
創作者介紹

香蕉皮

香 香蕉皮 發表在 痞客邦 PIXNET 留言(0) 人氣()