当前位置:  数据库>oracle

Oracle 10g修改SGA_TARGET

    来源: 互联网  发布时间:2017-06-18

    本文导语: 在Oracle10g中,Oracle引入了sga_target初始化参数,进而实现了 ASMM(Automatic Shared Memory Management),即让设置一个SGA的目标值以及SGA的最大值,数据库来动态调整其中的各个组件,如Database buffer cache、Shared pool等等。从使用的角度来说ASMM...

在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。

  • SQL>
  • SQL> select * from v$version;
  • BANNER
  • ----------------------------------------------------------------
  • Oracle Database 10g Enterprise Edition 10.2.0.4.0 - 64bi
  • PL/SQL 10.2.0.4.0 - Production
  • CORE 10.2.0.4.0 Production
  • TNS for 64-bit Windows: Version 10.2.0.4.0 - Production
  • NLSRTL Version 10.2.0.4.0 - Production
 
2.官方文档定义

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

SGA_MAX_SIZE

 

属性

描述

参数类型

Big integer

语法

SGA_MAX_SIZE = integer [K | M | G]

默认值

数据库启动时SGA的初始化大小,取决于SGA中不同池的大小,例如缓冲区,共享池,大池,等等。

是否可修改

取值范围

0~视操作系统而定

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

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

SGA_TARGET

属性

描述

参数类型

Big integer

语法

SGA_TARGET = integer [K | M | G]

默认值

0(SGA自动调整功能在DEFERRED模式调整请求下被禁用,但是在IMMEDIATE模式调整请求下是允许的)

是否可修改

ALTER SYSTEM

取值范围

64M~视操作系统而定

