SAS和Oracle错误:氧化还原酶-04031

ccgok5k5  于 2023-03-29  发布在  Oracle
关注(0)|答案(2)|浏览(115)

我正在使用带有SAS/connect的ORACLE数据库。我最近在我的libname语句中实现了一个更改(一周前),其中我添加了以下内容(不知道是否与问题有关):

insertbuff=10000 updatebuff=10000 readbuff=10000

从昨天开始,我一直有一个ORACLE问题,当做了一个

proc sql;
drop table oralib.mytable;
quit;

data oralib.mytable;
set work.mytable;
run;

出现以下错误:
错误:错误:错误:ORACLE执行错误:ORA-04031:无法分配4160字节的共享内存(“shared pool”,“unknown object”,“sga heap(1,0)",“modification“)。由于出现上述错误,已达到ERRLIMIT=选项设置的错误限制1。已发出ROLLBACK(在最后一次COMMIT之后处理的任何行都将丢失)。

Total rows processed: 1001 
  Rows failed         : 1

它似乎随机发生在任何大小的任何表上。有时它会通过,有时(大多数情况下)它不会。我应该从SAS执行共享池释放吗?
谢谢你的帮助!

mxg2im7a

mxg2im7a1#

共享池是Oracle上的一种内存结构,它保存以下内容:

  • 数据字典缓存
  • SQL查询和PL/SQL函数结果缓存
  • 以其解析形式存储最近执行的代码

可以刷新共享池,但这不是一个好主意,我不建议这样做。您必须做的是正确调整数据库共享池的大小。请注意,共享池是整个Oracle示例的池-它不是基于每个用户的。因此,如果数据库有其他用户,他们可能会造成问题。我怀疑任何特定的查询是原因,我猜问题是共享池规模过小。
如果您的用户被授予了一些DBA权限,则可以通过运行以下查询来检查当前共享池的大小:
SELECT * FROM v$sgainfo;
可以使用以下查询增加共享池的大小
ALTER SYSTEM SET SHARED_POOL_SIZE = 200M;
然而,最好的解决方案是让DBA管理数据库(如果有的话)。

bmp9r5qi

bmp9r5qi2#

我不是一个SAS的家伙,所以,我会回答你的问题从一个Oracle数据库管理员的观点,这就是我。
ORA-04031意味着共享池中的空间不足。对于SAS这样的产品,我相信他们有一个建议的共享池最小大小。因此,您应该检查SAP安装文档,并确认您的数据库是否设置了足够大的共享池大小。(使用show parameter shared_pool_size查看数据库中设置的大小。)
第二,我不熟悉您所做的更改,我不确定这是否会对共享池的利用率产生影响。
第三,它可能是一个Oracle错误。您应该检查我的Oracle支持您的Oracle版本,并在ORA-04031上进行搜索,使用您在错误消息中看到的特定参数。如果它是一个已知的错误,可能已经有可用的修补程序。
如果以上都不是,您可能需要使用Oracle打开SR。

相关问题