设置数据库默认为spfile启动,并且数据库SGA大小为2G,PGA大小为200M

先查看数据库默认启动文件:

SELECT value FROM v$parameter WHERE name = 'spfile';

可以看出数据库默认为SPFILE启动

使用以下命令检查当前会话使用的是SPFILE还是PFILE:

首先,将 MEMORY_TARGET 参数设置为 0。这将确保 Oracle 不会自动管理 SGA 和 PGA 的大小,而是让你手动配置它们。执行以下命令:

ALTER SYSTEM SET MEMORY_TARGET=0 SCOPE=SPFILE;

使用以下命令将 SGA 的大小设置为 2GB,PGA 的大小设置为 200MB:

ALTER SYSTEM SET sga_target=2G scope=spfile;

ALTER SYSTEM SET pga_aggregate_target=200M scope=spfile;

这将在 spfile 中设置系统级参数 SGA_TARGET 和 PGA_AGGREGATE_TARGET 的值,并将其范围设置为 spfile。请注意,在将这些值更改为新值之前,数据库必须重启。 

遇到问题:

解决办法 :

如果你遇到内存不足的问题,可以尝试通过调整 SGA(System Global Area)和 PGA(Program Global Area) 的大小来进行优化。以下是在 Oracle 中进行此操作的一般步骤:

  1. 连接到正确的数据库实例并确保具有适当的权限。

  2. 首先,将 MEMORY_TARGET 参数设置为 0。这将确保 Oracle 不会自动管理 SGA 和 PGA 的大小,而是让你手动配置它们。执行以下命令:

    ALTER SYSTEM SET MEMORY_TARGET=0 SCOPE=SPFILE;
    
  3. 然后,将 SGA_TARGET 和 PGA_AGGREGATE_TARGET 参数设置为所需的大小。可以根据你的实际需求选择合适的值。执行以下命令进行设置:

    ALTER SYSTEM SET SGA_TARGET=2G SCOPE=SPFILE;
    ALTER SYSTEM SET PGA_AGGREGATE_TARGET=200M SCOPE=SPFILE;
    
  4. 重启数据库实例,使新的参数设置生效:

    SHUTDOWN IMMEDIATE;
    STARTUP;
    
  5. 检查参数设置是否生效。执行以下命令确认参数设置是否正确:

    SHOW PARAMETER sga_target;
    SHOW PARAMETER pga_aggregate_target;
    
  6. 可以尝试不同的 SGA 和 PGA 大小组合,根据实际情况进行调整。建议先将其设置为较小的值,然后逐渐增加,直到达到令你满意的性能效果。

请注意,调整 SGA 和 PGA 大小可能需要进行多次实验和测试,以找到最适合你的数据库实例的配置。同时,确保服务器的物理内存足够支持所配置的 SGA 和 PGA 大小,以避免出现内存不足的问题。

具体原因:其实就是AMM和ASMM的区别

具体参考:

有道云笔记icon-default.png?t=N7T8https://note.youdao.com/s/Kp5LSlv4

1、自动内存管理(AMM)(默认Oracle11g实例采取的方式):只需要显式的设置MEMORY_TARGET,无须其他内存参数设置。

2、自动共享内存管理(ASMM)(Oracle10g采取的内存管理方式):显式的指定SGA_TARGET的值,无须设定SGA内部的值。

3、手工共享内存管理(Oracle9i采取的内存管理方式):SGA_TARGET 与 MEMORY_TARGET 都要设置为 0. 然后手工设定 share_pool_size 、db_cache_size 等 sga 参数。

4、自动PGA内存管理(Oracle9i引入的方式):这里只需要设置PGA_AGGREGATE_TARGET 的值。当然,如果要做到精细控制而切换到手动PGA内存管理模式,需要设定WORKAREA_SIZE_POLICY = manual (默认为 AUTO),再另行设置SORT_AREA_SIZE等值。

从ASMM到AMM

SQL> alter system set memory_max_target=360m scope=spfile;
 
SQL> alter system set memory_target=360m scope=spfile;
 
SQL> alter system set sga_target=0m scope=spfile;
 
SQL> alter system set sga_max_size=0 scope=spfile;
 
SQL> alter system set pga_aggregate_target=0 scope=spfile;

从AMM到ASMM 

SQL> alter system set memory_max_target=0 scope=spfile;
 
SQL> alter system set memory_target=0 scope=spfile;
 
SQL> alter system set pga_aggregate_target=100m scope=spfile;
 
SQL> alter system set sga_target=260m scope=spfile;
 
SQL> alter system set sga_max_size=260m scope=spfile;
 
 
----------------------------------------------------------------------------
如果重新启动系统,会报错。
 
SQL> startup force
 
ORA-00843: Parameter not taking MEMORY_MAX_TARGET into account
 
ORA-00849: SGA_TARGET 272629760 cannot be set to more than MEMORY_MAX_TARGET 0.
 
这个问题的原因是Oracle启动过程中对于参数的内部检查。因为MEMORY_MAX_TARGET被“显示”的赋值,与SGA_TARGET赋值相冲突。
 
解决的方法就是使用参数默认值。创建出pfile之后,将显示赋值为0的MEMORY_TARGET和MEMORY_MAX_TARGET记录行删除掉。再利用pfile启动数据库,重建spfile。
  • 启动ASMM

1、从手动SGA管理到ASMM
   根据以下的查询获取一个SGA_TARGET的大小

SELECT (   (SELECT SUM(value) FROM V$SGA) -   (SELECT CURRENT_SIZE FROM V$SGA_DYNAMIC_FREE_MEMORY)   ) "SGA_TARGET"FROM DUAL;
      
设置大小ALTER SYSTEM SET SGA_TARGET=value [SCOPE={SPFILE|MEMORY|BOTH}]
2、从AMM到ASMM
设置MEMORY_TARGET参数为0,ALTER SYSTEM SET MEMORY_TARGET = 0;
记下来设置SGA_TARGET的值,也可以设置各个组件的最小值。
ALTER SYSTEM SET SGA_TARGET = 992M;
ALTER SYSTEM SET SHARED_POOL_SIZE = 0;
ALTER SYSTEM SET LARGE_POOL_SIZE = 0;
ALTER SYSTEM SET JAVA_POOL_SIZE = 0;
ALTER SYSTEM SET DB_CACHE_SIZE = 0;
ALTER SYSTEM SET STREAMS_POOL_SIZE = 0;

SGA中的各个组件值可以自定义,自定义为该组件的最小值,然后数据库根据运转情况进行调整相应的值。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值