现在的位置: 首页 > 综合 > 正文

同步复制CheckIn/CheckOut的再研究-Checkout文件Geodatabase

2013年10月08日 ⁄ 综合 ⁄ 共 7607字 ⁄ 字号 评论关闭

关于同步复制中Check in/out的再次研究,还是有许多收获。

基本的使用方法可以参考http://blog.csdn.net/linghe301/article/details/6093368

基本的使用方法(ArcGIS10环境下)

1:如果是一次性的CheckIn/out(也就是说签出的GDB,编辑一次再签入回去,文件GDB就和数据库没有任何关系了)

ArcSDE源数据可以为注册版本,也可以不为注册版本

a:为注册版本数据,在签出过程中会给用户建立一个replica的名字,其实这个名字也就是在版本数据的一个子版本名称,我们编辑好的GDB导入进去,其实也就是把数据导入到这个子版本中了,但是我们在导入过程中还有一个这样的选项,Reconcile and post with the parent version的勾选项。


如果我们不勾选这个,我们的数据就会在子版本中,用户自己再核对数据进行协调,提交,这等于是给用户一个检查新数据的机会。

如果我们勾选这个,那么我们的数据会自动的进行协调提交到Default版本中,而且子版本的名称会被自动删除掉。

b:非注册版本(ArcGIS10的新特性),那么我们进行签入数据时就直接签入到Default版本了。


2:上面的链接我们也说明了,因为我们的数据不可能老是进行一次性签出(如果数据量小还可以),数据量大的话,我们每次签出肯定会浪费很多时间,所以我们也设计了可以对已经签出的GDB进行多次再建立同步关系(也就是勾选Register existing data only),但是使用这个选项有个前提

  • 必须确保将 GlobalID 添加到数据然后才能将数据复制到其他地理数据库。如果使用 ArcGIS 中的功能复制数据,请确保使用复制与粘贴、数据提取或 XML 工作空间导出及导入这几种方法之一。
  • 在用户创建复本时,必须以目标地理数据库的数据所有者的身份处于连线状态。 
  • 在复本创建过程中应用的过滤器同样会应用于关系地理数据库中的数据。 
  • 该选项也可以在离线环境中使用。

-----------------------------------------------------------------------------------------------

下面看看关于数据库里面的东西

1:在SDE库中,我们在GDB_ITEMS表中查看复本的信息

select sde.sdexmltotext(xml_doc ) from sde_xml_doc1 where sde_xml_id=(select definition from gdb_items where name='MyCheckOut')

