修改sga_max_size过大,导致数据库无法启动,问题解决(ORA-00844,ORA-00851)
--=============查看SGA--=============
SQL> show parameter sga;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 6560M
sga_target big integer 6000M
SQL>
--=============调整SGA_MAX_SIZE=12G--=============
SQL> alter system set sga_max_size=12288M scope=spfile;
System altered
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
--=============再启动时报错--=============
SQL> startup
ORA-00844: Parameter not taking MEMORY_TARGET into account
ORA-00851: SGA_MAX_SIZE 12884901888 cannot be set to more than MEMORY_TARGET 6878658560.
SQL> startup nomount;
ORA-00844: Parameter not taking MEMORY_TARGET into account
ORA-00851: SGA_MAX_SIZE 12884901888 cannot be set to more than MEMORY_TARGET 6878658560.
此时数据库无法启动,无法修改spfile,只能创建pfile后修改,再启动。
--=============创建pfile--=============
SQL> create pfile='d:pfile.txt' from spfile;
File created.
--查看:
*.memory_target=6870269952
*.sga_max_size=12884901888
*.sga_target=6291456000
--修改
*.memory_target=12884902912 (原来:*.memory_target=6870269952)
--修改后
*.memory_target=12884902912
*.sga_max_size=12884901888
*.sga_target=6291456000
--=============重新生成spfile--=============
SQL> create spfile from pfile='d:pfile.txt';
File created.
--=============再次启动OK--=============
SQL> startup
ORACLE instance started.
Total System Global Area 1.2827E+10 bytes
Fixed Size 2293216 bytes
Variable Size 8287945248 bytes
Database Buffers 4529848320 bytes
Redo Buffers 7282688 bytes
Database mounted.
Database opened.
--=============查看SGA--=============
SQL> show parameter sga;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 12G
sga_target big integer 6016M
SQL> show parameter memory
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
hi_shared_memory_address integer 0
memory_max_target big integer 12320M
memory_target big integer 12320M
shared_memory_address integer 0
--=============修改SGA_TARGET=8g--=============
SQL> alter system set sga_target=8192M;
System altered.
SQL> show parameter sga;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 12G
sga_target big integer 8G
--=============OK--=============
参考文章:
step1: 修改 db_cache_size 的大小, 报如下错吴
SQL> alter system set db_cache_size=350M scope=both;
step2: 修改sga_max_size的大小
SQL> alter system set sga_max_size=850M scope=spfile;
step3: 关闭数据库
SQL> shutdown immediate;
step4: 启动数据库,错误来了:
SQL> startup
提示 SGA_MAX_SIZE 的大小比 MEMORY_TARGET 大,所以启动不了
在网上搜索可一下,觉的这个解释比较贴切:
memory_target是oracle11g用于自动内存管理的,它与memory_max_target是成对出现的,是11g内存管理上的新特性,这一特性的出现使得pga+sga做为整体内存使用被一致的纳入自动管理范畴。简而言之memory_target就是
整个实例所能使用的内存大小,包括PGA和SGA的整体大小,在MEMORY_TARGET的内存大小之内,PGA和SGA所用的内存可以根据当前负载情况自动相互转换。
如果当初始设定的MEMORY_TARGET的内存不够当前数据库使用的时候,Oracle11g还提供了另外一个初始化参数 MEMORY_MAX_TARGET,当原始设定的内存不够使用的时候,可以手工来动态 调节MEMORY_TARGET的大小,但是不允
许超过MEMORY_MAX_TARGET的值。
由此可见sga的尺寸是不能大于memory_target的。所以我们要调整memory_target和memory_max_target的值高于sga_max_size。
step5:解决SGA_MAX_SIZE 的大小比 MEMORY_TARGET 大导致数据无法启动的错误。
由于数据库无法启动,只能调编辑参数文件:
SQL> create pfile='/tmp/pfile20150115.txt' from spfile;
[oracle@REDHAT6 tmp]$ vi/tmp/pfile20150115.txt
将memory_target的值修改成1.2G(由于是本地虚拟机,所以比较小))
即:memory_target=1257889280
备份以前的参数文件
恢复参数文件:
SQL> create spfile from pfile='/tmp/pfile20150115.txt';
启动数据库:
OK,到此结束,数据库正常启动。
end
Tag: Oracle Oracle调优