您的位置:首页 > 其它

ORA-30009 故障处理一例

2012-04-23 01:21 351 查看
ORA-30009 故障处理一例

背景:

刚才一网友问到ORA-30009的错误,数据库版本为10.2.0.5,操作系统版本为Redhat 4;随即我考虑了到了硬件和buffer的限制这一块,对其做了验证,详细如下:

错误信息:

SQL> CREATE TABLE t AS SELECT rownum AS n, lpad('*',1000,'*') AS pad FROM dual CONNECT BY level <= 100000;

CREATE TABLE t AS SELECT rownum AS n, lpad('*',1000,'*') AS pad FROM dual CONNECT BY level <= 100000

*

ERROR at line 1:

ORA-30009: Not enough memory for CONNECT BY operation

处理步骤:

查看限制,结论是没有问题。

[oracle@yangbo bdump]$ ulimit -a

core file size (blocks, -c) 0

data seg size (kbytes, -d) unlimited

file size (blocks, -f) unlimited

pending signals (-i) 1024

max locked memory (kbytes, -l) 32

max memory size (kbytes, -m) unlimited

open files (-n) 1024

pipe size (512 bytes, -p) 8

POSIX message queues (bytes, -q) 819200

stack size (kbytes, -s) 10240

cpu time (seconds, -t) unlimited

max user processes (-u) 8192

virtual memory (kbytes, -v) unlimited

file locks (-x) unlimited



查看数据库的buffer为自动设置,问题也不大。

SQL> show parameter buffer

NAME TYPE VALUE

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

buffer_pool_keep string

buffer_pool_recycle string

db_block_buffers integer 0

log_buffer integer 2875392

use_indirect_data_buffers boolean FALSE



同时查看了下sga的配置,通过经验来看,发现好像小了。

19:46:31 SQL> show parameter sga

NAME TYPE VALUE

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

lock_sga boolean FALSE

pre_page_sga boolean FALSE

sga_max_size big integer 312M

sga_target big integer 312M

分析:

通过如上的情况分析得出,他将要插入的数据是在100000行,但是他的sga配置只有312M,主机内存只有512M,数据库是跑在虚拟机上的,并且之前已经将该100000行数据的表进行了一次插入操作,并且没有提交

在进行第二次插入的时候报ORA-30009这个错误,由此可判断是由于SGA太小导致。

处理过程:

1、添加内存到1G

2、扩大SGA

SQL>alter system set sga_max_size=512M scope=spfile;

SQL>alter system set sga_target=512M scope=spfile;

3、重启数据库。

4、再次执行,故障解决。

还有一种原因是由于Bug 11805372导致,详细请查看如下文章:

http://space.itpub.net/?uid-20674423-action-viewspace-itemid-722002

/article/2627900.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: