查詢初始化引數的方法(三)

yangtingkun發表於2009-06-09

查詢初始化引數的方法很多,比如SHOW PARAMETER,或查詢V$PARAMETER等,這裡簡單總結一下。

這一篇介紹V$SPPARAMETER檢視於GV$PARAMETER檢視的不同。

查詢初始化引數的方法(一):http://yangtingkun.itpub.net/post/468/484669

查詢初始化引數的方法(二):http://yangtingkun.itpub.net/post/468/484729

 

 

上一篇介紹了V$SYSTEM_PARAMETERV$PARAMETER檢視之間的區別,這篇主要討論RAC環境下初始化引數的查詢。

前文已經提到,使用SHOW PARAMETER查詢,看到的是當前會話可以看到的初始化引數,那麼這個引數導致是全域性設定還是當前例項設定的,是從這個命令中看不到的。

雖然Oracle提供了GV$開頭的初始化引數,可以用來查詢兩個例項上的設定,但是情況並不是這麼簡單的。

一個簡單的例子:

SQL> show parameter open_cursors

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
open_cursors                         integer     300
SQL> alter system set open_cursors = 500 scope = both sid = 'test1';

系統已更改。

SQL> disc
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options
斷開
SQL> set instance test2
Oracle Database 11g Release 11.1.0.0.0 - Production
SQL> conn sys as sysdba
輸入口令:
已連線。
SQL> alter system set open_cursors = 400 scope = both sid = 'test2';

系統已更改。

SQL> disc
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options
斷開
SQL> set instance local
Oracle Database 11g Release 11.1.0.0.0 - Production
SQL> conn / as sysdba
已連線。

現在來看看不同的查詢方法得到的結果:

SQL> select name, value
  2  from v$parameter
  3  where name = 'open_cursors';

NAME                           VALUE
------------------------------ --------------------------------------------------
open_cursors                   500

SQL> select inst_id, name, value
  2  from gv$parameter
  3  where name = 'open_cursors';

   INST_ID NAME                           VALUE
---------- ------------------------------ --------------------------------------------------
         1 open_cursors                   500
         2 open_cursors                   400

SQL> show parameter open_cursors

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
open_cursors                         integer     500
SQL> select sid, name, value
  2  from v$spparameter
  3  where name = 'open_cursors';

SID        NAME                           VALUE
---------- ------------------------------ --------------------------------------------------
*          open_cursors                   300
test1      open_cursors                   500
test2      open_cursors                   400

SQL> show spparameter open_cursors

SID      NAME                          TYPE        VALUE
-------- ----------------------------- ----------- ----------------------------
*        open_cursors                  integer     300
test2    open_cursors                  integer     400
test1    open_cursors                  integer     500

似乎除了看不到全域性設定外,GV$PARAMETER引數和V$SPPARAMETER沒有什麼不同,其實不然,如果alter system set的時候只修改了spfile或只修改了memory引數,結果就會不同:

SQL> alter system set open_cursors = 600 scope = memory sid = 'test1';

系統已更改。

SQL> alter system set open_cursors = 700 scope = spfile sid = 'test2';

系統已更改。

SQL> select name, value
  2  from v$parameter
  3  where name = 'open_cursors';

NAME                           VALUE
------------------------------ --------------------------------------------------
open_cursors                   600

SQL> select inst_id, name, value
  2  from gv$parameter
  3  where name = 'open_cursors';

   INST_ID NAME                           VALUE
---------- ------------------------------ --------------------------------------------------
         1 open_cursors                   600
         2 open_cursors                   400

SQL> select sid, name, value
  2  from v$spparameter
  3  where name = 'open_cursors';

SID        NAME                           VALUE
---------- ------------------------------ --------------------------------------------------
*          open_cursors                   300
test1      open_cursors                   500
test2      open_cursors                   700

從上面的對比就可以看出,透過GV$檢視訪問的結果和SPFILE中包含的資訊其實是兩回事。

除了上面介紹的幾種檢視之外,CREATE PFILE其實也是一個不錯的選擇,在10g以前只能CREATE PFILE FROM SPFILE,得到的結果類似於對VSPPARAMETER檢視的查詢,而11g增加了CREATE PFILE FROM MEMORY選項,這個得到的結果類似於從GV$SYSTEM_PARAMETER檢視獲取的查詢。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-605736/,如需轉載,請註明出處,否則將追究法律責任。

相關文章