重庆思庄Oracle、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3615|回复: 1
打印 上一主题 下一主题

[转载] ORA-00845,ORA-04031

[复制链接]
跳转到指定楼层
楼主
发表于 2020-4-12 21:07:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
系统环境:

DB:Oracle 19.3.0.0.0

OS:Red Hat Enterprise Linux Server release 7.5 (Maipo)

问题:

将主机内存由3g降低到2g后,启动数据库报错如下:

ORA-00845: MEMORY_TARGET not supported on this system

调整memory_max_target值,使其小于/dev/shm值,启动pdb数据库报错如下:

ORA-04031: unable to allocate 1048848 bytes of shared memory

("shared pool","unknown object","PDB Dynamic He","alls-ktimcem")

问题原因:

在oracle database 11g中新增的内存自动管理AMM的参数MEMORY_TARGET,它能自动调整SGA和PGA,

这个特性需要用到/dev/shm共享文件系统,而且要求/dev/shm必须大于MEMORY_TARGET,

如果/dev/shm比MEMORY_TARGET小就会报错ORA-00845。

当主机内存调小后,系统/dev/shm也会自动变小,

但memory_max_target参数值在安装完数据库后不会自动变化,

导致主机内存缩小后memory_max_target参数值大于了/dev/shm,触发了ORA-00845问题。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

沙发
 楼主| 发表于 2020-4-12 21:07:59 | 只看该作者

解决办法:

一 调小memory_max_target和MEMORY_TARGET值,使其小于/dev/shm。

可以启动CDB$ROOT数据库了,但是在启动pdb时会报错ORA-04031,shared pool分配内存不足了。

二 适当调大/dev/shm,同时在适当调大memory_max_target和MEMORY_TARGET值。

过程如下:

---调小主机内存

[oracle@cjcos01 ~]$ free -m

              total        used        free      shared  buff/cache   available

Mem:           1741         340        1072           9         328        1247

Swap:          3071           0        3071

---启动数据库

SQL> startup

ORA-00845: MEMORY_TARGET not supported on this system

---错误描述

[oracle@cjcos01 dbs]$ oerr ora 0845

00845, 00000, "MEMORY_TARGET not supported on this system"

// *Cause: The MEMORY_TARGET parameter was not supported on this operating system or /dev/shm was not sized correctly on Linux.

// *Action: Refer to documentation for a list of supported operating systems. Or, size /dev/shm to be at least the SGA_MAX_SIZE on each Oracle instance running on the system.

---查看当前/dev/shm大小

[root@cjcos01 ~]# df -h /dev/shm

Filesystem      Size  Used Avail Use% Mounted on

tmpfs           871M     0  871M   0% /dev/shm

---调小memory_max_target和memory_target值

SQL> create pfile from spfile;

[oracle@cjcos01 ~]$ cd $ORACLE_HOME/dbs

[oracle@cjcos01 dbs]$ cp initcjcdb.ora initcjcdb.ora.bak

[oracle@cjcos01 dbs]$ cat  initcjcdb.ora

*.memory_max_target=1287436800

*.memory_target=1287436800

[oracle@cjcos01 dbs]$ vim initcjcdb.ora

*.memory_max_target=887436800

*.memory_target=887436800

---启动数据库

SQL> startup

ORACLE instance started.

Total System Global Area  788526632 bytes

Fixed Size     9139752 bytes

Variable Size   419430400 bytes

Database Buffers    41943040 bytes

Redo Buffers     3440640 bytes

In-Memory Area   314572800 bytes

Database mounted.

Database opened.

---启动pdb

SQL> show pdbs

    CON_ID CON_NAME   OPEN MODE  RESTRICTED

---------- ------------------------------ ---------- ----------

2 PDB$SEED   READ ONLY  NO

3 CJCPDB   MOUNTED

SQL> alter session set container=cjcpdb;

Session altered.

---报错ORA-04031

SQL> startup

ORA-04031: unable to allocate 1048848 bytes of shared memory ("shared pool","unknown object","PDB Dynamic He","alls-ktimcem")

---错误描述

[oracle@cjcos01 dbs]$ oerr ora 4031

04031, 00000, "unable to allocate %s bytes of shared memory (\"%s\",\"%s\",\"%s\",\"%s\")"

// *Cause:  More shared memory is needed than was allocated in the shared

//          pool or Streams pool.

// *Action: If the shared pool is out of memory, either use the

