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的参数之前一定要进行备份,最好也把控制文件也一起备份,给自己留个退路,不然把自己玩死了,只能跑路吧

(0)
上一篇 2022年3月22日
下一篇 2022年3月22日

相关推荐