是否基本参数

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错误。DEFERRED和IMMEDIATE模式的具体值,可以通过V$MEMORY_RESIZE_OPS视图的OPER_MODE列来查看。
 

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

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

  • SQL>
  • SQL> parameter sga
  • NAME TYPE VALUE
  • ------------------------------------ ----------- ------------------------------
  • lock_sga boolean FALSE
  • pre_page_sga boolean FALSE
  • sga_max_size big integer 1232M
  • sga_target big integer 1232M
  • SQL>
  • SQL> parameter pga
  • NAME TYPE VALUE
  • ------------------------------------ ----------- ------------------------------
  • pga_aggregate_target big integer 808M
  • SQL>
  •     我们看到,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值,否则,数据库会报错。 
    注意:
        修改sga_target值时,不能将参数值设置过小,否则会报错ORA-00827。

    4.1修改值
  • SQL> alter system set sga_target=800M;
  • 系统已更改。
  • SQL>
  • SQL> alter system set sga_target=500M;
  • alter system set sga_target=500M
  • *
  • 第 1 行出现错误:
  • ORA-02097: 无法修改参数, 因为指定的值无效
  • ORA-00827: 无法将 sga_target 压缩到指定值
  • SQL>
  • 修改完成后,我们可以查看一下参数值,确认参数是否修改成功。

  • SQL>
  • SQL> parameter sga
  • NAME TYPE VALUE
  • ------------------------------------ ----------- ------------------------------
  • lock_sga boolean FALSE
  • pre_page_sga boolean FALSE
  • sga_max_size big integer 1232M
  • sga_target big integer 800M
  • SQL>
  • 4.2修改值>SGA_MAX_SIZE

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

  • SQL>
  • SQL> alter system set sga_target=2G;
  • alter system set sga_target=2G
  • *
  • 第 1 行出现错误:
  • ORA-02097: 无法修改参数, 因为指定的值无效
  • ORA-00823: 指定的 sga_target 的值大于 sga_max_size
  • SQL>

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

  • SQL>
  • SQL> alter system set sga_max_size=2G scope=spfile;
  • 系统已更改。
  • SQL>
  • 但是在重启过程中报错,提示“ORA-28547: 连接服务器失败, 可能是 Oracle Net 管理错误”。报错过程如下:

    SQL>
  • SQL> shu immediate
  • 数据库已经关闭。
  • 已经卸载数据库。
  • ORACLE 例程已经关闭。
  • SQL>
  • SQL>
  • SQL>
  • ORA-28547: 连接服务器失败, 可能是 Oracle Net 管理错误
  • SQL>
  • SQL> conn /@hoegh as sysdba
  • ERROR:
  • ORA-01041: 内部错误, hostdef 扩展名不存在
  • SQL> conn sys/oracle@hoegh as sysdba
  • ERROR:
  • ORA-28547: 连接服务器失败, 可能是 Oracle Net 管理错误
  • SQL>
  •     经过分析可能和Windows下的服务有关,Windows平台下,oracle 中组成实例的后台进程是由 oracle 服务派生出来的线程实现的,所以任务管理器看不见 DBWn 之类的后台进程。shutdown 停掉实例过程,是关闭后台进程(这里对应线程)和释放 SGA 内存。因为关闭的是线程,所以在任务管理器中看不出变化。停掉 oracle 服务,才能停掉 oracle 进程。于是,我手动关闭并重启了Oracle服务,再次连接sys用户,顺利登陆。

  • SQL> conn /@hoegh as sysdba
  • 已连接。
  • SQL>
  • SQL>
  • SQL> parameter sga
  • NAME TYPE VALUE
  • ------------------------------------ ----------- ------------------------------
  • lock_sga boolean FALSE
  • pre_page_sga boolean FALSE
  • sga_max_size big integer 2G
  • sga_target big integer 800M
  • SQL>
  •     我们看到,sga_max_size参数已经成功修改为2G,此时我们就可以修改sga_target的值了。

  • SQL>
  • SQL> alter system set sga_target=2G;
  • 系统已更改。
  • SQL>
  • SQL>
  • SQL> parameter sga
  • NAME TYPE VALUE
  • ------------------------------------ ----------- ------------------------------
  • lock_sga boolean FALSE
  • pre_page_sga boolean FALSE
  • sga_max_size big integer 2G
  • sga_target big integer 2G
  • SQL>
  •  


        
     
     

    您可能感兴趣的文章:

  • 修改oracle用户主目录
  • 修改oracle用户的.bash_profile之后无法正常登陆
  • 修改Oracle默认用户密码有效期时间
  • Linux下修改Oracle用户密码
  • 查询与修改Oracle字符集
  • ORACLE 修改表结构 之ALTER CONSTAINTS的使用
  • 计算机名称修改后Oracle不能正常启动问题分析及解决
  • Oracle中在pl/sql developer修改表的2种方法
  • oracle修改scott密码与解锁的方法详解
  • Oracle10g 控制台启动端口修改
  • Linux操作系统下Oracle数据库多实例启动方式及修改内存
  • Oracle如何修改系统默认时间格式
  • oracle中修改表名的几种方式
  • 查看修改Oracle10G归档日志空间的限制
  • 查看及修改Oracle编码格式方法
  • Oracle 11G密码180天过期后的修改方法
  • ORACLE 10G修改字符编码没有超字符集的限制
  • 查看和修改Oracle服务器端字符集
  • 有关结果数据集的修改-java和ORACLE数据库
  • Oracle字符集修改查看方法
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 10g和Oracle 11g网格技术介绍
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle 10g中导出到Oracle 9的问题小结
  • 安装Oracle 10g忘记sys密码
  • Oracle 10G进程体系学习笔记
  • [官方最新消息]Oracle 10G 认证考试新变化
  • SOLARIS 下如何卸载ORACLE10G
  • oracle10g 数据备份与导入
  • 为何用dbstart启动oracle10g不好用
  • linux下oracle 10g如何完全卸载?
  • Oracle 10g client for Solaris
  • 急求Linux下oracle 10g和weblogic 9的安装
  • Linux系统下利用java连接Oracle 10G
  • Linux下完全卸载ORACLE 10G的方法
  • Linux下Oracle 10G DBCA等汉字乱码解决方法
  • redhat as 4 下如何安装oracle 10g ?
  • 求助前辈们:solaris 10 x86 安装oracle 10g 错误
  • 将Oracle 8i数据成功移植Oracle 10g的方法
  • 上传一个非常详细的Oracle10G在IBMAIX 5L上的安装步骤与大家分享
  • linux as3 安装oracle10g ,web端能访问,终端用命令不能进入
  • 如何升级Oracle 9i到10g
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • Oracle 数据库开发工具 Oracle SQL Developer
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle EBS R12 支持 Oracle Database 11g
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3