oracle sga參數改大後導致數據庫啓動失敗

SGA_MAX_SIZE初始化參數指定實例生命週期中系統全局區域的最大大小。您可以動態更改影響緩衝區高速緩存,共享池,大型池,Java池和流池大小的初始化參數,但僅限於這些大小的總和與SGA其他組件的大小(固定SGA,變量SGA和重做日誌緩衝區)不會超過指定的值SGA_MAX_SIZE

如果不指定SGA_MAX_SIZE,則Oracle數據庫將選擇一個默認值,該值是初始化時指定或缺省的所有組件的總和。如果確實指定了SGA_MAX_SIZE,並且在數據庫初始化時,該值小於爲所有組件分配的內存總和(顯式地在參數文件中或默認值),那麼數據庫忽略設置SGA_MAX_SIZE並選擇正確的值爲這個參數。

通過將SGA_TARGET參數設置爲非零值來啓用自動共享內存管理功能該參數設置SGA的總大小。它取代了控制爲一組特定組件分配的內存的參數,這些組件現在可以根據需要自動動態調整大小(調整)。

但是如果sga_max_size的值設置的太大,會導致系統不能分配足夠的內存,導致在數據庫修改完sga_max_size 參數之後,下次啓動數據庫會出現

SQL> startup nomount;
ORA-00844: Parameter not taking MEMORY_TARGET into account
ORA-00851: SGA_MAX_SIZE 2147483648 cannot be set to more than MEMORY_TARGET 1040187392.
這種時候,如果你在設置修改spfile設置前,進行了備份的話,可以通過制定之前的備份的spfile進行啓動,spfile的默認路徑$ORACLE_HOME/dbs目錄,備份spfile可以直接copy一個副本,也可以生成一個pfile文件

 

SQL>create pfile='pfile path' from spfile;
指定spfile路徑進行啓動


SQL> startup nomount spfile='spfile path'
單單是,如果你改之前既沒copy,也沒備份,那麼真的是悲劇了,不過還是可以從改過的spfile文件裏面修改一個pfile,先啓動起來在進行參數調整。具體步驟是

1、 把spfile趕緊做個備份,雖然現在的spfile不能用,但是,如果連這個不能用的也丟了的話,那真是困難了。

2、把當前的spfile改成名稱init+實例名.ora   例如實例名是orcl 就改成initorcl.ora,大寫的ORCL就改成initORCL.ora

3、編輯initorcl.ora文件,也就是把裏面的特殊的看不懂的字符給刪除,同時找到sga_MAX_SIZE這個參數,改成之前沒有修改時的數值或者改一個較小的值,例如,sga_max_size=900M,大小自己看着改。改好後的樣子大概是

orcl.__db_cache_size=356515840
orcl.__java_pool_size=4194304
orcl.__large_pool_size=4194304
orcl.__oracle_base='/data/oracledba'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=385875968
orcl.__sga_target=650117120
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=264241152
orcl.__streams_pool_size=8388608
*.audit_file_dest='/data/oracledba/admin/orcl/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/data/oracledba/oradata/orcl/control01.ctl','/data/oracledba/fast_recovery_area/orcl/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='orcl'
*.db_recovery_file_dest='/data/oracledba/fast_recovery_area'
*.db_recovery_file_dest_size=4322230272
*.diagnostic_dest='/data/oracledba'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.log_archive_dest_1='location=/data/archivelog'
*.memory_target=1033895936
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_max_size=988M
*.undo_tablespace='UNDOTBS1'

4、看看$ORACLE_HOME/dbs目錄下有沒有文件以lk+實例名的文件,例如lkorcl   有的話可以先改名備份,在刪除

5、可以啓動了

starup nomount
如果可以nomount起來基本就沒問題了,接着可以

alter database mount;
alter database open;
切記,在改spfile的參數之前一定要進行備份,最好也把控制文件也一起備份,給自己留個退路,不然把自己玩死了,只能跑路吧




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章