TDLIB > Oracle
修改sga_max_size过大,数据库无法启动,问题解决(ORA-00844,ORA-00851,memory_target)
Allen   ·  2021.0302 08:59:01
Stat:1564v. 0r. 0u. 0d. 0f 
#0. (Normal)

修改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;
[[email protected] tmp]$ vi/tmp/pfile20150115.txt
将memory_target的值修改成1.2G(由于是本地虚拟机,所以比较小))
即:memory_target=1257889280
备份以前的参数文件
恢复参数文件:
SQL> create spfile from pfile='/tmp/pfile20150115.txt';
启动数据库:
OK,到此结束,数据库正常启动。

end

【Copyright Notice】
This article is original, follow CC 4.0 BY-SA copyright agreement! Please indicate the original url when repost.
Original url:https://tdlib.com/am.php?t=u55ue86FHiWJ

Tag:   Oracle   Oracle调优   
Next
【Related content】
Top     1/1 
You are not logged in, please [Register] or [Login]
(Register in one minute!)
Copyright ©TDLIB, All Rights Reserved.
Powered by TYCMS Version 1002