ORA-30009 故障处理一例

2014-11-24 18:59:46 · 作者: · 浏览: 19

错误信息:
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


处理步骤:


查看数据库的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、再次执行,故障解决。