Python实现批量执行ArcGIS版本的协调和提交

在数据生产过程中,一般都是多用户并发来编辑,在保证数据保密以及规范化、责任化的前提下使用了ArcGIS版本的机制。


Owner使用ArcGIS的Privileges功能赋予不同的user可读可编辑的权限,那么使用user用户连接就可以看到owner的数据了,那么每一个user在原有数据的基础上来创建针对于自己的子版本,该版本的属性可以设置为private,保证其他用户不能访问,然后每个用户编辑自己的子版本,然后owner或者专门的user将编辑结果的子版本往父版本进行协调和提交,这样就是一个标准的编辑业务流程。


但是在国内很少使用这种标准的编辑流程,那么在数据保密性、以及编辑过程中往往出现很多因为不规范产生的问题。


那么我们就模拟一个标准的多用户并发编辑的场景,比如我的数据Owner为SDE用户

我新建了两个用户 AAA和BBB

-- Create the user 
create user aaa
  identified by aaa
  default tablespace SDE
  temporary tablespace TEMP
  profile DEFAULT;
-- Grant/Revoke role privileges 
grant resource to aaa;
grant connect to aaa;



-- Create the user 
create user bbb
  identified by bbb
  default tablespace SDE
  temporary tablespace TEMP
  profile DEFAULT;
-- Grant/Revoke role privileges 
grant resource to bbb;
grant connect to bbb;

相关的权限很简单,那么我们使用权限分配将SDE的可读和可写的权限分配给AAA和BBB(具体见ArcGIS Desktop),然后我们分别使用AAA和BBB用户连接某个版本化数据,然后创建自己的子版本(相关权限为Private),那么两个用户分别编辑自己的子版本数据即可。

那么问题出来了,我刚才说,标准的ArcGIS 版本编辑的流程其实应该是比如使用SDE用户来对所有的子版本进行协调和提交,而不是让AAA或BBB用户自己协调,为什么不让其他用户协调(一个很简单的例子,如果AAA和BBB用户都编辑了大量的数据,那么在AAA进行协调的过程中,势必会占用一定的时间,如果刚好BBB用户也往Default版本进行协调就会出现错误,其他也就是提示,所以为了保险起见,我们设定SDE用户或者数据拥有者用户自己来对数据进行协调和提交,但是另一个问题来了,如果我的子版本有几十个,那么我一个个的手动协调和提交非常麻烦(前提先不说有冲突的情况),那么我们使用Python脚本就比较简单了。

from arcpy import *
//阻止其他用户的连接
arcpy.AcceptConnections(r'Database Connections\Connection to 192.168.220.165.sde', False)
//获得相关的子版本的信息
versionList = arcpy.ListVersions(r'Database Connections\Connection to 192.168.220.165.sde')
//进行往Default版本协调和提交
arcpy.ReconcileVersions_management(r'Database Connections\Connection to 192.168.220.165.sde',"ALL_VERSIONS","SDE.DEFAULT",versionList,
     "LOCK_ACQUIRED", "NO_ABORT", "BY_OBJECT", "FAVOR_TARGET_VERSION", "POST", "DELETE_VERSION", "c:/temp/reconcilelog.txt")
//可以其他用户进行连接
arcpy.AcceptConnections(r'Database Connections\Connection to 192.168.220.165.sde', True)
这里面最关键的就是ReconcileVersions_management具体可以查看相关的帮助,因为后面的参数比较多,执行之后我们可以看到如下错误
[2012/7/23 16:45:33] Starting reconcile.
[2012/7/23 16:45:33] Reconciling version SDE.111 with SDE.DEFAULT.
[2012/7/23 16:45:33] Posting version SDE.111 to SDE.DEFAULT.
[2012/7/23 16:45:33] Deleting version SDE.111.
[2012/7/23 16:45:34] 1 of 7 versions finished.
[2012/7/23 16:45:34] Reconciling version SDE.222 with SDE.DEFAULT.
[2012/7/23 16:45:34] Posting version SDE.222 to SDE.DEFAULT.
[2012/7/23 16:45:34] Deleting version SDE.222.
[2012/7/23 16:45:34] 2 of 7 versions finished.
[2012/7/23 16:45:34] Reconciling version SDE.333 with SDE.DEFAULT.
[2012/7/23 16:45:34] Posting version SDE.333 to SDE.DEFAULT.
[2012/7/23 16:45:34] Deleting version SDE.333.
[2012/7/23 16:45:34] 3 of 7 versions finished.
[2012/7/23 16:45:34] Reconciling version SDE.zhangwa with SDE.DEFAULT.
[2012/7/23 16:45:34] Posting version SDE.zhangwa to SDE.DEFAULT.
[2012/7/23 16:45:34] Deleting version SDE.zhangwa.
[2012/7/23 16:45:34] 4 of 7 versions finished.
[2012/7/23 16:45:34] Reconciling version AAA.aaa with SDE.DEFAULT.
[2012/7/23 16:45:35] Warning: Error reconciling version AAA.aaa.[Unable to create logfile system tables. User perhaps lacks permissions or resources to create tables [SDE.QUXIAN]]
[2012/7/23 16:45:35] 5 of 7 versions finished.
[2012/7/23 16:45:35] Reconciling version BBB.bbb with SDE.DEFAULT.
[2012/7/23 16:45:35] Warning: Error reconciling version BBB.bbb.[Unable to create logfile system tables. User perhaps lacks permissions or resources to create tables [SDE.QUXIAN]]
[2012/7/23 16:45:35] 6 of 7 versions finished.
[2012/7/23 16:45:35] Reconciling version SDE.ccc with SDE.DEFAULT.
[2012/7/23 16:45:35] Posting version SDE.ccc to SDE.DEFAULT.
[2012/7/23 16:45:35] Deleting version SDE.ccc.
[2012/7/23 16:45:35] 7 of 7 versions finished.
[2012/7/23 16:45:35] Finished reconcile.
这些错误应该比较熟悉

参考:http://support.esri.com/es/knowledgebase/techarticles/detail/34539 

[arcsde@rhsde ~]$  sdeconfig -o alter -v ALLOWSESSIONLOGFILE=TRUE,LOGFILEPOOLSIZE=10 -i 5151 -u sde -p sde


ArcSDE 10.0  for Oracle11g Build 2004 Fri Jan 13 11:45:40  2012
SDE Server Configuration Tool    Administration Utility
-----------------------------------------------------
Alter SERVER_CONFIG Table. Are you sure? (Y/N): y

        Successfully altered SERVER_CONFIG Table.

然后再次执行

[2012/7/23 17:06:37] Starting reconcile.
[2012/7/23 17:06:37] Reconciling version AAA.aaa with SDE.DEFAULT.
[2012/7/23 17:06:38] Posting version AAA.aaa to SDE.DEFAULT.
[2012/7/23 17:06:38] Deleting version AAA.aaa.
[2012/7/23 17:06:38] 1 of 2 versions finished.
[2012/7/23 17:06:38] Reconciling version BBB.bbb with SDE.DEFAULT.
[2012/7/23 17:06:38] Posting version BBB.bbb to SDE.DEFAULT.
[2012/7/23 17:06:38] Deleting version BBB.bbb.
[2012/7/23 17:06:38] 2 of 2 versions finished.
[2012/7/23 17:06:38] Finished reconcile.
即可成功。

这样我们就很方便的进行批量版本的协调和提交了。

需要注意:上面并没有涉及版本的冲突,所以如果用户编辑过程中确定没有冲突,可以使用该操作!

 -------------------------------------------------------------------------------------------------------
版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
-------------------------------------------------------------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值