一次RAC下的的SGA修改操作

comebackdog發表於2011-09-27

 

在生產環境的EM檢查ADDM,最近總會看到增加SGA大小的建議,當前SGA是4G決定根據建議提高到5G

環境:
雙節點RAC環境,節點1 wtdb1 節點2 wtdb2
資料庫 zjcsc 例項1 zjcsc1 例項2 zjcsc2
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
CRS 10.2.0.4.0
32G記憶體
     
注意:
在RAC環境下修改 SGA一定是要指定例項逐個修改;
sga_max_size是允許分配的最大的SGA大小,本次設定為8G,以為是靜態引數所以要修改spfile並重啟例項;
sga_target是當前要分配的SGA大小根據ADDM的建議到5G,這是個動態引數可以動態修改。


一、修改作業系統核心引數

A、節點2
[root@wtdb2 ~]# vi /etc/sysctl.conf
kernel.shmall = 4194304  即支援最大16G共享記憶體段可用,我們這次要設定最大SGA為8G,所以要修改這個引數。
[root@wtdb2 ~]# sysctl -p
生效修改

B、節點1
[root@wtdb1 ~]# vi /etc/sysctl.conf
kernel.shmall = 4194304  即支援最大16G共享記憶體段可用,我們這次要設定最大SGA為8G,所以要修改這個引數。
[root@wtdb1 ~]# sysctl -p
生效修改

關於shmall的一點補充:

kernel.shmall
該引數控制系統一次可以使用的共享記憶體總量(以頁為單位,一頁4k=4098),這個值的設定需要根據kernel.shmmax 大小來確定
kernel.shmall = 2097152  就是 2097152*4098= 8G 即最大一次可用8G的記憶體(這個在調整SGA時需要注意,SGA大小設定不可超過該值)
該值預設 2097152 但根據系統記憶體大小和使用的不同可以參考如下:
設定的一般規律
 
kernel.shmall = 2097152    ---記憶體8G
kernel.shmall = 4194304    ---記憶體16G
kernel.shmall = 8388608    ---記憶體32G

 

二、修改SGA

A、修改例項2的SGA

檢查例項
[oracle@wtdb2 ~]$ srvctl status database -d zjcsc

Instance zjcsc1 is running on node wtdb1
Instance zjcsc2 is running on node wtdb2

確定各個例項均執行正常

開始關閉例項2

[oracle@wtdb2 ~]$ srvctl stop instance  -d zjcsc -i zjcsc2
檢查例項

[oracle@wtdb2 ~]$srvctl status database -d zjcsc

Instance zjcsc1 is running on node wtdb1
Instance zjcsc2 is not running on node wtdb2

確定例項2已關閉

確定一個資料庫例項時候業務正常

db2上啟動資料庫到mount狀態
[oracle@wtdb2 ~]srvctl start instance -d zjcsc -i zjcsc2 -o mount

修改例項2的sga_max_size到8G
修改db2的sga_target到5G

[oracle@wtdb2 ~]$ sqlplus / as sysdba
ALTER SYSTEM SET sga_max_size = 8589934592 COMMENT='internally adjusted' SCOPE=SPFILE SID='zjcsc2'
System altered.

ALTER SYSTEM SET sga_target = 5368709120 SCOPE=SPFILE SID='zjcsc2'
System altered.

關閉例項2
srvctl stop instance -d zjcsc -i zjcsc1

啟動例項2
srvctl start instance  -d zjcsc -i zjcsc2 open

檢視例項2的SGA資訊
[oracle@wtdb2 ~]$ sqlplus / as sysdba

SQL> show parameter sga;

NAME               TYPE  VALUE
------------------------------------ ----------- ------------------------------
lock_sga            boolean  FALSE
pre_page_sga        boolean  FALSE
sga_max_size        big integer 8G
sga_target          big integer 5G


SGA修改成功

B、修改例項1的SGA

關閉例項1
[oracle@wtdb1 ~]$ srvctl stop instance -d zjcsc -i zjcsc1

檢查例項狀態
[oracle@wtdb1 ~]$ srvctl status database -d zjcsc
Instance zjcsc1 is not running on node wtdb1
Instance zjcsc2 is running on node wtdb2

確定例項1已經關閉

db1上啟動資料庫到mount狀態
srvctl start instance -d zjcsc -i zjcsc1 -o mount

修改例項1的sga_max_size到8G
修改db2的sga_target到5G

[oracle@wtdb2 ~]$ sqlplus / as sysdba
ALTER SYSTEM SET sga_max_size = 8589934592 COMMENT='internally adjusted' SCOPE=SPFILE SID='zjcsc1'
System altered.
ALTER SYSTEM SET sga_target = 5368709120 SCOPE=SPFILE SID='zjcsc1'
System altered.

關閉例項1
srvctl stop instance -d zjcsc -i zjcsc1

啟動例項1
srvctl start instance  -d zjcsc -i zjcsc1 -o open

檢視例項1的SGA資訊
[oracle@wtdb1 ~]$ sqlplus / as sysdba

SQL> show parameter sga;

NAME               TYPE  VALUE
------------------------------------ ----------- ------------------------------
lock_sga            boolean  FALSE
pre_page_sga        boolean  FALSE
sga_max_size        big integer 8G
sga_target          big integer 5G


SGA修改成功


檢查資料庫狀態
[oracle@wtdb1 ~]$ srvctl status database -d zjcsc

Instance zjcsc1 is running on node wtdb1
Instance zjcsc2 is running on node wtdb2

ok 全部正常

 

 

 

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

相關文章