现在的位置: 首页 > 综合 > 正文

Oracle 11g 修改SGA大小

2014年09月05日 ⁄ 综合 ⁄ 共 5686字 ⁄ 字号 评论关闭
一、      Oracle 11g 修改SGA大小
1.   查看SGA大小

SQL> show parametersga

NAME                   TYPE  VALUE

----------------------------------------------- ------------------------------

lock_sga              boolean    FALSE

pre_page_sga             boolean    FALSE

sga_max_size             big integer 800M

sga_target            big integer 0

2.   修改SGA大小

SQL> alter systemset sga_max_size=820m scope=spfile;

System altered.

SQL> show parametersga

NAME                   TYPE  VALUE

----------------------------------------------- ------------------------------

lock_sga              boolean    FALSE

pre_page_sga             boolean    FALSE

sga_max_size             big integer 800M

sga_target            big integer 0

SQL> shutdownimmediate;

Database closed.

Database dismounted.

ORACLE instance shutdown.

3.   Open 数据库

SQL> startup

ORA-00844: Parameternot taking MEMORY_TARGET into account

ORA-00851:SGA_MAX_SIZE 859832320 cannot be set to more than MEMORY_TARGET 838860800.

可以通过sga_max_size调整oracle在启动时所使用的最小sga大小,但该参数不能超过memory_target所指定的大小,如memory_target为1G,那么sga_max_size只能小于或等于1G

否则在启动时会出现以上错误提示:

oracle 11g和之前的10g对sga的管理有了些变化。MEMORY_TARGET相当于sga_target + pga_aggregate_target的总和。

我这里的memory_target 大小是

compatible=11.2.0.0.0

diagnostic_dest=/u01/app/oracle

memory_target=836763648

所以启动不了。

4.   解决方法

首先

找到pfile文件,修改pfile文件中 memory_target的大小

[root@11g pfile]# viminit.ora.6112013214831

[root@11g pfile]# cp init.ora.6112013214831initorcl.ora 以防万一

[root@11g pfile]# viminitorcl.ora

[root@11g pfile]# pwd

/u01/app/oracle/admin/orcl/pfile

[root@11g pfile]# ls

init.ora.6112013214831  initorcl.ora

[root@11g pfile]# ll

total 8

-rw-r----- 1 oracleoinstall 1956 Jul 11 21:43 init.ora.6112013214831

-rw-r----- 1 root   root    1957 Jul 12 10:41 initorcl.ora

[root@11g pfile]# chmod oracleinstallinitorcl.ora 权限要正确

                              修改为 860000000

SQL> startuppfile='/u01/app/oracle/admin/orcl/pfile/initorcl.ora'

ORACLE instancestarted.

Total System GlobalArea  860160000 bytes

Fixed Size       2233200 bytes

Variable Size       507514000bytes

Database Buffers   348127232 bytes

Redo Buffers         2285568 bytes

Database mounted.

Database opened.

SQL> show parametersga

NAME                   TYPE  VALUE

----------------------------------------------- ------------------------------

lock_sga              boolean    FALSE

pre_page_sga             boolean    FALSE

sga_max_size             big integer 824M

sga_target            big integer 0

这里只是暂时的解决。

二、      oracle 11g中的memory_target小结

11g中新增MEMORY_MAX_TARGET参数,此参数一出现就如在10g中第一次出现SGA_MAX_SIZE参数一样给人以耳目一新的感觉。memory_max_target是设定Oracle能占OS多大的内存空间,一个是OracleSGA区最大能占多大内存空间。无疑在11gOracle又向自动管理内存更进一步。

10g的sga_max_size是动态分配Shared Pool Size,database buffer cache,large pool,java pool,redo log buffer大小的,只是根据Oracle运行状况来重新分配SGA各内存块的大小。PGA在10g中需要单独设定.

11gMEMORY_MAX_TARGET参数包含两部分内存,一个System global area (SGA),另一个system global area(PGA)。很显然在11g中可已经将PGA和SGA一起动态管理了。

  

MEMORY_TARGET--操作系统的角度上 Oracle 所能使用的最大内存值。动态参数

MEMORY_MAX_TARGET--MEMORY_TARGET所能设定的最大值。非动态可调。

Tip: 如果使用的是 pfile,设定了 MEMORY_TARGET 而没有指定 MEMORY_MAX_TARGET 的值,则实例启动后 MEMORY_MAX_TARGET 的值与 MEMORY_TARGET 相等。如果 pfile 中指定了 MEMORY_MAX_TARGET 而没有指定 MEMORY_TARGET ,实例启动后 MEMORY_TARGET 为 0 。

AMM 在后台会启动一个内存管理(Memory Manager, mman)进程。

