打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
ORA -04031:无法分配4064字节的共享内存
2018年05月24日 17:59:11 黄宝康 阅读数 5897

在开发项目当中,程序报错信息如下:

java.lang.RuntimeException: java.sql.SQLException: ORA-04031: 无法分配 4064 字节的共享内存 ("shared pool","INSERT INTO t_pm(PM_CODE, NA...","sga heap(1,0)","kglsim heap") Query: INSERT INTO t_pm(PM_CODE, NAME, ALLPINYIN, PINYIN, JOIN_PM_DATE, CARD_NO, MOBILE_NO, SEX, BIRTH_DATE, FULL_PM_DATE) VALUES ('3607020060015001','袁峰','yuanfeng','yf',to_date('1900-01-01', 'yyyy-MM-dd'),'123456789','13648670794','1',to_date('1973-01-16', 'yyyy-MM-dd'),to_date('1900-01-01', 'yyyy-MM-dd')) Parameters: []    at com.stransfer.dbhelper.DatabaseHelper.update(DatabaseHelper.java:254)    at com.stransfer.dbhelper.DatabaseHelper.insertEntityWithDate(DatabaseHelper.java:334)    at com.stransfer.main.PmTransfer.importToDb(PmTransfer.java:267)    at com.stransfer.main.PmTransfer.migrate(PmTransfer.java:75)    at com.stransfer.main.Main.main(Main.java:28)Caused by: java.sql.SQLException: ORA-04031: 无法分配 4064 字节的共享内存 ("shared pool","INSERT INTO t_pm(PM_CODE, NA...","sga heap(1,0)","kglsim heap") Query: INSERT INTO t_pm(PM_CODE, NAME, ALLPINYIN, PINYIN, JOIN_PM_DATE, CARD_NO, MOBILE_NO, SEX, BIRTH_DATE, FULL_PM_DATE) VALUES ('3607020060015001','袁峰','yuanfeng','yf',to_date('1900-01-01', 'yyyy-MM-dd'),'123456789','13648670794','1',to_date('1973-01-16', 'yyyy-MM-dd'),to_date('1900-01-01', 'yyyy-MM-dd')) Parameters: []    at org.apache.commons.dbutils.AbstractQueryRunner.rethrow(AbstractQueryRunner.java:392)    at org.apache.commons.dbutils.QueryRunner.update(QueryRunner.java:491)    at org.apache.commons.dbutils.QueryRunner.update(QueryRunner.java:377)    at com.stransfer.dbhelper.DatabaseHelper.update(DatabaseHelper.java:251)    ... 4 more

查了相关博客,是由于oracle的shared_pool空间不够的原因,解决方法:

第一种:治标不治本。

alter system flush shared_pool;

这种方法可以立即有效果,但是不是根本的解决办法,一小时左右又开始报上面的错误了,再次执行就可以了。

第二种:治标又治本。

ALTER SYSTEM SET SHARED_POOL_SIZE='100M' SCOPE=spfile;

然后重启下:

sql>shutdown immediatesql>startup

上面这句话必须在sys用户下或是用dba的身份登录的用户下执行。

share_pool_size(共享池)的作用:

1、sql共享缓冲池
2、该参数是库高速缓存和数据字典的高速缓存。

查看:

SHOW PARAMETERS SHARED_POOL_SIZE

更改:

alter system set SHARED_POOL_SIZE='50M' SCOPE=spfile;

在我本机运行如下:

SQL> show parameters shared_pool_size;NAME                     TYPE    VALUE------------------------------------ ----------- ------------------------------shared_pool_size             big integer 0SQL> alter system set SHARED_POOL_SIZE='50M' SCOPE=both;System altered.SQL> show parameters shared_pool_size;NAME                     TYPE    VALUE------------------------------------ ----------- ------------------------------shared_pool_size             big integer 52MSQL> 
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Oracle内存结构研究-SGA篇-Oracle认证考试-考试大
Oracle SGA详解
Oracle之内存结构(SGA、PGA)
设置SGA的原则以及修改它的大小
oracle 9i内存配置为动态分配的步骤
ASP.NETSqlConnection对象
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服