欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

oracle sga参数改大后导致数据库启动失败怎么解决?

程序员文章站 2023-11-20 08:43:16
sga_max_size初始化参数指定实例生命周期中全局区域的最大大小。您可以动态更改影响缓冲区高速缓存,共享池,大型池,java池和流池大小的初始化参数,但仅限于这些大小的总和与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的参数之前一定要进行备份,最好也把控制文件也一起备份,给自己留个退路,不然把自己玩死了,只能跑路吧