欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

Oracle 10g修改SGA_TARGET

程序员文章站 2022-06-16 14:14:44
...

在Oracle10g中,Oracle引入了sga_target初始化参数,进而实现了 ASMM(Automatic Shared Memory Management),即让设置一个SGA的目

在Oracle10g中,Oracle引入了sga_target初始化参数,进而实现了 ASMM(Automatic Shared Memory Management),即让设置一个SGA的目标值以及SGA的最大值,数据库来动态调整其中的各个组件,如Database buffer cache、Shared pool等等。从使用的角度来说ASMM的出现极大地简化了Oracle内存初始化参数的设置,在ASMM的使用上高级DBA和初学者不会有太大的差别;然而,ASMM带来便利的同时,更大程度上它是一个黑盒,黑盒里面藏了很多秘密,这些秘密带来比手动管理更多的不确定性。

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

1.测试环境

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

2.官方文档定义

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

SGA_MAX_SIZE

属性

描述

参数类型

Big integer

语法

SGA_MAX_SIZE = integer [K | M | G]

默认值

是否可修改

取值范围

0~视操作系统而定

SGA_TARGET

属性

描述

参数类型

Big integer

语法

SGA_TARGET = integer [K | M | G]

默认值

是否可修改

ALTER SYSTEM

取值范围

64M~视操作系统而定

是否基本参数

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)

l Log buffer

l Fixed SGA and other internal allocations


3.查看相关初始化参数值

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

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

4.修改sga_target

我们通过alter system语句来修改sga_target,需要注意的是,sga_target是个动态参数,而sga_max_size是个静态参数。
这样一来,当修改值sga_max_size时,我们必须首先修改sga_max_size参数值,重启数据库使静态参数生效后再去修改sga_target值,否则,数据库会报错。

4.1修改值

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

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

4.2修改值>SGA_MAX_SIZE

首先,尝试将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 管理错误”。报错过程如下:

SQL>

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

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

本文永久更新链接地址