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

yangtingkun發表於2009-06-10

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

這一篇描述GV$SPPARAMETER引數的必要性。

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

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

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

 

 

前一篇文章介紹了V$SPPARAMETER引數,也說明了V$SPPARAMETER檢視中的資訊與GV$PARAMETER檢視中的區別。

其實這裡還有一個問題,就是GV$SPPARAMETER是否有意義。因為V$SPPARAMETER引數本身就包含了SID列,SPFILE中本身就包含了所有例項的設定,那麼查詢GV$SPPARAMETER檢視是否就意義不大呢,其實不然。

因為RAC的各個節點可以使用統一的SPFILE啟動,同樣也可以選擇不同的SPFILE來進行啟動,這時GV$SPPARAMETER檢視中獲取結果,才是真正各個例項SPFILE中設定的結果。

這樣說比較難以理解,看一個簡單的例子:

SQL> select inst_id, name, value
  2  from gv$system_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

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

   INST_ID SID        NAME                           VALUE
---------- ---------- ------------------------------ ------------------------------------
         1 *          open_cursors                   300
         1 test1      open_cursors                   500
         1 test2      open_cursors                   700
         2 *          open_cursors                   300
         2 test1      open_cursors                   500
         2 test2      open_cursors                   700

已選擇6行。

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

   INST_ID NAME                           VALUE
---------- ------------------------------ --------------------------------------------------
         1 spfile                         +DATA/test/spfiletest.ora
         2 spfile                         +DATA/test/spfiletest.ora

下面裡面記憶體中引數來建立SPFILE,並利用新建的SPFILE來啟動當前例項:

SQL> create spfile='/export/home/oracle/spfiletest1.ora' from memory;

檔案已建立。

SQL> host    
$ vi /export/home/oracle/inittest1.ora
"/export/home/oracle/inittest1.ora" [New file]
spfile=/export/home/oracle/spfiletest1.ora

"/export/home/oracle/inittest1.ora" [New file] 2 lines, 44 characters
$ exit

SQL> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE
例程已經關閉。
SQL> startup pfile=/export/home/oracle/inittest1.ora
ORACLE
例程已經啟動。

Total System Global Area  776896512 bytes
Fixed Size                  2098776 bytes
Variable Size             246069672 bytes
Database Buffers          524288000 bytes
Redo Buffers                4440064 bytes
資料庫裝載完畢。
資料庫已經開啟。

下面檢查spfile中的設定:

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

   INST_ID NAME                           VALUE
---------- ------------------------------ --------------------------------------------------
         1 spfile                         /export/home/oracle/spfiletest1.ora
         2 spfile                         +DATA/test/spfiletest.ora

SQL> select inst_id, name, value
  2  from gv$system_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
---------- ------------------------------ --------------------------------------------------
test1      open_cursors                   600
test2      open_cursors                   400

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

   INST_ID SID        NAME                           VALUE
---------- ---------- ------------------------------ --------------------------------
         2 *          open_cursors                   300
         2 test1      open_cursors                   500
         2 test2      open_cursors                   700
         1 test1      open_cursors                   600
         1 test2      open_cursors                   400

可以看到,由於兩個例項採用了不同的SPFILE,導致兩個例項上設定的對方例項的初始化引數值,與對方例項上當前設定值不符。

在上面的例子中,兩個例項上真正的引數設定查詢方式為:

SQL> select inst_id, sid, name, value
  2  from gv$spparameter
  3  where name = 'open_cursors'
  4  and substr(sid, -1) = to_char(inst_id);

   INST_ID SID        NAME                           VALUE
---------- ---------- ------------------------------ -----------------------------------
         2 test2      open_cursors                   700
         1 test1      open_cursors                   600

 

 

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

相關文章