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 出现错误\nORA-01000: 超出打开游标的最大数\nORA-00604: 递归 SQL 级别 1 出现错误\nORA-01000: 超出打开游标的最大数\nORA-01000: 超出打开游标的最大数\n::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参数是个比较重要的指标,会影响到系统的查询速度。 各种 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
select USER_NAME, count(*) from v$open_cursor GROUP BY USER_NAME;