今天客户要进行应用发布,首先在测试环境进行测试,在测试环境测试索引重建的时候报如下错误:

ORA-04030: 在尝试分配 64544 字节 (sort subheap,sort key) 时进程内存不足。

客户在将这个问题发给我的时候,首先让他们检查一下操作系统ORACLE用户资源的限制。

因为根据以往的经验这个问题往往是oracle用户进程的data seg size限制导致的。

但是通过客户过来的信息发现 oracle用户程序数据段并没有任何限制。

$ id oracle

uid=400(oracle) gid=400(oinstall) groups=401(dba)

$ ulimit -a

time(seconds)        unlimited

file(blocks)         unlimited

data(kbytes)         unlimitedstack(kbytes)        unlimited

memory(kbytes)       unlimited

coredump(blocks)     unlimited

nofiles(descriptors) 2000

$ ulimit -Ha

time(seconds)        unlimited

file(blocks)         unlimited

data(kbytes)         unlimitedstack(kbytes)        unlimited

memory(kbytes)       unlimited

coredump(blocks)     unlimited

nofiles(descriptors) unlimited

然后检查了一下客户的SGA和PGA设置:

SQL> show parameter sga

NAME                                 TYPE        VALUE

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

lock_sga                             boolean     FALSE

pre_page_sga                         boolean     FALSE

sga_max_size                         big integer 15G

sga_target                           big integer 14G

SQL> show parameter pga

NAME                                 TYPE        VALUE

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

pga_aggregate_target                 big integer 8G

$ lsattr -El mem0

goodsize 40960 Amount of usable physical memory in Mbytes False

size     40960 Total amount of physical memory in Mbytes  False

客户的SGA设置为14G,PGA设置为8G ,而操作系统的整个内存是40G,内存远远够用的。

C:\Documents and Settings\shoupeng.yan>sqlplus xxxx/xxxx

SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 3月 21 20:00:37 2012

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

连接到:

Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production

With the Partitioning, Oracle Label Security, OLAP, Data Mining Scoring Engine

and Real Application Testing options

SQL> ALTER INDEX PK_ZJ_BDZTB_01 REBUILD;

ALTER INDEX PK_ZJ_BDZTB_01 REBUILD

*

第 1 行出现错误:

ORA-04030: 在尝试分配 64544 字节 (sort subheap,sort key) 时进程内存不足

我通过windows下的sqlplus远程连到数据库中,亲自执行了一下索引重建,在重建的过程中顺监控了一下进程的PGA使用量。发现进程的PGA使用量大约在110M的时候就抛出ORA-04030错误了。而系统的整个PGA设置为8G,不应该不够用。

因此我还是认为os limits限制导致的问题原因,既然单个进程的内存段有最大限制,我们可以通过开启索引重建并行度以便每个进程占用的数据段减少一半以上。

在我开启了2个并行度之后,索引确实重建成功了。

SQL> ALTER INDEX PK_ZJ_BDZTB_01 REBUILD PARALLEL 2;

索引已更改。

更奇怪的事情是:我直接登录到数据库服务器上进程索引重建,没有加并行度也可以重建成功。

$ id oracle

uid=400(oracle) gid=400(oinstall) groups=401(dba)

$ sqlplus xxxx/xxxx

SQL*Plus: Release 10.2.0.4.0 - Production on Wed Mar 21 20:07:20 2012

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production

With the Partitioning, Oracle Label Security, OLAP, Data Mining Scoring Engine

and Real Application Testing options

SQL>  ALTER INDEX PK_ZJ_BDZTB_01 REBUILD;

Index altered.

一个是通过Windows客户端连接到数据库上的,一个是通过本地sqlplus登录到数据库中的,一个重建索引不成功,一个能成功。唯一的区别是,客户端连接时通过监听器,那么问题应该出现在监听器上。

为此我做了一个假设:虽然目前的ulimit -a显示的结果表示ORACLE用户进程的数据段没有限制,但是这个修改很可能是在监听器启动之后,监听器启动之后继承了先前的ulimits的所有设置,而在此后重新修改的并没有反馈到监听器中。而通过客户端sqlplus连到数据库中的时候,

监听器派生出的服务器进程继承了监听器中的ulimits相关的设置,导致服务器进程的数据段还是有限制的。而通过本地连接的数据库不通过监听器,直接继承了当前的设置,所以本地连接建立索引不会报ORA-4030错误。

然后在OS上通过smit.script 我找了当前修改oracle用户的limits限制的脚本:

