设为首页 加入收藏

TOP

Oracle 10g修改SGA_TARGET
2015-08-31 20:00:23 来源: 作者: 【 】 浏览:191
Tags:Oracle 10g 修改 SGA_TARGET

下面我们看一下如何修改sga_target初始化参数的大小。


1.测试环境


我们在Oracle10g中进行测试,操作系统是Windows Server 2008 R2 Standard。


? ? 接下来,我们看一下和ASMM相关的两个初始化参数在官方文档中的说明。


?


SGA_MAX_SIZE指定了实例生命周期内SGA的最大值。


64位平台或者非32Windows平台,当MEMORY_TARGETMEMORY_MAX_TARGET被设定时,SGA_MAX_SIZE会被设置为二者的较大值。这样将会预留更多的地址空间用于扩大SGA


SGA_TARGET制定了SGA各个组件的总大小。如果SGA_TARGET被指定,那么下面所列出的内存池大小将被自动分配:


l? Buffer cache (DB_CACHE_SIZE)


l? Shared pool (SHARED_POOL_SIZE)


l? Large pool (LARGE_POOL_SIZE)


l? Java pool (JAVA_POOL_SIZE)


l? Streams pool (STREAMS_POOL_SIZE)


如果上述自动调整的内存池被设置为非零值,那么这些值将被自动共享内存管理系统(ASMM, Automatic Shared Memory Management)视为最小值。如果一个应用组件正常运行要求一个最小数值的内存,那么你就需要设定最小值。


下述内存池需要手工设置大小,不受自动共享内存管理系统(ASMM, Automatic Shared Memory Management)的影响:


l? Log buffer


l? Other buffer caches, such as KEEP, RECYCLE, and other block sizes


l? Fixed SGA and other internal allocations


当自动共享内存管理系统在计算自动调整内存池的具体大小时,会将上述内存池内存从总的可用SGA_TARGET中扣除。


在“默认值”字段中,IMMEDIATE模式自动调整要求是必要的,这样可以避免ORA-04031错误。DEFERREDIMMEDIATE模式的具体值,可以通过V$MEMORY_RESIZE_OPS视图的OPER_MODE列来查看。
?


? ? 我们通过show parameter来查看初始化参数值,相关的参数包括sga_max_size、sga_target、pga_aggregate_target等。


? ? 我们看到,sga_max_size和sga_target两个参数的值都是1232M。


? ? 我们通过alter system语句来修改sga_target,需要注意的是,sga_target是个动态参数,而sga_max_size是个静态参数。
? ? 这样一来,当修改值<=sga_max_size时,我们可以直接修改sga_target值;但是,当修改值>sga_max_size时,我们必须首先修改sga_max_size参数值,重启数据库使静态参数生效后再去修改sga_target值,否则,数据库会报错。?
注意:
? ? 修改sga_target值时,不能将参数值设置过小,否则会报错ORA-00827


? ? 首先,尝试将sga_target参数值修改为800M,修改成功;
? ? 然后,尝试将sga_target参数值修改为500M,数据库报错ORA-00827,提示“无法将 sga_target 压缩到指定值”;


修改完成后,我们可以查看一下参数值,确认参数是否修改成功。


? ? 首先,尝试将sga_target参数值修改为2G,数据库报错ORA-00823,提示“指定的 sga_target 的值大于 sga_max_size”;?



? ? 从官方文档对两个初始化参数的解释得知,sga_target的最大值是sga_max_size。
? ? 因此,我们需要首先修改sga_max_size的值,由于sga_max_size是静态参数,因此需要重启数据库,待静态参数修改生效后,这时才能将ga_target设置为目标值。


但是在重启过程中报错,提示“ORA-28547: 连接服务器失败, 可能是 Oracle Net 管理错误”。报错过程如下:


? ? 经过分析可能和Windows下的服务有关,Windows平台下,oracle 中组成实例的后台进程是由 oracle 服务派生出来的线程实现的,所以任务管理器看不见 DBWn 之类的后台进程。shutdown 停掉实例过程,是关闭后台进程(这里对应线程)和释放 SGA 内存。因为关闭的是线程,所以在任务管理器中看不出变化。停掉 oracle 服务,才能停掉 oracle 进程。于是,我手动关闭并重启了Oracle服务,再次连接sys用户,顺利登陆。


? ? 我们看到,sga_max_size参数已经成功修改为2G,此时我们就可以修改sga_target的值了。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Oracle 10g,11g中的数据库克隆安装 下一篇Oracle 11g维护分区(四)——Exc..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: