CLUSTER_DATABASE_INSTANCES引數

yangtingkun發表於2009-04-21

以前一直認為這個引數是設定資料庫允許啟動的例項數,今天才發現並非如此。

 

 

今天在測試新增RAC的節點時發現了這個問題,資料庫啟動的例項數,超過了CLUSTER_DATABASE_INSTANCES的設定:

bash-3.00$ sqlplus "/ as sysdba"

SQL*Plus: Release 11.1.0.6.0 - Production on 星期一 4 20 17:27:10 2009

Copyright (c) 1982, 2007, Oracle.  All rights reserved.


連線到:
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 pages 100 lines 120
SQL> show parameter cluster_database

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
cluster_database                     boolean     TRUE
cluster_database_instances           integer     1
SQL> select instance_name from v$instance;

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

SQL> select instance_name, status from gv$instance;

INSTANCE_NAME    STATUS
---------------- ------------
test1            OPEN
test2            OPEN

SQL> conn test/test@test2
已連線。
SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
test2

RAC環境的兩個例項同時在執行,但是CLUSTER_DATABASE_INSTANCES引數的設定為1。開始還以為碰到了bug,或者是11g做了某些改變。

查詢了Oracle的文件,才發現原來的理解一直存在問題。認為CLUSTER_DATABASE_INSTANCES設定的是Oracle所允許執行的最大例項數,完全是想當然的,實際上Oracle透過這個初始化引數設定的值,在執行並行自動調整的情況下,來估算LARGE_POOL_SIZE引數的預設值。

Oracle新增節點這種操作,是不需要重啟資料庫的(當然從非RAC環境新增例項變為RAC環境是例外,因為要修改CLUSTER_DATABASE引數),因為CLUSTER_DATABASE_INSTANCES引數的調整完全可以先在SPFILE中修改,等以後有重啟機會的時候再載入正確的引數設定。不過需要注意,如果在SPFILE中修改了CLUSTER_DATABASE_INSTANCES,那麼隨後任意一個例項需要重啟的時候,所有的其他例項也比較重啟,因為每個例項中這個值的設定必須是一致的:

SQL> conn / as sysdba
已連線。
SQL> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE
例程已經關閉。
SQL> startup
ORACLE
例程已經啟動。

Total System Global Area  776896512 bytes
Fixed Size                  2098776 bytes
Variable Size             212523432 bytes
Database Buffers          557842432 bytes
Redo Buffers                4431872 bytes
資料庫裝載完畢。
資料庫已經開啟。
SQL> conn / as sysdba
已連線。
SQL> alter system set cluster_database_instances = 2 scope = spfile;

系統已更改。

SQL> shutdown immediate
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE
例程已經關閉。
SQL> startup
ORA-29707: inconsistent value 2 for initialization parameter cluster_database_instances with other instances

這時只有兩種方法,一種是修改SPFILE中的引數設定,使得SPFILE的設定和其他執行的例項中設定一致,另一種方法就是關閉其他所有的例項,然後重啟資料庫。

SQL> exit
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
斷開
bash-3.00$ srvctl stop inst -d test -i test2
bash-3.00$ srvctl start db -d test
bash-3.00$ sqlplus "/ as sysdba"

SQL*Plus: Release 11.1.0.6.0 - Production on 星期一 4 20 18:42:14 2009

Copyright (c) 1982, 2007, Oracle.  All rights reserved.


連線到:
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> show parameter cluster_database

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
cluster_database                     boolean     TRUE
cluster_database_instances           integer     2
SQL> select instance_name from gv$instance;

INSTANCE_NAME
----------------
test1
test2

 

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

相關文章