#    [Dec 21 2010, 16:36:27]#

x() {

if [ $# -ge 2 ]

then

for i in "$@"

do

spam="$spam \"$i\""

done

eval chuser $spam

fi

}

x data='-1' stack='-1' oracle

这条命令是在2010年12月21日执行的。

而监听器是在10-DEC-2010 09:44:38 启动的,到目前运行了467天,也就是监听器在chuser data='-1' stack='-1' oracle 命令执行之前就启动了。

$ lsnrctl status

LSNRCTL for IBM/AIX RISC System/6000: Version 10.2.0.4.0 - Production on 21-MAR-2012 20:11:18

Copyright (c) 1991, 2007, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=SXRYXDB)(PORT=1521)))

STATUS of the LISTENER

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

Alias                     LISTENER

Version                   TNSLSNR for IBM/AIX RISC System/6000: Version 10.2.0.4.0 - Production

Start Date                10-DEC-2010 09:44:38

Uptime                    467 days 10 hr. 26 min. 40 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Log File         /u01/oracle/product/db10gr2/network/log/listener.log

Listening Endpoints Summary...

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=SXRYXDB)(PORT=1521)))

Services Summary...

Service "zyxdb" has 1 instance(s).

Instance "zyxdb", status READY, has 1 handler(s) for this service...

Service "zyxdb_XPT" has 1 instance(s).

Instance "zyxdb", status READY, has 1 handler(s) for this service...

The command completed successfully

既然问题是由于监听器导致的,那么重启一下监听器,重新读取修改过的ulimits,即可解决问题。

$ lsnrctl stop

LSNRCTL for IBM/AIX RISC System/6000: Version 10.2.0.4.0 - Production on 21-MAR-2012 20:11:32

Copyright (c) 1991, 2007, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=SXRYXDB)(PORT=1521)))

The command completed successfully

$ lsnrctl start

LSNRCTL for IBM/AIX RISC System/6000: Version 10.2.0.4.0 - Production on 21-MAR-2012 20:11:43

Copyright (c) 1991, 2007, Oracle.  All rights reserved.

Starting /u01/oracle/product/db10gr2/bin/tnslsnr: please wait...

TNSLSNR for IBM/AIX RISC System/6000: Version 10.2.0.4.0 - Production

System parameter file is /u01/oracle/product/db10gr2/network/admin/listener.ora

Log messages written to /u01/oracle/product/db10gr2/network/log/listener.log

Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=SXRYXDB)(PORT=1521)))

Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=SXRYXDB)(PORT=1521)))

STATUS of the LISTENER

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

Alias                     LISTENER

Version                   TNSLSNR for IBM/AIX RISC System/6000: Version 10.2.0.4.0 - Production

Start Date                21-MAR-2012 20:11:43

Uptime                    0 days 0 hr. 0 min. 0 sec

Trace Level               off

Security                  ON: Local OS Authentication

SNMP                      OFF

Listener Parameter File   /u01/oracle/product/db10gr2/network/admin/listener.ora

Listener Log File         /u01/oracle/product/db10gr2/network/log/listener.log

Listening Endpoints Summary...

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=SXRYXDB)(PORT=1521)))

(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))

Services Summary...

Service "PL***tProc" has 1 instance(s).

Instance "PL***tProc", status UNKNOWN, has 1 handler(s) for this service...

The command completed successfully

$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Wed Mar 21 20:11:47 2012

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production

With the Partitioning, Oracle Label Security, OLAP, Data Mining Scoring Engine

and Real Application Testing options

SQL> alter system register;

System altered.

SQL>

再次通过客户端执行索引重建命令问题解决:

C:\Documents and Settings\shoupeng.yan>sqlplus xxxx/xxxx

SQL*Plus: Release 10.2.0.1.0 - Production on 星期三 3月 21 20:12:18 2012

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

连接到:

Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production

With the Partitioning, Oracle Label Security, OLAP, Data Mining Scoring Engine

and Real Application Testing options

SQL> ALTER INDEX PK_ZJ_BDZTB_01 REBUILD;

索引已更改。

SQL>