//          DBMS_SHARED_POOL package to pin large packages,

//          reduce your use of shared memory, or increase the amount of

//          available shared memory by increasing the value of the

//          initialization parameters SHARED_POOL_RESERVED_SIZE and

//          SHARED_POOL_SIZE.

//          If the large pool is out of memory, increase the initialization

//          parameter LARGE_POOL_SIZE.  

//          If the error is issued from an Oracle Streams or XStream process,

//          increase the initialization parameter STREAMS_POOL_SIZE or increase

//          the capture or apply parameter MAX_SGA_SIZE.

---查看错误日志

[oracle@cjcos01 dbs]$ cd /u01/app/oracle/diag/rdbms/cjcdb/cjcdb/trace/

[oracle@cjcos01 trace]$ vim alert_cjcdb.log

......

2020-04-05T19:45:00.505509+08:00

Errors in file /u01/app/oracle/diag/rdbms/cjcdb/cjcdb/trace/cjcdb_ora_3286.trc  (incident=89073) (PDBNAME=CJCPDB):

ORA-04031: unable to allocate 1048848 bytes of shared memory ("shared pool","unknown object","PDB Dynamic He","alls-ktimcem")

CJCPDB(3):Incident details in: /u01/app/oracle/diag/rdbms/cjcdb/cjcdb/incident/incdir_89073/cjcdb_ora_3286_i89073.trc

---显示waited for 'SGA: allocation forcing component growth'

[oracle@cjcos01 trace]$ vim /u01/app/oracle/diag/rdbms/cjcdb/cjcdb/incident/incdir_89073/cjcdb_ora_3286_i89073.trc

.....

Session Wait History:

    elapsed time of 1.282890 sec since last wait

0: waited for 'SGA: allocation forcing component growth'

    =0x0, =0x0, =0x0

    wait_id=2568 seq_num=2620 snap_id=26

    wait times: snap=0.000000 sec, exc=2.498875 sec, total=2.502222 sec

    wait times: max=infinite

    wait counts: calls=25 os=25

    occurred after 0.000000 sec of elapsed time

1: waited for 'SGA: allocation forcing component growth'

    =0x0, =0x0, =0x0

    wait_id=2593 seq_num=2619 snap_id=1

    wait times: snap=0.000062 sec, exc=0.000062 sec, total=0.000062 sec

    wait times: max=infinite

    wait counts: calls=1 os=1

    occurred after 0.000000 sec of elapsed time

---解决方案:

1 调大/dev/shm

[root@cjcos01 ~]# df -h /dev/shm

Filesystem      Size  Used Avail Use% Mounted on

tmpfs           871M     0  871M   0% /dev/shm

[root@cjcos01 ~]# mount -o remount,size=1G /dev/shm

[root@cjcos01 ~]# df -h /dev/shm

Filesystem      Size  Used Avail Use% Mounted on

tmpfs           1.0G     0  1.0G   0% /dev/shm

2 调整/etc/fstab

[root@cjcos01 ~]# vim /etc/fstab

...

tmpfs                  /dev/shm              tmpfs  defaults,size=1g      0 0

3调大memory_max_target

[oracle@cjcos01 dbs]$ pwd

/u01/app/oracle/product/19.0.0/dbhome_1/dbs

[oracle@cjcos01 dbs]$ vim initcjcdb.ora

*.memory_max_target=1007436800

*.memory_target=1007436800

4 启动数据库

SQL> startup

ORACLE instance started.

Total System Global Area 1010823200 bytes

Fixed Size     9142304 bytes

Variable Size   641728512 bytes

Database Buffers    41943040 bytes

Redo Buffers     3436544 bytes

In-Memory Area   314572800 bytes

Database mounted.

Database opened.

5 启动pdb

SQL> show pdbs

    CON_ID CON_NAME   OPEN MODE  RESTRICTED

---------- ------------------------------ ---------- ----------

2 PDB$SEED   READ ONLY  NO

3 CJCPDB   MOUNTED

SQL> alter session set container=cjcpdb;

Session altered.

SQL> startup

Pluggable Database opened.

SQL> conn / as sysdba

Connected.

SQL> show pdbs

    CON_ID CON_NAME   OPEN MODE  RESTRICTED

---------- ------------------------------ ---------- ----------

2 PDB$SEED   READ ONLY  NO

3 CJCPDB   READ WRITE NO


回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2024-5-2 23:06 , Processed in 0.096074 second(s), 19 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表