缓冲高速缓存大小是　340MB,Java　池是　4MB,大型池是　4MB,共享池是　148MB。它们合起来总的大小为　(340+4+4+148=)　496MB,近似与　500MB　的目标　SGA　的大小相同。　图1:池的初始分配　现在假定提供给　Oracle　的主机内存从　500MB　减少为　300MB,这意味着我们必须减少总　SGA　的大小。我们可以通过减小目标　SGA　大小来反映这种变化。　alter　system　set　sga_target　=　300M　scope=both;　现在查看各个池,我们可以看到:　SQL>　select　current_size　from　v$buffer_pool;　CURRENT_SIZE　SQL>　select　pool,　sum(bytes)/1024/1024　Mbytes　from　v$sgastat　group　by　pool;　POOL　MBYTES　java　pool　4　large　pool　4　shared　pool　44　占用的总大小是　240+4+4+44　=　296MB,接近于目标的　300MB。注意如图　2　所示,当SGA_TARGET　改变时,如何自动重新分配池。　图2:在将　SGA　大小减少到　300MB　之后重新分配池　这些池的大小是动态的。池将根据工作负载扩展,以容纳需求的增长,或缩小以容纳另一个池的扩展。这种扩展或缩小自动发生,无需　DBA　的干预,这与本文开头的示例不同。让我们暂时返回到那个场景,假定在初始分配后,RMAN　作业启动,指示需要一个更大的大型池,大型池将从　4MB　扩展到　40MB,以容纳需求。这个额外的　36MB　将从数据库缓冲中划出,数据库块缓冲将缩小,如图　3　所示。　图3:在对大型池的需求增长之后经过重新分配的池　池的大小变化基于系统上的工作负载,因此不需要为最坏的情况调整池的大小　—　它们将根据需求的增长自动调整。此外,SGA　的总大小始终在由　SGA_TARGET　指定的最大值之内,因此不存在使内存需求的增长比例失调(这将导致分页和交换)的风险。您可以动态地将　SGA_TARGET　增加至绝对最大值,这个绝对最大值是通过调整参数　SGA_MAX_SIZE　指定的。　哪些池不受影响?　SGA　中的一些池不受动态大小调整的影响,但是必须显式指定这些池。其中值得注意的