oracle10g 04030,一次ORA-04030问题的诊断(一)相关推荐

  1. oracle10g无监听配置文件,关于监听配置文件listener.ora的问题

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 这是我的数据库电脑的listener.ora文件的内容 # listener.ora Network Configuration File: E:\Ora ...

  2. oracle安装及使用常见错误

    一.当出现协议适配器错误,protocol adapter error时 解决方法 这个错误一般是因为没有开启相关的oracle服务导致的,只要将数据库的相关服务开启,就会解决. 二.当出现liste ...

  3. oracle安装后新建数据库实例及配置

    ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法 (2011-01-20 13:50:37) 转载▼ 标签: it 分类: 技术 早上同事用PL/SQL连接虚拟机中的O ...

  4. oracle中监听程序当前无法识别连接描述符中请求服务 的解决方法

    早上同事用PL/SQL连接虚拟机中的Oracle数据库,发现又报了"ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务"错误,帮其解决后,发现很多人遇到过这样的问 ...

  5. ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法

    51CTO在线视频课程,欢迎大家访问试听 <测试系列课程之缺陷管理概述> http://edu.51cto.com/course/course_id-447.html <软件测试基础 ...

  6. 1z0-042题库笔记

    说明:边看TK. 边随意记下的东西. 这都是一些我不太懂 然后通过搜索找的一些解题方法.太乱了 没有整理. 1. Which three pieces of information are consi ...

  7. oracle12541无法连接,“Oracle 连接报错:ORA-12541: TNS: 无监听程序”解决方案

    环境描述: Oracle数据库部署在远程机器虚拟机上,本地配置Oracle网络配置,通过PL/SQL连接数据库: 本地已经配置了Oracle Net Manager文件,但是测试后,连接不上Oracl ...

  8. Oracle19c安装教程及PLSQL配置常见错误解决办法

    本人电脑上也装了不少比较难以安装的程序,而且也亲身破解了一些软件,自己以前也安装过MySQL和DB2,原以为Oracle也差不多,直到我亲身经历了,我才知道什么是痛苦.帅帅本人在经历了长时间的折磨之后 ...

  9. oracle连接 无监听程序,“Oracle 连接报错:ORA-12541: TNS: 无监听程序”解决方案 | 学步园...

    环境描述: Oracle数据库部署在远程机器虚拟机上,本地配置Oracle网络配置,通过PL/SQL连接数据库: 本地已经配置了Oracle Net Manager文件,但是测试后,连接不上Oracl ...

  10. java连接数据库12514_ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法...

    早上同事用PL/SQL连接虚拟机中的Oracle数据库,发现又报了"ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务"错误,帮其解决后,发现很多人遇到过这样的问 ...

最新文章

  1. RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列
  2. hadoop 单机单间_零基础入门hadoop大数据四——Hadoop框架前奏,JDK环境配置
  3. Dubbo简介与基本概念
  4. Linux环境 安装 Redis-6.2.6 配置运行_01
  5. 数据库中的完整性约束及实例
  6. python_射门小游戏
  7. 尚硅谷大数据项目之Flink实时数仓-踩坑记录和笔记记录
  8. 计算机上安装了更新ie版本,电脑ie浏览器版本过低怎么升级方法
  9. 电容的作用?电容器的作用?
  10. OpenGL鼠标移动方块
  11. ip rule 路由策略数据库管理命令
  12. 华东师大计算机专业非全日制,华东师范大学非全日制研究生遇冷?
  13. 《量子信息与量子计算简明教程》第三章·量子纠缠状态及其应用 (上)
  14. 当年表白流行写情书,现在流行的是……
  15. 读书笔记:《狼图腾》和《狼道》
  16. oppo推广开户费用介绍!oppo信息流广告怎么投放?
  17. java 书籍借阅 问题_关于图书借阅系统的问题
  18. 感悟人生之生命诚可贵
  19. R语言-股票数据库(1)-股票上市日期
  20. MES管理系统如何帮助企业建设透明化智慧工厂

热门文章

  1. 调试Excel VBA代码
  2. c语言 生成大素数,C语言实现寻找大素数
  3. ssh 连接服务器_使用 SSH Key 访问服务器
  4. a*算法的优缺点_五种聚类算法一览与python实现
  5. 超出网络bios会话限制_什么是UEFI,它和BIOS有什么不同?
  6. 网站计数器 php,网站计数器 php
  7. linux系统sql语句报错_如果数据库管理工具1045错误出现在Linux系统中怎么
  8. 促进新一代人工智能产业发展三年行动计划_浙江提出冷链物流创新发展三年行动计划 力争带动产业投资约1000亿元...
  9. 数学不好的人可以学python吗_哪些人适合学金融工程专业 数学不好能学吗
  10. 圣剑神域单机版服务器维护,圣剑神域单机版