本單位新增一臺服務器,內存配置爲8G,在安裝ORACLE 9i數據庫以後,想重新設置一下SGA。在測試過程中我們發現,當將SGA的最大大小的設置過大時會損壞數據庫的SPFILE文件造成數據庫不能啓動,經過網上查找資料發現對於32位機器ORACLE的SGA有個1.7G的限制,如果由於不小心將SGA_MAX_SIZE的值設置的超過1.7G,則在ORACLE數據庫啓動過程中會報ORA-27100 shared memory realm already exists錯誤。
解決方法有如下兩種(本次遇到錯誤有第一種成功解決):
第一種:
Spfile文件(在盤符:/oracle/ora92/database目錄下)是二進制文件不可以直接編輯,可以通過重新建立pfile文件(在盤符:/oracle/admin/SID/pfile目錄下)。
SQL> Shutdown immediate;
Pfile文件是可以直接編寫的,可以改掉錯誤的sga_max_size的值到合適的大小,重新以SYSDBA身份連接數據庫,然後就可以從pfile啓動
SQL> Startup pfile='D:/oracle/ora92/database/pfileSID.ora';
將原來的spile文件刪除,再通過已經改正過的pfile文件重新建立spile文件
SQL>Create spfile='D:/oracle/ora92/database/spfileSID.ora'
From pfile='D:/oracle/ora92/database/pfileSID.ora';
SQL> Startup;
總結:當實例是因爲Sga的改動而無法啓動,這種情況下無法通過spfile(二進制文件)更改過來,就可以通過建立pfile文件進行更改。
第二種:
仔細分析一下,這是windows服務及oracle的問題,oracle在windows啓動中如果由於sga_max_size的問題,實例不會啓動成功,但是仍然會有一個錯誤的實例存,shutdown immediate及shutdown abort都關閉不了。由於缺省安裝時,oracle在windows服務啓動時會自動啓動實例,所以每次啓動服務都會自動用默認的錯誤的spfile啓動實例,導至內存錯誤。
知道問題的原因後,解決的辦法就很簡單,解決的辦法以下兩種:
1.關閉服務,刪除數據庫的spfile文件,用新的正確的pfile啓動後,再生成新的spfile;
2.設置數據庫在服務啓動時不自動啓動實例,再用正確的pfile啓動實例,然後再生成新的spfile。
如何設置數據庫在服務啓動時不自動啓動實例有以下兩種方法:
1.直接修改註冊表HKEY_LOCAL_MACHINE/SOFTWARE/ORACLE/HOME0下的數據庫對象項ORA_MYDB_AUTOSTART值爲false
2.使用ORACLE安裝的工具Administration Assistant for Windows NT修改數據庫啓動關閉選項。
“Oracle Managed Objects”——》“數據庫”——》“數據庫名稱”——右鍵“啓動關閉選項”——》“服務啓動時啓動例程”的勾去掉。(也可以在這裏右鍵停止數據庫的服務)
1、後來把數據庫的pfile文件中的
*.sga_max_size=1224736768 (1168M)
*.sga_target=1224736768
上面的sga參數設置小
2、關閉“服務”中“Oracle”進程,然後重新啓動時,用pfile來啓動數據庫。最後可以成功啓動。
(系統不一樣,很多情況不太一樣,windows中的Oracle中感覺老有很多問題,還是比較喜歡UNIX和Linux系統中的Oracle)