ArcGIS 10.x for Oracle (2014年10月发布)优化Open_Cursors的性能问题
来源:互联网 发布:mac os mysql 客户端 编辑:程序博客网 时间:2024/05/20 03:07
由于Oracle在2014年10月份发布 Critical Patch Update 补丁的原因,ArcGIS不能直接从Oracle实例中获取Open_Cursors参数,除非当前连接的用户有访问v$parameter 视图的权限,但是一般情况下非管理员账户是没有对该视图访问的权限。
如果地理数据库没有对Open_Cursors值的访问权限,系统就会报:ORA-01000: maximum open cursors exceeded。为了提高Oracle地理数据库的性能以及可伸缩性,Oracle 建议的最佳做法是保持游标处于打开状态, 以避免系统挣用Oracle全局区 (SGA) 的游标。
ArcGIS在很多场景下都会使用Oracle游标,比如空间查询,编辑操作、读取字典表等
由于Oracle10月份的这个CPU补丁,ArcGIS在获取Open_Cursors值时,在执行dbms_utility.get_parameter_value会碰到一个错误,如果遇到该错误,ArcGIS会检查地理数据库管理员账户中的Server_Config表中是否包含Open_Cursors字段,如果参数不存在,ArcGIS默认设置该参数值为300.
如果ArcGIS客户端连接的是一个非地理数据库的Oracle实例,连接会话仍然会执行dbms_utility.get_parameter_value,如果碰到错误,ArcGIS也会自动的为Open_cursors设为300.
如果地理数据库没有对Open_Cursors值的访问权限,系统就会报:ORA-01000: maximum open cursors exceeded。为了提高Oracle地理数据库的性能以及可伸缩性,Oracle 建议的最佳做法是保持游标处于打开状态, 以避免系统挣用Oracle全局区 (SGA) 的游标。
ArcGIS在很多场景下都会使用Oracle游标,比如空间查询,编辑操作、读取字典表等
由于Oracle10月份的这个CPU补丁,ArcGIS在获取Open_Cursors值时,在执行dbms_utility.get_parameter_value会碰到一个错误,如果遇到该错误,ArcGIS会检查地理数据库管理员账户中的Server_Config表中是否包含Open_Cursors字段,如果参数不存在,ArcGIS默认设置该参数值为300.
如果ArcGIS客户端连接的是一个非地理数据库的Oracle实例,连接会话仍然会执行dbms_utility.get_parameter_value,如果碰到错误,ArcGIS也会自动的为Open_cursors设为300.
但是前提是Oracle地理数据库实例中的管理员账户的Server_config表中包含Open_Cursors的字段。所以我们需要在该表中添加该字段记录,默认是没有该记录的。
该问题涉及到ArcGIS版本包括:10.1, 10.2, 10.2.1, 10.2.2, 10.3
解决方法
1:打上ArcGIS发布的最新补丁,截止到博文发布,目前补丁只有ArcGIS 10.2.2,其他版本补丁还在调试当中。
ArcGIS 'Oracle Critical Patch Update - October 2014' Connection Issue Patch
2:直接使用SQL语句解决该问题(其他版本适用)
a):使用管理员账户,为地理数据库管理员对V$Parameter视图赋予权限。
SQL> GRANT SELECT ON v$parameter TO SDE; GRANT SELECT ON v$parameter TO SDE *第 1 行出现错误:ORA-02030: 只能从固定的表/视图查询
其实该视图只是一个同义词,通过以下SQL语句来说的相关表名
SQL> select synonym_name,table_name from dba_synonyms where synonym_name='V$PARAMETER';SYNONYM_NAME TABLE_NAME------------------------------ ------------------------------V$PARAMETER V_$PARAMETER
然后赋予地理数据库管理员选择该表的权限即可
SQL> GRANT SELECT ON v_$parameter TO SDE;
b):使用地理管理员用户连接,执行如下存储过程,目的就是往相关地理管理员账户的Server_Config表中添加Open_Cursors值
DECLARE rval INTEGER; ival INTEGER := 0; pname VARCHAR2 (256) := 'OPEN_CURSORS'; sval VARCHAR2(256); gdb_name NVARCHAR2(256); cprop_val VARCHAR2(256) := NULL; c1 INTEGER; c1_status INTEGER; sqlstmt CLOB; CURSOR instances_curs IS SELECT instance_name FROM sde.instances; BEGIN rval := dbms_utility.get_parameter_value(pname, ival, sval); IF ival > 0 THEN OPEN instances_curs; FETCH instances_curs INTO gdb_name; WHILE instances_curs%FOUND LOOP sqlstmt := 'BEGIN ' || gdb_name || '.svr_config_util.insert_server_config(:s1,:s2,:s3); ' || 'EXCEPTION WHEN DUP_VAL_ON_INDEX THEN ' || gdb_name || '.svr_config_util.update_server_config(:s1,:s2,:s3); ' || 'END;'; IF NOT dbms_sql.is_open (c1) THEN c1 := dbms_sql.open_cursor; END IF; dbms_sql.parse (c1, TO_CHAR (sqlstmt), dbms_sql.native); dbms_sql.bind_variable (c1, ':s1', pname); dbms_sql.bind_variable (c1, ':s2', cprop_val); dbms_sql.bind_variable (c1, ':s3', ival); c1_status := dbms_sql.execute (c1); dbms_sql.close_cursor (c1); FETCH instances_curs INTO gdb_name; END LOOP; CLOSE instances_curs; END IF; EXCEPTION WHEN OTHERS THEN RAISE;END;/
c):然后再取消该地理管理员对V$PARAMETER的执行权限
SQL> REVOKE SELECT ON v_$parameter FROM SDE;
接下来,我们查看Server_Config表里面的值,发现已经有Open_Cursors项,当然默认的300可能比较少,根据情况可以直接增大到2000.
0 0
- ArcGIS 10.x for Oracle (2014年10月发布)优化Open_Cursors的性能问题
- [ArcGIS必打补丁]ArcGIS 10.2.2 for Desktop连接Oracle(2014年10月发布)数据库崩溃的问题
- ArcGIS 10.2.2 for Desktop连接Oracle(2014年10月发布)数据库崩溃的问题
- 怎么提高ArcGIS for Desktop10.x的性能
- ArcGIS Runtime SDKs 10.2 for iOS & Android& OS X发布
- ArcGIS API for Flex 发布应用时 安全沙箱的问题
- Portal for ArcGIS发布SPK三维场景可能遇到的问题---持续更新
- 再谈Drupal 7.X的性能优化运行速度问题
- ArcGIS for js 发布geoserver发布的wms服务
- Oracle的性能优化
- arcgis for js 4.x定位控件Locate显示不了的问题
- arcgis server发布时遇到的问题
- arcgis aip for js 4.X 出现跨域问题
- ArcGIS Editor for OSM, 10.2.x Desktop安装问题
- ArcSDE10.x for Oracle的客户端直连配置问题
- Oracle open_cursors、sessions、processes的理解与监控
- 超难解决的问题:Oracle性能的优化
- ArcGIS Server 发布问题
- 布隆过滤器 (Bloom Filter) 详解
- SAP ABAP编程 Table Control动态隐藏列
- 信息无障碍大赛获奖名单出炉
- Cisco路由器的备份配置方法
- ios8 UITableView设置 setSeparatorInset:UIEdgeInsetsZero不起作用的解决办法
- ArcGIS 10.x for Oracle (2014年10月发布)优化Open_Cursors的性能问题
- 黄金数据查询演示示例
- SQL Server 索引和视图
- hdu1086-最少拦截系统(简单贪心)
- Linux自动挂载第二块硬盘分区
- 服务器配置成功支撑了双11活动
- Ubuntu软件管理
- 解决ListView上多选和单选界面上显示错乱的问题
- 01-C基础