• nORA-01000: 超出打开游标的最大数(SDE连接)


    1.运行ArcObjects代码报错:
    IFeatureCursor pCursor = null;
    
                try
                {
                    pCursor = m_pCatchLayer.m_pFeatureClass.Search(m_pSpatialFilter, false);
                }
                catch (Exception ex)
                {
    
                    throw;
                }

    错误内容:

    {"Underlying DBMS error [ORA-00604: 递归 SQL 级别 1 出现错误 ORA-01000: 超出打开游标的最大数 ORA-00604: 递归 SQL 级别 1 出现错误 ORA-01000: 超出打开游标的最大数 ORA-01000: 超出打开游标的最大数 ::SELECT  OBJECTID,  YSDM,  FLDM,  CDM,  MC,  SZ,  JB,  THXZ,  RL,  CJFS,  MAP,  JLSJ,  SCSJ,  MAPOBJECTID,  MAPOBJECTTIME,  1 SHAPE, ELEMID,  CLASID,  VERSION,  FDATE,  TDATE,  ENTILYRCOL,  ENTIIDCOL,  E_A21_MZSX_J_3204.SHAPE.area,  E_A21_MZSX_J_3204.SHAPE.len,  E_A21_MZSX_J_3204.SHAPE.points,E_A21_MZSX_J_3204.SHAPE.numpts,E_A21_MZSX_J_3204.SHAPE.entity,E_A21_MZSX_J_3204.SHAPE.minx,E_A21_MZSX_J_3204.SHAPE.miny,E_A21_MZSX_J_3204.SHAPE.maxx,E_A21_MZSX_J_3204.SHAPE.maxy,E_A21_MZSX_J_3204.rowid    FROM  FDBTX.E_A21_MZSX_J_3204 E_A21_MZSX_J_3204 WHERE SDE.ST_EnvIntersects(E_A21_MZSX_J_3204.SHAPE,:1,:2,:3,:4) = 1 ] [FDBTX.E_A21_MZSX_J_3204]"}
    2.解释:

    ArcSDE与ORACLE游标数

    在空间数据库优化中,需要首先考虑ORACLE的性能优化,其中,OPEN_CURSORS参数是个比较重要的指标,会影响到系统的查询速度。
    Oracle 初始化参数 OPEN_CURSORS 指定在任何时刻会话可同时打开的游标数。默认值是 300。如果会话尝试打开新游标,但此时已达到可打开游标数的最大值,那么将返回 Oracle 错误 -1000。ArcSDE 保留那些打开的、频繁执行的游标以提高性能。如果 Oracle OPEN_CURSORS 参数值设置得不够大,则将遇到上面提到的错误。Oracle 文档指出,给该参数设置非常大值不会产生不利影响。因此,可以设置非常大的值,例如,设置为 2000;从实用的角度来看,这样做即可有效地消除对打开游标数的限制,但同时又能提供一种保护措施,防止流氓进程尝试消耗过量的游标资源。相反,如果要计算会话可能打开的游标数,那么根据组织的数据模型,可将下面的公式作为指导:
    各种 ArcSDE 数据管理游标 (20) +
    各种匿名 PL/SQL 块 (20) +
    空间查询 - 可能每个图层 6 个 +
    日志文件查询 (11) +
    编辑多版本化表时使用的其他查询 - 每个多版本化表或图层 12 个
    如果文件中有 10 个图层被编辑时,ArcMap 应用程序可能打开 231 个游标 (20 + 20 + 60 + 11 + 120 = 231)。如果发现游标经常不够用,则可以 50 或 100 为增量增大 OPEN_CURSORS 参数值。
    但需要注意的是Oracle 10g 预配置为当实例的已打开游标数超出 1200 时,生成服务器警报。由于 1200 个打开的游标对于地理数据库来说很常见,最好增大该警报的阈值以消除警报队列中出现无关的警告。
    但设置非常大的游标数,需要更多的系统内存,因此要在实际情况下综合考虑。

    3.查询游标数目语句:
    show parameter open_cursors;
    4.设置游标数目上限:
    alter system set open_cursors=4000;
    5.链接数据库方法:以sys身份登录PL/SQL,File->New->Command Window
    6.查询正在使用的游标的数目sql语句
    select count(*) from  v$open_cursor

    image

    select USER_NAME, count(*) from  v$open_cursor GROUP BY USER_NAME;

    image

  • 相关阅读:
    [NOIP2018]:旅行(数据加强版)(基环树+搜索+乱搞) HEOI
    关于微服务网关
    管理 API 时要问的关键问题
    如何构建成功的微服务架构
    后端老是不写接口文档?说自己很忙?
    Nginx配置文件详解
    Keepalived 高可用
    Jenkins 调用 Shell 脚本
    Supervisor
    Harbor高可用实现基于haproxy
  • 原文地址:https://www.cnblogs.com/ccjcjc/p/3425902.html
Copyright © 2020-2023  润新知