如何更新ORA-01000的游标限制:最大打开游标超过

时间:2013-05-21 18:21:29

标签: oracle11g

我从以下查询中发现每个数据库的最大游标数为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值的正确方法是什么?感谢。

3 个答案:

答案 0 :(得分:13)

假设您使用spfile启动数据库

alter system set open_cursors = 1000 scope=both;

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

alter system set open_cursors = 1000 

然后,您还需要编辑参数文件以指定新的open_cursors设置。此后不久重新启动数据库通常是一个好主意,以确保参数文件更改按预期工作(在下次重新启动数据库时发现一些参数文件发生变化而不是没有人记得是非常烦人的做得不对。

我也希望您确定每个会话实际上需要超过300个开放游标。很大一部分时间,正在调整此设置的人实际上有一个游标泄漏,他们只是试图克服错误而不是解决根本原因。

答案 1 :(得分:2)

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

<div class="zui-wrapper">
<div class="zui-scroller">
    <table class="zui-table">
        <thead>
            <tr>
                <th class="zui-sticky-col">Name</th>
                <th class="zui-sticky-col2">Number</th>
                <th>Position</th>
                <th>Height</th>
                <th>Born</th>
                <th>Salary</th>
                <th>Prior to NBA/Country</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td class="zui-sticky-col">DeMarcus Cousins</td>
                <td class="zui-sticky-col2">15</td>
                <td>C</td>
                <td>6'11"</td>
                <td>08-13-1990</td>
                <td>$4,917,000</td>
                <td>Kentucky/USA</td>
            </tr>
            <tr>
                <td class="zui-sticky-col">Isaiah Thomas</td>
                <td class="zui-sticky-col2">22</td>
                <td>PG</td>
                <td>5'9"</td>
                <td>02-07-1989</td>
                <td>$473,604</td>
                <td>Washington/USA</td>
            </tr>
            <tr>
                <td class="zui-sticky-col">Ben McLemore</td>
                <td class="zui-sticky-col2">16</td>
                <td>SG</td>
                <td>6'5"</td>
                <td>02-11-1993</td>
                <td>$2,895,960</td>
                <td>Kansas/USA</td>
            </tr>
            <tr>
                <td class="zui-sticky-col">Marcus Thornton</td>
                <td class="zui-sticky-col2">23</td>
                <td>SG</td>
                <td>6'4"</td>
                <td>05-05-1987</td>
                <td>$7,000,000</td>
                <td>Louisiana State/USA</td>
            </tr>
            <tr>
                <td class="zui-sticky-col">Jason Thompson</td>
                <td class="zui-sticky-col2">34</td>
                <td>PF</td>
                <td>6'11"</td>
                <td>06-21-1986</td>
                <td>$3,001,000</td>
                <td>Rider/USA</td>
            </tr>
        </tbody>
    </table>
</div>

如果结果为&#34; SPFILE&#34;,则使用以下命令:

alter system set open_cursors = 4000 scope = both; --4000是打开光标的数量

如果结果为&#34; PFILE&#34;,则使用以下命令:

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

您可以在这里阅读SPFILE与PFILE,

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

答案 2 :(得分:0)

你可以在init.ora下更新设置 oraclexe \应用\ ORACLE \产品\ 11.2.0 \服务器\配置\脚本