Oracle共享内存错误
以下查询在 10g 中生成以下错误:
select DBMS_METADATA.GET_DDL('TABLE','TEST_TABLE','TEST') from dual;
得到:
ORA-04031: unable to allocate 128 bytes of shared memory ("shared pool","SELECT /*+rule*/ SYS_XMLGEN(...","sql area","qeeOpt: qeesCreateOpt")
ORA-06512: at "SYS.DBMS_METADATA", line 1546
ORA-06512: at "SYS.DBMS_METADATA", line 1583
ORA-06512: at "SYS.DBMS_METADATA", line 1901
ORA-06512: at "SYS.DBMS_METADATA", line 2792
ORA-06512: at "SYS.DBMS_METADATA", line 4333
ORA-06512: at line 1
从一些阅读来看,似乎可以通过调整 Oracle 的一些共享内存参数来解决此问题。
但是,任何人都可以提供有关错误可能原因的一些额外信息吗?这只是一个没有大约 10 列的表,因此如果查询本身是问题的根源,我会感到惊讶。此外,Toad 可以很好地显示我所有的 DDL。
我应该寻找哪些东西?或者我应该将此错误发送给我的 DBA 并说“请修复?”
The following query generates the error below in 10g:
select DBMS_METADATA.GET_DDL('TABLE','TEST_TABLE','TEST') from dual;
Got:
ORA-04031: unable to allocate 128 bytes of shared memory ("shared pool","SELECT /*+rule*/ SYS_XMLGEN(...","sql area","qeeOpt: qeesCreateOpt")
ORA-06512: at "SYS.DBMS_METADATA", line 1546
ORA-06512: at "SYS.DBMS_METADATA", line 1583
ORA-06512: at "SYS.DBMS_METADATA", line 1901
ORA-06512: at "SYS.DBMS_METADATA", line 2792
ORA-06512: at "SYS.DBMS_METADATA", line 4333
ORA-06512: at line 1
from some reading, it appears this issue can be resolved by adjusting some of the shared memory parameters of Oracle.
However, can anyone give a little extra info on possible causes of the error? This is just a single table without about 10 columns, so I'd be surprised if the query itself was the source of the problem. Additionally, Toad can display all my DDL just fine.
What things should be I be looking for? Or should I just send this error to my DBA and say, "please fix?"
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
DBMS_METADATA 是一个非常大的 PL/SQL 包,需要将其加载到共享池中。如果你想让它执行,那么你需要让DBA增加共享池。此外,您可能(在 9i 上,也可能在 10i 上)需要增加 Java 池。在我看来,他们已经改变了 DBMS_METADATA 的内部结构,它不再需要那么多的 Java 池空间。
DBMS_METADATA is a very large PL/SQL package and it needs to get loaded into the shared pool. If you want it to execute then you will need to get the DBA to increase the shared pool. Also you may (on 9i and maybe on 10i) need to increase the Java pool. It appears to me that they have changed the innards of the DBMS_METADATA and it no longer needs as much Java pool space.