2:我们看一下关于SDE里面MyCheckOut对象的XML信息(这些信息在博客中显示效果不好,大家有兴趣可以复制这些信息保存为.xml在IE中打开,效果更佳。

<?xml version="1.0"?>
-<GPReplica xmlns:typens="http://www.esri.com/schemas/ArcGIS/10.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="typens:GPReplica"><Name>TEST.MyCheckOut</Name><ID>-1</ID><ReplicaVersion>MyCheckOut</ReplicaVersion><CreationDate>2011-07-22T09:09:36</CreationDate><GUID>{CBA4A7FE-BB11-4ED3-A6DE-50E078929907}</GUID><Role>esriReplicaRoleParent</Role><AccessType>esriReplicaAccessNone</AccessType><MyGenerationNumber>0</MyGenerationNumber><SibGenerationNumber>0</SibGenerationNumber><SibMyGenerationNumber>0</SibMyGenerationNumber><ReplicaState>esriReplicaStateWaitingForData</ReplicaState>-<GPReplicaDescription xsi:type="typens:GPReplicaDescription"><ModelType>esriModelTypeFullGeodatabase</ModelType><SingleGeneration>true</SingleGeneration><SpatialRelation>esriSpatialRelIntersects</SpatialRelation>-<QueryGeometry xsi:type="typens:EnvelopeN"><XMin>46.324944999953772</XMin><YMin>17.747347013925921</YMin><XMax>60.247755000414337</XMax><YMax>33.797252986679077</YMax>-<SpatialReference xsi:type="typens:ProjectedCoordinateSystem"><WKT>PROJCS["Xian_1980_3_Degree_GK_CM_111E",GEOGCS["GCS_Xian_1980",DATUM["D_Xian_1980",SPHEROID["Xian_1980",6378140.0,298.257]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Gauss_Kruger"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",111.45],PARAMETER["Scale_Factor",1.0],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]</WKT><XOrigin>-5123200</XOrigin><YOrigin>-10002100</YOrigin><XYScale>450265407.00157917</XYScale><ZOrigin>0</ZOrigin><ZScale>1</ZScale><MOrigin>-100000</MOrigin><MScale>10000</MScale><XYTolerance>0.001</XYTolerance><ZTolerance>2</ZTolerance><MTolerance>0.001</MTolerance><HighPrecision>true</HighPrecision></SpatialReference></QueryGeometry>-<GPReplicaDatasets xsi:type="typens:ArrayOfGPReplicaDataset">-<GPReplicaDataset xsi:type="typens:GPReplicaDataset"><DatasetName>TEST.TESTPOLYGON</DatasetName><DatasetType>esriDTFeatureClass</DatasetType><RowsType>esriRowsTypeFilter</RowsType><IsPrivate>false</IsPrivate><UseGeometry>true</UseGeometry><TargetName>TESTPOLYGON</TargetName><DatasetID>1623</DatasetID><ParentOwner>TEST</ParentOwner></GPReplicaDataset></GPReplicaDatasets><TransferRelatedObjects>true</TransferRelatedObjects></GPReplicaDescription><ReconcilePolicy>esriReplicaDetectConflicts</ReconcilePolicy></GPReplica>

我们重点看着几个子项

<ReplicaState>esriReplicaStateWaitingForData</ReplicaState>
<ModelType>esriModelTypeFullGeodatabase</ModelType>
<SpatialRelation>esriSpatialRelIntersects</SpatialRelation>
<DatasetName>TEST.TESTPOLYGON</DatasetName>

3:我们看一下MDB里面的MyCheckOut对象的XML信息

<?xml version="1.0"?>
-<GPReplica xmlns:typens="http://www.esri.com/schemas/ArcGIS/10.0" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="typens:GPReplica"><Name>MyCheckOut</Name><ID>-1</ID><ReplicaVersion>MyCheckOut</ReplicaVersion><CreationDate>2011-07-22T09:09:36</CreationDate><GUID>{CBA4A7FE-BB11-4ED3-A6DE-50E078929907}</GUID><Role>esriReplicaRoleChild</Role><AccessType>esriReplicaAccessNone</AccessType><MyGenerationNumber>0</MyGenerationNumber><SibGenerationNumber>0</SibGenerationNumber><SibMyGenerationNumber>0</SibMyGenerationNumber><ReplicaState>esriReplicaStateSendingData</ReplicaState><SibConnectionString>ENCRYPTED_PASSWORD=0002b8653fdbb58d7a2be38905c1675a00;SERVER=lish;INSTANCE=5151;USER=test;VERSION=SDE.DEFAULT;AUTHENTICATION_MODE=DBMS;ProgID=esriDataSourcesGDB.SdeWorkspaceFactory.1</SibConnectionString>-<GPReplicaDescription xsi:type="typens:GPReplicaDescription"><ModelType>esriModelTypeFullGeodatabase</ModelType><SingleGeneration>true</SingleGeneration><SpatialRelation>esriSpatialRelIntersects</SpatialRelation>-<QueryGeometry xsi:type="typens:EnvelopeN"><XMin>46.324944999953772</XMin><YMin>17.747347013925921</YMin><XMax>60.247755000414337</XMax><YMax>33.797252986679077</YMax>-<SpatialReference xsi:type="typens:ProjectedCoordinateSystem"><WKT>PROJCS["Xian_1980_3_Degree_GK_CM_111E",GEOGCS["GCS_Xian_1980",DATUM["D_Xian_1980",SPHEROID["Xian_1980",6378140.0,298.257]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Gauss_Kruger"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",111.45],PARAMETER["Scale_Factor",1.0],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]</WKT><XOrigin>-5123200</XOrigin><YOrigin>-10002100</YOrigin><XYScale>450265407.00157917</XYScale><ZOrigin>0</ZOrigin><ZScale>1</ZScale><MOrigin>-100000</MOrigin><MScale>10000</MScale><XYTolerance>0.001</XYTolerance><ZTolerance>2</ZTolerance><MTolerance>0.001</MTolerance><HighPrecision>true</HighPrecision></SpatialReference></QueryGeometry>-<GPReplicaDatasets xsi:type="typens:ArrayOfGPReplicaDataset">-<GPReplicaDataset xsi:type="typens:GPReplicaDataset"><DatasetName>TESTPOLYGON</DatasetName><DatasetType>esriDTFeatureClass</DatasetType><RowsType>esriRowsTypeFilter</RowsType><IsPrivate>false</IsPrivate><UseGeometry>true</UseGeometry><TargetName>TEST.TESTPOLYGON</TargetName><DatasetID>3</DatasetID><ParentOwner>TEST</ParentOwner></GPReplicaDataset></GPReplicaDatasets><TransferRelatedObjects>true</TransferRelatedObjects></GPReplicaDescription><ReconcilePolicy>esriReplicaDetectConflicts</ReconcilePolicy></GPReplica>

我们也看重点的几项

<ReplicaState>esriReplicaStateSendingData</ReplicaState>
<SibConnectionString>ENCRYPTED_PASSWORD=0002b8653fdbb58d7a2be38905c1675a00;SERVER=lish;INSTANCE=5151;USER=test;VERSION=SDE.DEFAULT;AUTHENTICATION_MODE=DBMS;ProgID=esriDataSourcesGDB.SdeWorkspaceFactory.1</SibConnectionString>
<ModelType>esriModelTypeFullGeodatabase</ModelType>
<SpatialRelation>esriSpatialRelIntersects</SpatialRelation>

他们之间的关系就是通过这些信息进行相关联的

----------------------------------------------------------------------------

关于修改数据的研究

修改前修改后  

我们进行了四种操作,增加一个ObjectID为10要素,删除ObjectID=4的要去,合并ObjectID=1和8的要素,分割ObjectID=5的要素

我们可以在Personal GDB里面有一个名叫

GDB_ReplicaChanges
ClassID DatasetType State ObjectID
3 5 2 8
3 5 2 4
3 5 0 9
3 5 0 10
3 5 1 1
3 5 1 5

这个表就是记录我们数据更改的表,ClassID和DatasetType是区分不同要素类和类型的,最主要的我们看一下State和ObjectID

关于这个State的枚举值,我还没有找到相关的资料,但是我们根据相关的要素变化可以推测出来

State=2代表删除

State=0代表新建

State=1代表修改

当我们修改的MDB导入时,应该是重点针对这个表进行的数据修改吧,有状态值来获得到底是增、删、改,还有对应的ObjectID,这样就可以将编辑好的数据同步过来了。

------------------------------------------------------------------------------

等你编辑好的GDB信息同步到ArcSDE数据库中后,我们可以看到这个GDB里面的GDB_ReplicaChanges这个表以及GDB_ITEMS的Relica信息已经没有了,也就是说ArcSDE库与这个GDB已经没有任何关系了。



抱歉!评论已关闭.