因为 AMM 的引入,Oracle 内存管理更加灵活多样。 组合出来有 5 种内存管理形式.

自动内存管理

自动共享内存管理

手工共享内存管理

自动 PGA 管理

手动 PGA 管理

1) 自动内存管理

默认安装的实例即是 AMM 方式。如下

SQL> showparameters target

NAME                               TYPE                  VALUE

---------------------------------------------------------- ------------------------------

archive_lag_target                  integer               0

db_flashback_retention_target       integer               1440

fast_start_io_target                integer               0

fast_start_mttr_target              integer               0

memory_max_target                   biginteger            1216M

memory_target                       biginteger            1216M

pga_aggregate_target                big integer           0

sga_target                         big integer            0

要注意到 SGA_TARGET 和 都为 0 。

2.自动共享内存管理(Automatic Shared MemoryManagement, ASMM)

这是10g 引入的管理方式,要使用这种方式,需要设置初始化参数 MEMORY_TARGET=0 ,然后显式的指定 SGA_TARGET 的值。

SQL>alter system set sga_target=1024m scope=both;

altersystem set sga_target=1024m scope=both

*

ERRORat line 1:

ORA-02097arameter cannot be modified because specified value is invalid

ORA-00839:SGA_TARGET cannot be modified to the specified value

SQL>alter system set memory_target=0 scope=both;

Systemaltered.

SQL>alter system set sga_target=1024m scope=both;

Systemaltered.

SQL>

这两个参数的修改是有严格顺序的,如果不遵守倒也没问题–Oracle 会报告错误。

3.手工共享内存管理

这个又更加原始了一些。因为原始,所以新的初始化参数 SGA_TARGET 与 MEMORY_TARGET 都要设置为 0. 然后手工设定 share_pool_size 、db_cache_size 等 sga 参数。要注意 RESULT_CACHE_SIZE 参数是 11g 新引入的,用来缓存 SQL 结果。

4.自动 PGA 内存管理

如果使用 AMM , 则对 PGA 不用操心。如果要做到精细控制而切换到自动 PGA 内存管理模式,需要设定WORKAREA_SIZE_POLICY = AUTO(默认即为 AUTO),然后需要指定 PGA_AGGREGATE_TARGET 的值。如需要精确控制PGA,则 WORKAREA_SIZE_POLICY = MANUAL .(Thanksvongates)

5.手动 PGA 管理

前提是 WORKAREA_SIZE_POLICY = manual ,然后分别指定SORT_AREA_SIZE 等 PGA 相关的参数。估计现在没有人干这个吃力不讨好的事情了。这个模式大可以忽略。

AMM 的限制

如果初始化参数 LOCK_SGA = true ,则AMM 是不可用的。

下面来看看在11g中Memory_target设置和不设置对SGA/PGA的影响:

A:如果Memory_target设置为非0值

   (下面有四种情况来对SGA和PGA的大小进行分配)

    1:sga_target和pga_aggregate_target已经设置大小如果Oracle中

已经设置了参数sga_target和pga_aggregate_target,则这两个参数将各自被分配为最小值最为它们的目标值。

Memory_Target=SGA_TARGET+PGA_AGGREGATE_TARGET ,大小和  

         memory_max_size一致。

     2:sga_target 设置大小,pga_aggregate_target 没有设置大小

         那么pga_aggregate_target初始化值=memory_target-sga_target

     3:sga_target 没有设置大小,pga_aggregate_target 设置大小

         那么sga_target初始化值=memory_target-pga_aggregate_target

     4:sga_target 和pga_aggregate_target 都没有设置大小Oracle 11g

中对这种sga_target和pga_aggregate_target都没有设定大小的情况下,Oracle将对这两个值没有最小值和默认值。Oracle将根据数据库运行状况进行分配大小。但在数据库启动是会有一个固定比例来分配:

        sga_target =memory_target *60%

        pga_aggregate_target=memory_target *40%

B:如果Memory_target没有设置或=0(在11g中默认为0)

   11g中默认为0则初始状态下取消了Memory_target的作用,完全和10g在内存管理上一致,完全向下兼容。

(也有三种情况来对SGA和PGA的大小进行分配)   

      1:SGA_TARGET设置值,则自动调节SGA中的shared pool,buffer cache,redo logbuffer,java pool,larger pool

          等内存空间的大小。PGA则依赖pga_aggregate_target的大小。sga 和pga不能自动增长和自动缩小。

2:SGA_target和PGA_AGGREGATE_TARGET 都没有设置

           SGA中的各组件大小都要明确设定,不能自动调整各组建大小。PGA不能自动增长和收缩。

      3: MEMORY_MAX_TARGET设置而MEMORY_TARGET =0 这种情况先和10g一样,不做说明

抱歉!评论已关闭.