侧边栏壁纸
博主头像
与晚风述往事博主等级

万般皆下品,唯有读书高。

  • 累计撰写 149 篇文章
  • 累计创建 29 个标签
  • 累计收到 19 条评论

目 录CONTENT

文章目录

ORA-00093:pga_aggregate_limit必须在2048M到100000G之间

与晚风述往事
2022-03-15 / 0 评论 / 0 点赞 / 623 阅读 / 1,593 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-03-15,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

错误信息

【汉】ORA-00093:pga_aggregate_limit必须在2048M到100000G之间
【英】ORA-00093: pga_aggregate_limit must be between 2048M and 100000G

在启动Oracle数据库时报错。
image.png

版本

Oracle 12C以上

pga_aggregate_limit参数是Oracle 12C新增的一个参数,该参数主要是用来硬性限制PGA内存的使用,保证PGA内存使用量维持在该值以下。至于为什么要加入这个参数,主要原因是pga_aggregate_target参数并不能完全限制PGA内存使用低于该值,在超过该值时,过度使用PGA导致了交换频率过高,对数据库的性能造成了一定影响。

基于Oracle内存管理的原则,它也同样有两种情况:

  • 在使用自动内存管理方式后,默认值就是SGA_MAX_SIZE参数的值
  • 在使用自动共享内存管理方式后,默认值会取2G、PGA_AGGREGATE_TARGET*2、PROCESSES*3m这三种取值中的最大值

注意,如果PGA_AGGREGATE_TARGET的值为0,并且内存是自动共享内存管理,则该值默认为物理内存的90%减去SGA的大小。

如果将PGA_AGGREGATE_LIMIT设置为0,则表示实例使用的PGA内存没有限制。

通过官网文档了解到,Oracle建议我们不要将PGA_AGGREGATE_LIMIT参数设置的比默认值低,这也是本次报错的原因。

在了解到原因后,我们再解决就简单多了,无非就是将该值调整到一个合适的大小。但是呢,由于数据库还没启动,因此我们修改参数就必须要修改参数文件才可以。注意,必须备份pfile文件和spfile文件才能进行下面的操作。

1、使用现有spfile创建pfile

在成功备份spfile和pfile后,我们使用现有的spfile创建一份pfile文件,因为spfile文件是二进制文件,无法进行修改,只有pfile文件能直接进行编辑。

SQL> create pfile from spfile;

image.png
执行该语句后,会在你的$ORACLE_HOME/dbs目录下生成一个init<ORACLE_SID>.ora的文件,它就是pfile文件。

2、编辑pfile文件

创建好pfile文件后,我们退出sqlplus命令窗口,然后进入到pfile文件的目录,并编辑pfile文件。修改pfile文件时,两种方式都可以解决,任选其一即可。

  • 将PGA_AGGREGATE_LIMIT参数设置为合理的值(合理值最小为PGA_AGGREGATE_TARGET的2倍)或者直接改为报错提示的那个值
  • 删除PGA_AGGREGATE_LIMIT参数,让Oracle自动设置为默认值

我这里选择将其设置为PGA_AGGREGATE_TARGET的2倍。

[oracle@localhost ~]$ cd $ORACLE_HOME/dbs
[oracle@localhost dbs]$ vim initorcl.ora
*.pga_aggregate_limit=2147483648
*.pga_aggregate_target=1073741824

3、使用pfile创建spfile

修改好initorcl.ora文件后,我们可以再次进入到sqlplus窗口中,使用pfile文件再次生成spfile文件。

[oracle@localhost dbs]$ sqlplus / as sysdba
SQL> create spfile from pfile;

image.png
执行该语句后,会在你的$ORACLE_HOME/dbs目录下生成一个spfile<ORACLE_SID>.ora的文件,它就是spfile文件。

4、再次启动数据库

重新生成spfile文件后,我们就可以启动数据库了。

SQL> startup

image.png

0

评论区