實體記憶體擴容,oracle 11g R1資料庫相關參數修改

來源:互聯網
上載者:User

背景:
        對主備機的實體記憶體擴容一倍,記憶體擴容後,需要修改資料庫相關的記憶體參數,包括資料庫層面和作業系統層面。預計對備機擴容一倍記憶體操作完畢後,修改相關記憶體參數,將資料庫啟動到備機,運行2天,若沒有問題,再對之前的主機實體記憶體擴容一倍,將資料庫切換到備機。之所以這麼做,是因為擴容操作,需要關閉作業系統,一晚上搞不定,所以分兩次操作,同時也可以更好的確保,主備機在記憶體擴容和修改相關資料庫參數後,都可以正常運行。

環境介紹:

雙機作業系統:solaris 10資料庫版本:oracle 11g R1 64bit當前主機的hostname和IP: fly-db1  192.168.20.20當前備機的hostname和IP: fly-db2  192.168.20.21實體記憶體,擴容前94G,擴容後188G

      1、確認資料庫的記憶體管理方式:手動管理

SQL> show parameter memory_targetNAME                                 TYPE        VALUE------------------------------------ ----------- -------memory_target                        big integer   0SQL> show parameter sga_targetNAME                                 TYPE        VALUE------------------------------------ ----------- -------sga_target                           big integer     0

     2、查看當前spfile路徑:採用共用儲存

SQL>show parameter spfile   <--- 如果採用的是共用儲存,spfile真實的儲存位置在儲存上。<---如果顯示的是/XXX/XXX/dbs/spfile_SID.ora  可通過strings命令查看內容來確定真正的spfile路徑。

      3、剛已確認資料庫的參數檔案採用共用儲存,則資料庫的所有檔案控制檔案,線上日誌,資料檔案資料資料表空間和暫存資料表空間的資料檔案),參數檔案)均應該為裸裝置,現需確認主備機資料庫的這些檔案確實為裸裝置,以及許可權均為:oracle:oinstall或者oracle:dba,以避免雙機切換過程中,因為資料庫的檔案許可權不正確或使用到檔案系統的資料檔案導致切換失敗之前遇到過這種情況,所以需要再次確認)

bash-3.00$ hostnamefly-db1bash-3.00$ cat check_file.sql  //在當前主機運行以下SQL,查詢所有資料庫檔案,儲存到文本oracle_131215.txtset heading offset echo offset newpage noneset feedback offspool oracle_131215.txtselect file_name from dba_data_files;select file_name from dba_temp_files;select member from v$logfile;select name from v$controlfile;select value  from v$parameter where name='spfile';spool offbash-3.00$ sqlplus /nologSQL> conn /as sysdbaConnected.SQL> @check_file.sqlSQL> quitbash-3.00$ lscheck_file.sql     oracle_131215.txtbash-3.00$ for i in $(cat oracle_131215.txt);do ls -l $i;done //查看這些檔案有省略)是否為裸裝置即字元裝置),許可權是否正確crw-------   1 oracle   dba      342, 200 Dec 15 07:39 /dev/raw/raw1crw-------   1 oracle   dba      342, 201 Dec 15 02:57 /dev/raw/raw2crw-------   1 oracle   dba      342, 202 Dec 15 03:04 /dev/raw/raw3crw-------   1 oracle   dba      342, 254 Dec 15 01:22 /dev/raw/raw4crw-------   1 oracle   dba      342, 253 Dec 15 03:25 /dev/raw/raw5bash-3.00$ for i in $(cat oracle_131215.txt);do ls -l $i | grep -v ^c;done //若檔案個數太多,則刷選開頭不是c打頭的檔案,若無輸出,即均為裸裝置bash-3.00$ for i in $(cat oracle_131215.txt);do ls -l $i | grep root;done //刷選是否有root字眼的檔案,檔案建立時,預設為root:rootbash-3.00$ scp oracle_131215.txt  oracle@192.168.20.21:/home/oracle/  //在備機執行一樣的操作Password:oracle_131215.txt    100% |*********************************************************************************| 27216       00:00bash-3.00$ ssh oracle@192.168.20.21Password:Last login: Sun Dec 15 10:31:13 2013 from 192.168.20.20ONLY Authorized users only! All accesses loggedfly-db2% bashbash-3.00$ hostnamefly-db2bash-3.00$ for i in $(cat oracle_131215.txt);do ls -l $i;donecrw-------   1 oracle   dba      342, 200 Sep 15  2012 /dev/raw/raw1crw-------   1 oracle   dba      342, 201 Sep 15  2012 /dev/raw/raw2crw-------   1 oracle   dba      342, 202 Sep 15  2012 /dev/raw/raw3crw-------   1 oracle   dba      342, 254 Sep 15  2012 /dev/raw/raw4crw-------   1 oracle   dba      342, 253 Sep 15  2012 /dev/raw/raw5bash-3.00$ for i in $(cat oracle_131215.txt);do ls -l $i | grep -v ^c;donebash-3.00$ for i in $(cat oracle_131215.txt);do ls -l $i | grep root;done

     4、確認需要修改的參數:

在主備機修改/etc/system檔案中的以下參數為以下值,:shmsys:shminfo_shmmax為共用記憶體段的最大值,一般為實體記憶體的一半,精確到位元組)set shmsys:shminfo_shmmax=100931731456將以下資料庫參數修改為以下值:memory_max_target=110G  //實體記憶體的60%sga_max_size=110G  //實體記憶體的60%db_cache_size=55G //實體記憶體的30%shared_pool_size=10G  //實體記憶體的5%pga_aggregate_target=18G  //實體記憶體的10%db_files=2000  //資料庫的資料檔案個數限制修改為2000processes=3000 //當前該值已經很大,不再修改

     具體的操作步驟如下:

     1、主備機的/etc/system檔案必須一致,否則將備機的shmsys:shminfo_shmmax參數修改後,重啟備機作業系統生效該參數時,將失敗,/etc/system檔案只有在作業系統引導時,才會被讀取,理論上,在資料庫運行時,是可以修改/etc/system檔案的shmsys:shminfo_shmmax參數的

     2、修改主備機的/etc/system檔案中的shmsys:shminfo_shmmax參數為實體記憶體(188G)的一半,精確到位元組。
set shmsys:shminfo_shmmax=100931731456

    3、對比主備機的/etc/system檔案是否一致,無任何輸出,則一致

bash-3.00#hostnamefly-db1bash-3.00# diff /etc/system /home/oracle/system_flydb2_131215.bak

     4、重啟備機作業系統,生效該參數的設定

bash-3.00# hostnamefly-db1bash-3.00# syncbash-3.00# syncbash-3.00# syncbash-3.00# shutdown -i6 -g0 -y

       5、通過spfile建立pfile,備份一份pfile檔案到/home/oracle/bak目錄下注意不要備份到/tmp目錄下,作業系統重啟後,/tmp目錄下的檔案會被清空,在該作業系統,/tmp的檔案系統類型為swap可通過df -h看出),即/tmp其實指的是記憶體,你在/tmp目錄下存3G大小的檔案,會發現,記憶體的使用增長了相應的大小,當作業系統重啟後,/tmp目錄下的檔案是會消失的),同時下載一份到本地,該pfile為未做任何修改,用於復原操作使用

SQL>create pfile='/home/oracle/pfile_131215.ora' from spfile;bash-3.00$ cp /home/oracle/pfile_131215.ora /home/oracle/bak/

    6、以sys登陸資料庫,修改以下參數:

bash-3.00$sqlplus /nologSQL> conn /as sysdbaSQL>alter system set memory_max_target=110G scope=spfile;SQL>alter system set sga_max_size=110G scope=spfile;SQL>alter system set db_files=2000 scope=spfile;

    7、通過spfile再次備份pfile注意該pfile為修改了memory_max_target,sga_max_size,db_files參數之後的參數檔案):

SQL>create pfile='/home/oracle/pfile_1215_xiugai.ora' from spfile;bash-3.00$ cp /home/oracle/pfile_1215_xiugai.ora /home/oracle/bak

    8、刪除該pfile檔案中最上面的關於當前記憶體參數值內容部分sid._*),在我這的pfile,刪除以下值

fly.__db_cache_size=31138512896fly.__java_pool_size=268435456fly.__large_pool_size=268435456fly.__pga_aggregate_target=5368709120fly.__sga_target=48318382080fly.__shared_io_pool_size=0fly.__shared_pool_size=15837691904fly.__streams_pool_size=536870912

   9、在pfile中更改參數為以下的值:

*.db_cache_size=55G*.pga_aggregate_target=18G*.shared_pool_size=10G

   10、在雙機軟體中,點擊進入維護模式,然後關閉監聽,關閉資料庫

bash-3.00$hostnamefly-db1bash-3.00$lsnrctl stopbash-3.00$sqlplus /nologSQL>conn /as sysdbaSQL>alter system checkpoint;SQL>alter system switch logfile;SQL>alter system switch logfile;SQL>alter system switch logfile;SQL>alter system switch logfile;SQL>shutdown immediate;

   11、在主機fly-db1通過pfile重建spfile

SQL>create spfile from pfile='/home/oracle/pfile_1215_xiugai.ora';或者直接指定裸裝置的路徑重建spfileSQL>create spfile='/dev/raw/raw1' from pfile='/home/oracle/pfile_1215_xiugai.ora';

   12、因為雙機軟體,無法在維護模式下,將在主機已經關閉的資料庫直接啟動到備機fly-db2備機實體記憶體已擴容到188G,主機的實體記憶體仍為之前的94G),雙機軟體必須在資料庫啟動的情況下,才能將資料庫切換到另外一台主機,但spfile已經修改,這時候,如果直接startup啟動資料庫,資料庫必然報out of memory的錯誤,原以為雙機可以直接將資料庫啟動到備機,這是操作時,沒有想到的問題,那麼,我們可以通過我們最初備份的pfile,通過pfile啟動資料庫,然後再通過雙機軟體將資料庫切換到另外一台主機,來解決這個問題

bash-3.00$sqlplus /nologSQL>conn /as sysdbaSQL>startup pfile='/home/oracle/pfile_131215.ora';

    13、在主機fly-db1啟動資料庫後,通過雙機軟體,退出維護模式,將資料庫啟動到備機fly-db2

    14、觀察alert日誌是否有錯誤資訊,通過spfile建立pfile或者產生awr報告,觀察以上設定是否生效。通過以下SQL,查看當前的參數設定:

SQL>select name, value, display_valuefrom v$parameter twhere t.name in ('memory_max_target','memory_target','sga_max_size','sga_target','shared_pool_size','db_cache_size','pga_aggregate_target','db_files');

 

本文出自 “斜陽悠悠寸草心” 部落格,請務必保留此出處http://fly1116.blog.51cto.com/8301004/1343788

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.