http://space.itpub.net/13177610/viewspace-671812
sga_target是动态参数,可以调整后马上生效的
但是前提是当前分配的sga_max_size下必须能够承载分配的内存量
这个参数的值只有0和非零两种选择,非零时时和sga_max_size大小保持一致的
所以如果要吧sga_target改成大于sga_max_size的值就必须按照静态参数的改法,重新启动实例
重启后默认的sga_max_size会自动调整到和sga_target一样大小的
---------------------
版本
SQL> select * from
v$version;
BANNER
--------------------------------------------------------------------------------
Oracle
Database 10g Enterprise Edition
Release10.1.0.2.0 - Prod
PL/SQL Release
10.1.0.2.0 - Production
CORE 10.1.0.2.0 Production
TNS for 32-bit
Windows: Version 10.1.0.2.0 - Production
NLSRTL Version 10.1.0.2.0 -
Production
使用spfile
SQL> show parameter spfile
NAME
TYPE VALUE
------------------------------------
---------------------- ------------------------------
spfile
string
F:\ORACLE\PRODUCT\10.1.0\DB_1\
调整前
SQL> set wrap off
SQL> set linesize 159
SQL> show
parameter sga
NAME TYPE
VALUE
------------------------------------ ----------------------
------------------------------
lock_sga boolean
FALSE
pre_page_sga boolean
FALSE
sga_max_size big integer
300M
sga_target big integer
调整为小于sga_max_size值
SQL> alter system set sga_target=200m;
System
altered.
SQL> show parameter sga
NAME
TYPE VALUE
lock_sga
boolean FALSE
pre_page_sga
boolean FALSE
sga_max_size big
integer 300M
sga_target big integer
300M
调整为大于sga_max_size值
SQL> alter system set sga_target=500m;
alter system set
sga_target=500m
*
ERROR at line 1:
ORA-02097: parameter cannot be
modified because specified value is invalid
ORA-00823: Specified value of
sga_target greater than sga_max_size
按照静态参数的方式调整
SQL> alter system set sga_target=500m
scope=spfile;
System altered.
SQL> show parameter
sga
重启验证
SQL> shutdown immediate
Database closed.
Database
dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance
started.
Total System Global Area 524288000 bytes
Fixed Size
789672 bytes
Variable Size 145486680 bytes
Buffers 377487360 bytes
Redo Buffers 524288
bytes
Database mounted.
Database opened.
500M
http://blog.csdn.net/fw0124/article/details/6757368
Oracle9i引入pga_aggregate_target,可以自动对PGA进行调整;
Oracle10引入sga_target,可以自动对SGA进行调整。
Oracle11g则对这两部分进行综合,引入memory_target,可以自动调整所有的内存,这就是新引入的自动内存管理特性。
下面我们通过以下的几个命令来让大家清楚memory_target
的设置与PGA与SGA的关系:
SQL> alter system set memory_target=200m
SQL> alter system set sga_target=0
SQL> alter system set
pga_aggregate_target=0 scope=spfile;
SQL> shutdown
immediate;
Database dismounted.
ORACLE instance shut
down.
ORACLE instance started.
Total System
Global Area 209235968 bytes
Fixed Size 1298920 bytes
Variable Size
150998552 bytes
Database Buffers 54525952 bytes
Redo Buffers 2412544
opened.
设置memory_target参数后,实际上Oracle会自动设置并调整以下两个参数来分配SGA和PGA的内存,这和Oracle10g自动设置sga_target后分配db_cache_size和shared_pool_size的机制是一样的
SQL>
select a.ksppinm name,b.ksppstvl value
2 from x$ksppi a,x$ksppcv b
3 where
a.indx=b.indx
4 and (a.ksppinm like '%sga_target%'
5 or a.ksppinm like
'%pga_aggregate_target%');
NAME
----------------------------------------
sga_target 0
__sga_target
125829120
pga_aggregate_target 0
__pga_aggregate_target
79691776
下面我们了解一下ORA-00845的由来与解决方案:
如果memory_max_target/memory_target设置过大,可能导致instance无法启动,报ORA-00845错误
alter system set memory_max_target=300m scope=spfile;
SQL> shutdown immediate;
ORA-00845:
MEMORY_TARGET not supported on this
system
这个错误有点误导,实际上这并不是说该平台版本上不支持AMM特性,只是设置的memory_max_target超过了系统中设置的share
memory(/dev/shm)而已。在Oracle11g for linux中似乎使用了一种新的机制来管理共享内存段,而不是传统的sys
/dev/shm了。在alert.ora中可以找到更准确的错误描述
解决这个问题的办法之一是增加tmpfs文件系统的容量。
修改/etc/fstab中tmpfs对应的行,
将原来的
tmpfs /dev/shm tmpfs defaults 0 0
改成 tmpfs /dev/shm tmpfs defaults,size=1024M
0 0 ,这样tmpfs增大为1G
size参数也可以用G作单位:size=1G。
重新mount /dev/shm使之生效:
# mount
-o remount /dev/shm
马上可以用"df
-h"命令检查变化。
修改实例的MEMORY_TARGET参数。(这个在数据库关着的时候是行不能通的,用上面的那种比较彻底)
这个方法用alter
system set memory_target=200M;