linux 下 oracle9i 错误,急,急。。。。

ORA-04031: 无法分配 50774976 字节的共享内存 ("large pool","unknown object","hash-join subh","kllcqc:kllcqslt")
如何配置linux8 下的 oracle9i 啊?

内存不够了?
把sga改小点试试

详细点,具体怎么设啊?
谢谢!

详细点,具体怎么设啊?有有关资料啊?
谢谢!

哈哈哈,先大笑三声!!!

4031错误是困扰我1年之久的噩梦,不过看你的出错信息,和我碰到的问题不是一回事。

先问一句,你调整过Linux Kernel的shmmax参数了吗?

用ipcs 查一下,看看Oracle使用的共享内存是否分段了?如果分段了的话,这样解决:

echo 512*1024*1024 > /proc/sys/kernel/shmmax

dbshut
dbstart

先修改Kernel参数,设定共享内存段最大Size为512MB,然后重起Oracle,再ipcs。

我感觉你的错误主要是这个原因。另外也有可能是共享内存不足,也有可能是sql语句的问题造成共享内存不足,可能性比较多,需要提供更多的信息才能判断。

另外建议去 www.itpub.net 提关于Oracle的问题,那里是Oracle讨论水平最高的,有次我都解决不了的问题,都在那里的精华区找到了解决的办法。

ribbin详细点,怎么用ipcs
用ipcs 查一下,看看Oracle使用的共享内存是否分段了?

老大,我以为你在RH8上连Oracle都安装上了,不会连这个基本的Unix命令都不会用吧?

就是在console下面敲

ipcs

然后就可以看到共享内存,信号量和消息队列的情况,你需要看看Shared Memory Segments里面Oracle使用的是一个单块内存,还是使用了好多快内存?正常情况下Oracle应该使用一块内存,大小基本上等于SGA。如果分成很多块就说明分段了,你需要按照我上面教你的办法解决。

Linux Kernel默认共享内存Size为32MB,对于Oracle来说是肯定不够用的,必须改。

见笑了。
我看了看Shared Memory Segments里面Oracle使用的是一个单块内存,
跟oracle的版本有问题吗?
我有的是oracle9.0.1

你需要查一下SGA的内存分配状况。
有一些sql脚本可以来查,我一时也找不到了,你如果有TOAD的话,用TOAD连接上去,在DataBase Management里面可以看到,看看SGA分配状况,哪项占用过多?

在TOAD的有一项 Kill/Trace Session,看看有哪些活动的Session

哈哈哈^_^, 我大笑五声!!
巧了,我刚在windows上解决了这个困扰了我半年之久的问题,我上网查了好多资料, 最可能也是最常见的原因是你有可能使用了过多的静态SQL(我不知道这么说是不是很合适, 对于动态SQL而言的), 就是说, 你的程序里有大量的类似: select * from emp where empid=111, 之类的sql, 应该是这样的:select * from emp where empid=?, 看到区别了, 每次我们使用时再set参数, 再执行,JDBC里就是PreparedStatement , 这样无论从速度, 复用性都比静态方式好。
在表关系复杂的情况下, 有时半个小时就会出现无法分配内存的错误, 所以。。我们必须改用动态sql。
经验之谈, 希望有所帮助

对,我当时碰到的也是这个问题,我曾经提醒过那几个程序员,他们不听,不过我当时也没有确定是这个问题造成的。后来终于确定是这个问题造成的了。我狠不得扁死他们。

谢谢,你们。
我这不是,我连到别的库就好用啊,我们用的预解析,什么问题也没有。
就是刚装的这个库不好用,不知道怎么办啊,郁闷!!


现在我总觉的是sga的问题,但又不太确定!!!!!!!!

是sga的问题不用怀疑
既然再其他机器上没问题,比较一下他们的sga分配,看看有什么差别

不知道你的系统是干什么的,large pool的size只有50多M的确有点小,该大一点试试

贴一下你的init.ora

不知道在你的init.ora中有没有large_pool_size的设置
如果没有的话,就可能是robbin说得问题,share memory不连续。

没有设置large_pool_size,oracle就用share_pool来存储user
session,结果就会造成share_pool产生很多碎片