13

从以下查询中,我发现每个数据库的最大游标数为 300:

select max(a.value) as highest_open_cur, p.value as max_open_cur
  from v$sesstat a, v$statname b, v$parameter p
  where a.statistic# = b.statistic# 
  and b.name = 'opened cursors current'
  and p.name= 'open_cursors'
  group by p.value;

我尝试使用以下方法将金额更新为 1000:

  update v_$parameter
  set value = 1000
  where name = 'open_cursors';

但我看到了这个错误:

SQL Error: ORA-02030: can only select from fixed tables/views
02030. 00000 -  "can only select from fixed tables/views"
*Cause:    An attempt is being made to perform an operation other than
           a retrieval from a fixed table/view.
*Action:   You may only select rows from fixed tables/views.

更新 open_cursor 值的正确方法是什么?谢谢。

4

3 回答 3

17

假设您正在使用 spfile 启动数据库

alter system set open_cursors = 1000 scope=both;

如果您使用的是 pfile,则可以更改正在运行的实例的设置

alter system set open_cursors = 1000 

然后,您还需要编辑参数文件以指定新open_cursors设置。此后不久重新启动数据库以确保参数文件更改按预期工作通常是一个好主意(如果在几个月后下次重新启动数据库时发现某些参数文件更改没有人记得是非常烦人的'没有正确完成)。

我还希望您确定每个会话实际上需要 300 多个打开的游标。大部分时间,调整此设置的人实际上存在游标泄漏,他们只是试图掩盖错误而不是解决根本原因。

于 2013-05-21T18:42:45.923 回答
4

运行以下查询以查找您是否正在运行 spfile:

SELECT DECODE(value, NULL, 'PFILE', 'SPFILE') "Init File Type" 
       FROM sys.v_$parameter WHERE name = 'spfile';

如果结果是“SPFILE”,则使用以下命令:

更改系统设置 open_cursors = 4000 范围=两者;--4000 是打开游标的数量

如果结果是“PFILE”,则使用以下命令:

alter system set open_cursors = 1000 ;

您可以在此处阅读有关 SPFILE 与 PFILE 的信息,

http://www.orafaq.com/node/5

于 2017-11-28T15:04:46.943 回答
0

您可以在 oraclexe\app\oracle\product\11.2.0\server\config\scripts 中更新 init.ora 下的设置

于 2016-10-16T07:43:17.017 回答