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

yangtingkun發表於2009-06-11

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

這一篇描述如何判斷一個初始化引數的來源。

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

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

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

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

 

 

判斷資料庫啟動是否啟用了SPFILE很簡單,只需要透過SHOW PARAMETER SPFILE命令就可以看到:

SQL> show parameter spfile

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
spfile                               string      /export/home/oracle/spfiletest1.ora

但是判斷一個初始化引數是否由SPFILE設定,並不是那麼容易。

首先V$SPPARAMETER裡面包含了所有可以設定初始化引數的記錄:

SQL> select sid, count(*)
  2  from v$spparameter
  3  group by sid;

SID          COUNT(*)
---------- ----------
*                 391
test2               6
test1               6

不過這個問題並不難解決,對於透過SPFILE指定的引數,V$SPPARAMETER檢視中的ISSPECIFIED列的值為TRUE,如果在SPFILE中沒有指定,則這個值為FALSE

SQL> select isspecified, count(*)
  2  from v$spparameter
  3  group by isspecified;

ISSPEC   COUNT(*)
------ ----------
TRUE          144
FALSE         259

SQL> select sid, name, value
  2  from v$spparameter
  3  where isspecified = 'TRUE'
  4  and name not like '\_%' escape '\';

SID        NAME                           VALUE
---------- ------------------------------ --------------------------------------------------
*          processes                      150
*          resource_manager_plan
*          sga_target                     775946240
*          control_files                  +DATA/test/controlfile/current.529.684067899
*          db_block_size                  8192
*          compatible                     11.1.0.0.0
*          log_archive_config
*          log_archive_dest_1             LOCATION=/data/oracle/oradata/test/archivelog
*          log_buffer                     4197376
*          cluster_database               TRUE
*          cluster_database_instances     3
*          db_create_file_dest            +DATA
test1      thread                         1
test2      thread                         2
test1      undo_tablespace                UNDOTBS1
test2      undo_tablespace                UNDOTBS2
test1      instance_number                1
test2      instance_number                2
test1      remote_login_passwordfile      SHARED
test2      remote_login_passwordfile      EXCLUSIVE
*          db_domain
*          plsql_warnings                 DISABLE:ALL
*          result_cache_max_size          3899392
test1      core_dump_dest                 /data/oracle/diag/rdbms/test/test1/cdump
test2      core_dump_dest                 /data/oracle/diag/rdbms/test/test2/cdump
*          audit_file_dest                /data/oracle/admin/test/adump
*          audit_trail                    DB
*          db_name                        test
test2      open_cursors                   400
*          open_cursors                   500
*          optimizer_mode                 ALL_ROWS
*          query_rewrite_enabled          TRUE
*          pga_aggregate_target           256901120
*          optimizer_dynamic_sampling     2
*          skip_unusable_indexes          TRUE
*          diagnostic_dest                /data/oracle

已選擇36行。

上面就列出了SPFILE中所有指定的引數,不過並不以為SPFILE中設定的引數就一定會生效。

比如在使用PFILE指定SPFILE引數的方式啟動時,PFILE裡面可以在SPFILE之前指定例項級的初始化引數,用來覆蓋SPFILE裡相同的資料庫級的初始化引數設定。

SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
test1

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> alter system reset open_cursors scope = spfile sid = 'test1';

系統已更改。

SQL> alter system set open_cursors = 500;                      

系統已更改。

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

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

下面透過修改inittest1.ora引數,在spfile引數前面,加上open_cursors引數:

SQL> host vi /export/home/oracle/inittest1.ora
test1.open_cursors=1000
spfile=/export/home/oracle/spfiletest1.ora

"/export/home/oracle/inittest1.ora" 3 lines, 68 characters

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
資料庫裝載完畢。
資料庫已經開啟。
SQL> select name, value
  2  from v$system_parameter
  3  where name = 'open_cursors';

NAME                           VALUE
------------------------------ --------------------------------------------------
open_cursors                   1000

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

SID        NAME                           VALUE                                    ISSPEC
---------- ------------------------------ ---------------------------------------- ------
test2      open_cursors                   400                                      TRUE
*          open_cursors                   500                                      TRUE

檢查當前的資料庫設定可以發現,雖然當前SPFILEopen_cursors是明確設定的,但是由於pfile中設定了例項級的初始化引數覆蓋了資料庫級的初始化引數,導致系統當前的引數設定和SPFILE中的設定並不相同。

 

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

相關文章