ArcGIS 9.2产品推出以后,Geodatabase部分发生了比较大的变化。本次讲座介绍的均是9.2的Geodatabase和ArcSDE的功能。
在产品组成方面:9.1版本中,Geodatabase包括两种:Personal Geodatabase和ArcSDE Geodatabase,其中前者是将空间数据存储在Access中,后者是将数据存储在Oracle,Informix,DB2,SQL Server中 。而9.2版本中,新推出了File Geodatabase,并且在ArcSDE Geodatabase部分,变成了三种类型:ArcSDE Personal Geodatabase,ArcSDE Workgroup Geodatabase,ArcSDE Enterprise Geodatabase。其中前两种是9.2新推出来的产品,是将空间数据存储在SQL Server Express中(详细介绍可见正文),而第三种就是9.1版本的ArcSDE Geodatabase,是将空间数据存储在Oracle,Informix,DB2,SQL Server。
在功能方面:本讲座涉及的功能均为9.2的功能,其中9.1具备的功能包括:Versioning Editing(版本化编辑),Working With a Geodatase Using SQL(支持的数据库仅为Informix和DB2 ),离线编辑(与9.2的空间数据复制中的Check In/Check Out相同)。值得注意的是,9.1版本对存储在ArcSDE中的空间数据只提供版本编辑功能,到了9.2才增加了Non Version(非版本化编辑)功能,以及Registered as visioned with the option to move edits to base(不完全版本化编辑)功能。
第一部分:Geodatabase的基础知识(之一)
Geodatabase能将空间数据存储在文件、MDB文件或者大型DBMS中。以上三种存储方式的区别在于可存储数据量的不同以及可支持的并发用户数量不同,能够实现从小数据量、单用户的文件数据库到大数据量、多用户并发编辑的企业级DBMS的不同层次的应用。
Geodatabase事实上是很多Geographic Dataset的集合,最基本的Dataset的类型包括Feature Classes、Raster Dataset、Attribute Tables。在以上基本要素的基础上,还能定义Geodatabase的Schema、数据的完整性、规则和行为,包括Spatial Reference、Spatial Resolution、Topology、Network、Domain等等。在创建Geodatabase时,首先生成不同的Dataset类型,然后添加或者扩展Geodatabase基本要素的能力,例如添加拓扑、网络、子类以实现GIS行为建模、维护数据完整性以及建立空间关系。
不同的数据库中,存储矢量和栅格数据几何特征的字段在是不一样的,如果DBMS能够支持Spatial type Extensions,则能够很容易采用这种方式存储空间几何特征。目前有三种DBMS能够支持Geodatabase的Spatial Type:
(1)Oracle using the ESRI spatial type or optionally the Oracle Spatial type;
(2)IBM DB2 using the Spatial Extender Geometry Object;
(3)Informix using the Spatial DataBlade Geometry Object。
Geodatabase将地理要素以表格的形式存储,每行记录代表一个要素。在Geodatabase的数据表支持的数据类型包括:
Numbers:包括Short Integers、Long Integers、Single-Precision floating points、Double-Precision Floating Point Numbers;
Text;
Date;
BLOB’S;Binary Large Objects用来存储和管理二进制信息,例如Symbols和CAD几何特征;
Globe Identifiers:Globe Unique Identifiers。GlobeID和GUID用来唯一标识一行记录。
对于矢量要素的存储来说,创建新的Feature Dataset或者新的Feature Class时,需要对数据的环境进行设置,即Spatial Reference,以下为主要的几种空间参考的参数:
(1)XY Tolerance
指实现Cluster或者进行拓扑验证、缓冲区分析、多边形叠加等操作时,点与点的坐标之间的最小距离。缺省的XY Tolerance是0.001 meter(投影坐标系);如果是State Plane Feet,则缺省值是0.003281feet;如果是地理坐标系,则缺省值是0.000000008982995degrees。一旦点与点的X坐标或者Y坐标的距离小于XY Tolerance,则两点应该合并为一个点。缺省状态下XY Tolerance=XY Resolution * 10。在实际应用中,XY Tolerance太大或者太小均有问题,应该根据实际情况设定合适的Tolerance。在设定Topology时,可以设定不同要素类的Rank,以确保当两个要素的点小于XY Tolerance时,应该是哪个点向哪个点移动。
(2)XY Resolution
表示存储要素坐标时的数值精度,即可以保留的小数点的位数。缺省状态下的Resloution是0.0001meter(投影坐标系) ;如果是State Plane Feet,则缺省值是0.0003281feet;如果是地理坐标系,则缺省值是0.0000000008982995degrees。
对于3D数据以及Linear Referencing数据,可以分别对Z值和M值设置Z Tolerance、Z Resolution,以及M Tolerance、M Resolution
可以将Geodatabase的Feature Classes扩展为高级数据类型:Feature Dataset,、Subtypes、Attribute Domains、Relationship Classes、Topology、Network Dataset、Geometric Network、Terrain、Address Locator、Linear Referencing、Cadastral Fabric、Cartographic Representation、Versioning。
对于Raster数据的存储来说,Raster数据是采用规则网格表示连续的地理事物和现象。其存储时需要注意以下部分的设置:
Coordinate System;
Reference Coordinate or XY Location;
Cell Size;
Count of Rows和Columns。
Raster和Image数据类型也是存储和管理在关系表格中,Raster数据通常比较大,存储的时候需要一个Side Table来存储,将Raster切为小片,或者大小通常为128*128或者256*256的Blocks,存储在Raster表中,通过Side表的每一行记录去记录栅格中的每一个Block。
虽然对File Geodatabase和Personal Geodatabase的管理任务很少,但是还是有些管理任务是很重要的,“附件一”为两种数据库需要的管理工作。
Compressing与Compacting所表示的含义与操作是不同的。
对于File Geodatabase来说,Compressing与Smart Data Compression(SDC)采用相同的技术,并且提供更多的优越之处。为了减小存储空间,可以将File Geodatabase的矢量要素和Table压缩成Read-Only格式。Compress以后的数据在ArcMap和ArcCatalog中显示时与未压缩的数据一样,只是不能编辑。
File Geodatabase的Compress不是在物理上将数据压缩得更小,而是将数据组织得更加紧凑,例如重复的完全相同的多点会用一行记录加上点的个数来表示。ArcGIS对不同的字段采取不同的压缩方法,压缩比例由要素的类型以及属性数据的冗余程度来决定。右键单击File Geodatabase,选择Compress File Geodatabase实现该功能。
Compress和Uncompress也可以通过Geoprocessing的工具来实现。除了可以通过Compress File Geodatabase功能来实现文件的压缩以外,如果原始数据的Resolution很精细,而在实际应用中不需要很高的分辨率,则可以将原始数据导入到一个新的粗分辨率的数据库。不能够单独Compress和Uncompress一个Feature Dataset中的Feature Class,如果希望对该Feature Class压缩,则需要将该Feature Dataset中的所有的Feature Class都压缩。对于Rsater Dataset和Raster Catalog的压缩只能由File Geodatabase Geoprocessing工具来实现。
一旦Feature Class和Table被压缩,则不能够对数据进行编辑,并且不能够修改Coordinate System Information、Subtypes、Attribute Domains、Default Value、Filed and their Properties、Representations。唯一能够修改的就是Feature Class和Table的Alias以及Attribute Indexes。
一个Feature Dataset中可以添加Uncompressed Feature Class,如果一个Feature Dataset中同时包含Compressed和Uncompressed的数据,则Uncompressed的数据也不能够被编辑或修改。“附件二”为File Geodatabase对Compress功能的支持程度。
用户能够压缩Relationship、Topology、Geometric Networks、Network Datasets 、Terrains中的要素类,但局限是:不能够针对已经Compressed的Feature Class创建Topology或者Geometric Network,如果压缩Relationship Class的一边的数据,则另一边的数据也不能编辑。如果Topology的Feature Class已经Compressed,则Topology的属性也不能修改。“附件三”为高级要素对Compress功能的支持程度。
Compacting是将文件记录整理、重新归类,以减少存储空间。如果经常添加或者删除数据,就必须定期对File 或者Personal Geodatabase实现Compact,这能够减少文件大小,提高访问速度。
File Geodatabase是将数据存在硬盘的文件夹中,每个Dataset是一个文件,该文件可以达到TB级,而Personal Geodatabase是将数据存储在MDB文件中。当第一次将数据加载到File Geodatabase或者Personal Geodatabase中时,文件中的记录是顺序排列的,但是如果以后删除或者添加要素,则文件中的记录就没有顺序了,会存在很多没有利用的空间,这将加大文件存储的空间,使得数据访问起来速度很慢。
在ArcCatalog中右键单击数据源,选择Compact Database,则可以实现数据库的Compact。如果某个Database正在ArcMap中编辑,则不能够被Compact。
Versioning使得多个用户能够同时编辑一个Geodatabase,而不用去复制数据库或者锁定数据库。一个Geodatabase能够有很多Version,事实上不管一个 Geodatabase有多少个Version,数据库中只保存一套Tables和Feature Classes。Version是对Geodatabase的快照,而不是复制。对所有版本的编辑都是保存在Delta表中的。通过创建Version,多个用户可以同时对一个Geodatabase进行编辑,而且多个用户也可以同时编辑一个Version。
在ArcCatalog和ArcMap中,可以像未版本化的数据一样实现数据的查询、浏览和编辑。当用户连接一个多用户的Geodatabase时,通常需要选定连接哪个Version。
所有的ArcSDE Geodatabase均具备Default 版本,所有版本的最原始的源就是Default版本。能够通过提交更新的方式来维护和更新Default版本,也可以对其直接编辑。
用户在创建版本时,可以为版本设定访问权限。对某个版本的编辑只会应用到该版本,而某个版本中Schema的变化则会影响到所有其它的版本。一旦停止编辑,可以将编辑结果提交到任意父版本。首先要Reconcile,即比较提交版本中的数据与父版本是否有冲突,如果有冲突则提供冲突解决办法。然后就是Post,则将编辑结果提交到父版本。
每一个Table和Feature Class包含两个Delta表:A表和D表。每次更新或者删除版本中的一个记录时,则可能对一个或者两个Delta表进行修改。一个Version包含所有的Original 表以及所有的Delta表的变化,当显示和查询一个版本时,ArcGIS是从Original表和Delta表中查找相应的信息。
对于Feature Class和Table的所有编辑,不管是位于哪个Vision中,都是保存在相同的Delta表中。因此Base中的所有行,以及A和D表的所有记录表示了Feature class和Table的所有版本的信息,任何一个版本都是这三个表的子类。
ArcGIS记录Delta表中的记录属于哪个Version的办法是:A表和D表的每一行都用State ID进行标识。当编辑一个版本时,产生一个新的State,同时产生新的一行添加到A表或者D表。一个系列的States记录了版本从Base表到当前状态,该系列称为Lineage。当你显示或者查询一个Version时,ArcGIS从版本的Lineage中得到State ID,然后从A表和D表中找到相应的信息。
当编辑Geodatabase时,Delta表的大小和State的数量都在增加,表格与State越多,每次处理时的速度就越慢,因此应该定期利用 ArcCatalog中的Compress工具进行数据库压缩,利用Analyze工具实现数据库的Statistics的重建。
在进行数据库处理的时候,有三种选项:Registered As Visioned without the option to move edits to base ,registered as visioned with the option to move edits to base,not registered as versioned.
(1) Registered As Visioned without the option to move edits to base
能够实现的操作包括Undo和Redo操作、长事务编辑、为设计和工程使用命名版本、使用Geodatabase归档、使用数据库复制。
不能做的事:创建拓扑、从拓扑中添加或删除要素、添加和删除拓扑规则、创建几何网络、从几何网络中添加或删除要素类。
(2) registered as visioned with the option to move edits to base
不能够做的事:编辑参与拓扑和几何网络的要素类、数据库归档、数据库复制
(3)not registered as versioned
是最原始的状态,能够实现复杂数据类型,包括拓扑和几何网络的编辑与更新。因为Default版本是数据库中最关键的,需要经常更新,因此需要对Default版本定期备份。
如果用户注册版本时采用的是Register with the option to save edits to the base table,编辑简单要素时,编辑的结果还是保存在Delta表中,一旦保存,则这些变化就要从Delta表转移到Base Table中,而在Delta表中不再保存编辑的结果。用户如果编辑的不是Default版本,则变化也是记录到Delta表中,Save以后,变化也依旧保留在Delta表中,然而当Reconcile和Post到Default版本以后,变化就转移到Base 表中了。如果是将版本中的变化Reconcile和Post到非Default版本,则在Delta表中依旧会保留变化信息。Register with the option to save edits to the base table的缺陷就是一旦编辑错误,不能够回退,只能够放弃整个编辑过程。这种方法主要是使得第三方应用能够在版本化的环境下执行类似Non- Version 编辑,而ArcGIS用户是不能够通过这种设置来实现Non-Version编辑的。
第三方应用(非ArcGIS软件或者非AO开发的软件)通常是只能对Base Table进行查询,不能够看到Delta表中的变化。如果将数据注册为版本化,而不选择move the edits to the base table,当用户还没有将编辑结果Reconcile和Post到Default版本时,第三方用户是无法看到其他版本的编辑情况。
Unregistered as Versioned将使得用户保留上一次Compress后的数据,而未Compress的数据则将丢失。
对于海量的、多用户的数据库,可以使用自动Reconcile和Post的功能。有两种方式可以实现:Batch Reconcile和Version Reconcile Services
在版本化编辑中,可以多个用户同时编辑一个版本中的数据,也可以多个用户同时编辑同一数据库的不同版本。这两种情况会导致以下两种冲突的发生:
(1)多个用户同时编辑一个版本中的数据:当多个用户同时编辑一个Version时,对每个用户都创建一个Edit Session,每个用户都不能看到其他用户的编辑状态,只有用户Save Edits以后,才能够看到其他用户的编辑状态。如果多个用户同时对一个要素做了不同的操作,则会发生Conflicts,在保存编辑结果时,会出现冲突信息,则根据在Editing Options的Versioning面板上设置的Preferences来处理冲突,看应该保存哪个用户的编辑结果;
(2)如果是子版本和父版本的编辑发生冲突,则在Reconcile的时候会出现冲突信息,用户可以手动去解决冲突;如果用户正在查看的版本又被提交了新的内容,则用户只有Refresh以后,才能看到更新以后的内容。
时间数据归档实际上是将空间数据库的所有变化都保存下来,记录其变化的时间和变化后的状态,并且提供工具访问某一时刻或者某一时间段的数据库状态,还提供了分析工具。时间数据归档功能是在ArcInfo和ArcEditor中提供的,针对的是完全版本化的数据。在已有的Transactional Version的基础上,Geodatabase Archiving增加了新的Historical Version。用户既可以连接到Transactional Version,也可以连接到Historical Version。用户可以利用Transactional Version来实现数据的编辑,而Historical Version使得用户能够展示数据在某一时刻或者时间段的状态,并且该状态是只读的。在连接一个数据库的时候,可以选择是连接Historical Version还是Transactional Version,并且还可以通过Change Version工具来进行修改。对于Historical Version的查询是基于Archive Class,而对于Transactional Version的查询是基于Base表和Delta表。
时间数据归档是将所有针对空间数据库的Default版本的变化都保存下来,在Archive Class中存储和管理。当开始创建归档时,首先在数据库中创建Archive Class,它是对Default版本的完全拷贝,具备相同的Schema,但是增加了3个属性,其中gdb_from_date表示数据库某个状态的开始时间,gdb_to_date表示数据库某个状态的结束时间,gdb_archive_oid用来唯一标识档案类的某行记录。当Default版本变化以后,在Archive Class中增加一条记录,保存Default版本变化后的状态,以及该状态的存在时间段。
在数据归档中提供了多个工具以实现时间数据库的浏览和分析,其中History Viewer 工具条用于浏览空间数据库变化的时间系列中某一时刻的状况,可以通过Marker选择,也可以通过Date/Time选择;Historical Marker Manager用于创建,修改和查询Markers,其中Markers是将数据库的变化时间用一个有意义的名字表示,例如用户在2005年5月1日,将数据库中的地块A 删除,那么在档案类中可以将2005年5月1日这个时间用“地块A被删除”这种描述性的信息来命名,使得用户能直观理解时间所代表的含义,在 History Viewer Tool中,通过点击“地块A被删除”,就可以察看2005年5月1日的数据库状态;还包括将Archive类添加到ArcMap中的命令。因为在ArcCatalog和ArcMap中,用户是无法直接浏览和分析Archive Class的,必须要借助ArcMap中的命令添加,可以实现查询,以及通过符号化来显示事物随时间的变化轨迹。
Archiving 能够支持完全的Geodatabase数据模型,独立的Feature Classes、Feature Datasets、Tables、Relationship、Network Topology都能够实现Archiving。
注意:
(1) 一旦数据集注册为“Registered with moving edits to base ”,则不能实现Archiving,必须将数据集Unregistered,然后再“Registered as versioned without the option to move edits to base”;
(2) 仅仅对具备Own权限的Datasets或者Classes进行Archiving;
(3) 在开始Archiving时,原始Class的Indexed也将创建;
(4) 能够通过点击Archiving的Properties查看数据的档案;
(5) 对Archive Class类的命名规则是在原始对象类的名称后加“_H”,例如Road_H;
(6) 利用ArcCatalog不能查看Archive Class,但是在ArcMap中通过Add Historical Archive命令把Archive Class添加到ArcMap中浏览和分析;
(7) 为了更好的使用Archive Class,应该定期更新Database Statistics;
当对Versioned Database开始Enabling Archiving时,则创建Archive Class,并采用两个字段gdb_from_date,gdb_to_data来记录变化时间。有两种时间Valid Time和Transactional Time,其中Valid Time是对应真实世界的变化发生时间,而Transactional Time则是将变化记录到数据库的时间,是由系统自动记录的。ArcGIS采用Transactional时间以记录变化保存和提交到Default版本的时间。这样就会产生不一致的问题。
一旦开始Archiving ,Default Version中的所有Row都被拷贝到Archive Class中,并且所有来自原始数据的Row都用相同的Timestamp标记。Gdb_from_date字段是用开始Enabling Archiving操作的时间来记录的,而gdb_to_date字段是记录为12/31/9999。如果一个对象的gdb_to_date是 12/31/9999,表示其属性与Default版本的状态是相同的。一旦数据被编辑,保存并提交到Default版本以后,Archive Class会自动更新。当对数据库中的某个要素Update的时候,提交到Default版本后,该要素的Row的gdb_to_date将变成提交变化的时间,同时增加一行,将其gdb_from_date改为提交变化的时间,而将gdb_to_date改成12/31/1999。一旦要删除一个要素,则将该要素的属性gdb_to_date改成提交变化的时间。对数据库的Archive都是在一个独立的Database Transaction中进行的,保证编辑结果可以回退。
当Disabling Archiving时,可以选择不删除相关的Archive Class,将其保存为具备From和To字段的Temporal Table,可以用来实现时间动画、动画图表和追踪分析,也可以选择删除Archive Class。在Unregistered as Versioned之前,必须要将数据集Disable Archive。在Archiving Enabled期间删除要素集或者要素类,将保存Archive Class。
数据库复制的几种常见方式
有三种分发数据的方法:(1)Copy和Paste:这种方法能够实现数据的分发以及更新,但是不能保证数据完全更新,并且无法保证数据库的同步;(2)Geodatabase Replication:能够在两个或者多个Geodatabase之间实现数据的复制与同步。Geodatabase Replication是建立在版本化数据的基础上的,支持拓扑与网络等完全的数据模型,并且能够在不同类型的数据库之间实现数据的复制与同步,例如 Oracle与SQL Server之间;并且还支持在联网和非联网的方式下实现,在支持本地数据库连接的基础上,还支持通过Internet 所获得的GeodataServer对象;(3)DBMS复制:能够实现数据的复制与同步,要求数据库之间必须是直接连接的,不支持跨类型的数据库,不支持拓扑、网络等高级数据模型,并且更新的是所有的版本,而Geodatabase Replication只针对特定的版本。
分布式数据库的多种应用场景
Geodatabase Replication是在ArcInfo和ArcEditor中提供的
(1)Replica Tree
Geodatabase Replication能够用于创建复制树,允许企业在层状机构中间分发数据,每个下级部分获得的是与自己业务相关的一部分数据,而最上级机关负责管理所有的数据。
(2)Central Hub
为了使得某些操作能够快速进行,可以将中心Geodatabase作为一个Hub,其它地方对中心数据库复制一份,用于数据编辑,然后将编辑的结果同步到中心数据库中。
(3)Mobile Users
将中心数据库的一部分拷贝到移动设备上,拿到野外进行离线编辑,最后连接到中心数据库,利用移动设备上的数据来更新中心数据库。
(4)Contractors
能够将中心数据库中的数据复制下来,作为产品卖出,每个一段时间给用户实现同步以更新数据
(5)Load Balancing
为了实现机构内部数据编辑和访问的负载均衡,可以建立两套Geodatabase ,一个提供只读数据,方便用户进行数据浏览,另外一个提供可编辑的数据,方便用户进行数据更新。然后定期用可编辑的数据库去同步只读的数据库,实现数据库的同步,并且达到负载均衡、提高效率的目的。
(6)Multi-Group Data Management
在一个机构内部,一个中心数据库可能需要多个部门分别来管理,因此会将中心数据库分开拷贝到子数据库,由分中心进行维护,维护后的结果需要同步到中心数据库。
Replica和Geodatabase
实现Geodatabase的Replication包括两个步骤:将数据从源数据库拷贝到目的数据库,在源数据库和目的库之间创建Replica。这个 Replica包含了数据源的信息以及用于数据同步的信息。在源数据库中的Replica叫做父复本,在目的库中的Replica叫做子复本。每一对父复本和子复本称为一个Replica对。其中源数据库必须是ArcSDE Geodatabse ,而目的数据库则可以是多种类型的Geodatabase。一个ArcSDE Geodatabase可以同时包含子复本和父复本,也可以包含多个子复本或者是多个父复本。File Geodatabase和Personal Geodatabase只能用于Check Out的子复本。
Replication Type
Geodatabase复制允许将数据拷贝分布在2个或更多的Geodatabase中,可以将数据库独立编辑,需要的时候再将它们同步。Geodatabase复制包括三种类型:
(1) Check In/Out:允许对子复本进行编辑,然后同步到父复本中,但是只能同步一次。如果希望将子数据库中的其它编辑情况再次同步到父数据库,则需要创建新的 Check Out Replica,其中Check In/Out的子复本的数据库可以是ArcSDE Geodatabase、File或者Personal Geodatabase。
(2) One Way:父复本可以向子复本发送多次同步,而子复本不能将变化同步到父复本。同步的时候不会产生冲突,因为子版本的编辑均被父版本覆盖。One Way的子复本必须是建立在ArcSDE Geodatabase中。
能够复制的类型包括Full:包括拓扑和网络数据模型,要求子复本的数据被版本化;Simple:只能复制简单数据类型,子复本不一定要求被注册版本。
(3) Two Way:父复本和子复本之间可以多次同步,并且是双向的。在同步的过程总可能会发生冲突。子复本必须建立在ArcSDE Geodatabase中。
Replication的数据准备工作
在进行数据库复制的时候,可以将整个数据集复制,也可以是将子库进行复制,或者只是Schema。数据库用户必须对数据源具备读写权限,数据库必须是版本化的。不能将数据库注册为“Move edits to base ”。对于One Way/Two Way复制,有以下额外条件:每个数据库都必须具备Global colum,每个空间数据都必须保存在High Precision的空间参考系中。
复制的时候可以通过设定Filters和Relationship Classes来实现数据复制。Filters包括:Spatial、Selections、Querydefs;
Replica Creation 和Versioning
版本化的数据库方可实现数据库的复制。创建Replica后,在Source和Target数据库之间创建的是Replica Versions,同步时该Replica Version之间的变化进行交换。Default Version或者其它的Version都能够被用为Parent Replica的Replica Version。很多Replica能够共享相同的Replica Version,也可以根据相同的Version创建多个Replica。
对于Check In/Out来说,子复本也可以创建在File和Personal Geodatabase中,但是这些数据库不支持版本化,因此需要其它的机制以实现版本化。
Replicating Related Data
有多种复制方向可以选择:Forwards、Backwards、Circulation
Raster Catalog和Raster Dataset不能够版本化,因此不能够被复制。但是在Create Replica Wizard面板中能够从源数据库中提取Raster数据集和Raster Catalog,只要这些Raster数据是包含在ArcMap文档中的 。
Terrain和Network也不能被复制,但是只要构成它们的要素能够被版本化,它们也可以复制。在复制过程中忽略Terrain和Network,只有在复制完成以后,才能重建Terrain和Network
Synchronization
同步是将一个Replica中的数据变化,如插入、更新和删除,提交到相应的Replica中。为了能够同步,必须用创建复制时的同一个数据库用户进行同步。
在同步的时候会创建Synchronization Version,它是Replica Version的子类,暂时保存变化信息,直至被Reconcile和Post到Replica Version中。
对于Two Way复制来说,通过Filters和Relationship决定哪些数据被同步,同样也可以利用Logic来分辨哪些数据已经通不过。对于Check Out来说,对Check Out Replica的所有编辑都将被同步。
数据库同步时的数据交换是基于交换Replication Message的。在Connected 环境下,消息的传递是由系统管理的,可以确定同步的方向,一旦发生错误,则可以回退。而在Disconnected环境下,消息的传递需要人为控制,借助于CD、DVD、USPS等。
在数据同步过程中,Data Sender和Data Recevier之间的Acknowledgement Message是非常关键的。并且Sender和Reveiver之间的角色根据复制的类型是可以调换的。在进行下一次同步的时候,同步的数据包括新产生的更新,以及Un-Acknowledge的数据。
数据库复制的步骤
(1)决定把数据库复制多少次:复制一次,还是复制多次;
(2)采用什么样的复制类型:Check In/Out,One Way,Two Way;
(3)采用什么样的工具实现数据库的复制:Create Replica Wizard;Create Replica Geoprocessing Tool;ArcObjects API
(4)将复制集成到Versioning Workflows中:一旦建立复制,则在父复本和子复本之间建立了复制对。要决定是对其它版本创建复制,还是直接对Default版本创建复制,这将决定同步时数据是否直接提交到Default版本。
(5)决定数据复制的数据类型:点线面等简单数据类型,还是网络、拓扑等复杂数据类型
(6)考虑复制的选项:是否Re-use Schema,表示是否利用子复本的数据库模式,仅用于Check Out;Schema Only,只将数据库的模式导出,仅用于Check Out,方便用户直接拿到野外,从头开始添加数据;Register Existing Data:如果要复制的数据量非常大,可考虑选择Register数据库,在复制之前需要做很多操作;Replicate Related Data:对于拓扑、网络等数据,是否也要复制相关的数据
(7)考虑数据库复制时是在Connected环境下,还是在Disconnected环境下,如果网络条件不好并且不稳定,则应该考虑后者。
(8)同步复制:Manul Synchronization,如果只是对小数据量的数据库进行同步更新,并且不是经常进行,则可以利用Distribution Geodatabase Toolbar来实现,能够实现局域网或者Internet数据库的同步;利用Agent实现自动更新:Geoprocessing中的Python脚本,以及通过ArcObjects实现
(9)同步时的冲突解决:如果同步时出现冲突,则可以通过自动或者手动的方式实现冲突解决
(10)决定将哪些数据同步,对于复杂数据要着重考虑
(11)同步的数据量:上一次同步以后产生的数据变化,以及同步以后没有接收到Acknowlegement的数据
(12)同步的先后顺序:由选择的复制类型以及定义的同步顺序所决定;
(13)Shcema变化:最后是否保持数据库的Schema不变
(14)错误信息:同步过程中发生错误,可以回退,并且可以浏览错误信息。
Geodatabase Replication和ArcGIS Server
能够通过LAN、WAN将访问由ArcGIS Server 的geodataserver 所发布的Geodatabase Service,实现数据的读取和复制,将其加载到ArcSDE Geodatabase、File和Personal Geodatabase中。如果要是在ArcMap中获取远程的Geodatabase,则需要具备Map Service以及Geodata Service
操作一:连接到Data Server:ArcSDE Database Servers用于存储、获取和管理ArcSDE Personal 和Workgroup Geodatabase。其中ArcSDE Personal在ArcEditor和ArcInfo级别的License文件中是免费的,而ArcSDE Workgroup是位于ArcGIS Server的Workgroup级别的授权文件中的。两种数据库存储方式均能够实现Versioned Editing、Archiving、Replication。它们与ArcSDE Enterprise不同的地方在于数据库的大小、连接数、管理和定制能力的大小。
(1) 添加到Database Server的连接:用户名必须位于ArcSDE Database Server的管理组中。打开ArcCatalog/Database Servers/Add Database Server,输入“机器名/用户名”,即luochun/sqlexpress,则创建了数据库连接。
(2) 对数据库连接LUOCHUN_SQLEXPRESS点击右键,通过Properties可以查看其连接属性,通过Permissions可以查看该数据库的连接用户。
操作二:添加数据库的权限用户:如果用户是机器的管理员,则安装ArcSDE Database Server以后,该用户自动成为ArcSDE的用户。如果不是,则需要添加用户到ArcSDE的用户组。如果是管理员用户自己安装的ArcSDE,则在 Permissions的对话框中不会出现管理员账号,如果是其他人替管理员安装了ArcSDE,则管理员的账号会出现在Permissions对话框中。
(1) 打开控制面板/管理工具/计算机管理,右键选择“本地用户和用户组”,右键选择“用户组”,点击New User,则创建了新的用户。
(2) 在ArcCatalog/LUOCHUN_SQLEXPRESS/Permissions对话框中,将上步添加的用户名添加到该对话框中,则为ArcSDE中创建了用户。
操作三:创建和添加Geodatabase
(1) 打开ArcCatalog,双击操作二创建的数据库连接,则连接了ArcSDE数据库,右键单击,选择New Geodatabse,输入名称和数据库的保存位置、以及数据库的大小。
(2) 连接已有的数据库:数据移动的最简单方法是将数据从一个数据服务器转移到另外一个数据服务器,利用ArcSDE重新连接。只有ArcSDE Database Server的管理员才可以实现数据库连接的删除与创建。右键单击LUOCHUN_SQLEXPRESS,选择Attach,选择数据源D:/ ArcGISTutorial/ArcTutor/DatabaseServers/traffic_study.mdf,则连接了已有的数据库。
操作四: 管理用户权限:在给ArcSDE Database Server添加新的用户时,可以为其设置权限。用户权限是针对数据库中的所有数据的。
(1) 查看数据库的用户和权限。右键单击上步连接的数据库traffic_study,Admission/Permissions,则可以看见该数据库的用户,单击某个用户,则可以看见其权限。
(2) 可以将不同数据库的用户权限设置不同。仅仅只有数据库的所有者才能够修改其他用户的权限。如果某个用户对某个数据库已经具备了最高权限,则对该数据库下的数据集的许可不能再修改。
操作五:当在ArcSDE Database Server中创建了数据库,则可以在其中Create、Import、Copy数据。以下演示采用不同用户创建数据以后,数据的权限是否可以更改。
(1)在开始菜单中,右键点击ArcCatalog,选择“运行方式”,选择“下列用户:luochun/Leon”,以该用户登录,打开 ArcCatalog 程序,向数据库中添加数据。然后关闭ArcCatalog,再以现有账号打开ArcCatalog,则刚才创建的数据库的右键菜单中, Permissions是无法修改的。说明只有数据所有者才能对数据的权限进行修改。
操作六:Database Servers和Geodatabase的管理:Database Server是SQL Server Express Instance。能够通过停止、重连和暂停该Instance来管理用户的连接。必须是Windows的管理员才能够对Instance进行管理。在对 Database Server管理之前,必须Disconnect。
(1) Instance的管理右键点击LUOCHUN_SQLEXPRESS,选择Disconnect,然后再点击Stop,则停止了该Instance。还可以Pause、Start等操作。
(2) Geodatabse的Compress:当对某个Geodatabse创建了很多版本,并且做了很多编辑,则需要将其Compress,以删除不需要的状态。右键单击traffic_study,Administration/Compress Dataset ,则实现了数据库的压缩。通过Properties/Administration,可以看见上一次数据压缩的时间。
(3) 更新数据库的Statistics,以提高数据查询和检索的速度:右键单击evac_study数据库,Administration/Geodatabase Maintenance,选择Analyze,则实现了数据库的优化。
(4) Updating Indexes:当数据库做了很多改变之后,数据库的索引会变得低效,则需要更新索引:右键单击evac_study数据库, Administration/Geodatabase Maintenance,选择Rebuild all indexes。
(5) Detaching a Geodatabase:为了实现数据转移,则需要将数据库从一个Database Server中分离开,再去连接另外一个Database Server。只有ArcSDE Database Server管理员才能够实现数据库的分离:右键单击traffic_study,Administration/Detach,则实现了数据库的分离。这种方式是逻辑上的分离,并没有删除底层的数据库。
(6) Creating Geodatabse Backup files:Geodatabse 管理员和Database Server管理员均可以实现数据库的Backup文件的创建。但是为了Restore数据库,必须是Database Server管理员。当对Geodatabase的变化操作后,就必须创建Geodatabase Backup文件,这保证如果数据库错误或者被删,能够有备份的数据:以Tess用户名打开ArcCatalog,重新连接Database Server。右键单击evac_study数据库,点击Administrator/Backup,将Backup Name设为evacbu1,设置数据保存位置,则实现了数据库的备份。这样就创建了数据库的Image,是对原始数据的完全拷贝,内容与创建备份时的一样,如果对数据库做了进一步的修改,则需要创建新的备份文件。通过数据库的Propertise/Administration面板,可以查看最新的备份文件。
(7) Restoring Database:打开ArcCatalog,右键单击Database Server,点击Restore,文件将保存在Backup文件处,并且名字是自动生成的。
(8) Shrinking a Geodatabase(收缩数据库):当数据库做了多次数据添加和删除操作以后,数据文件将变得小而琐碎,当数据库空间接近极限时,可以通过收缩数据库或者增加数据库容量的方式来改善。右键单击evac_study 数据库,Administrator/Geodatabase Maintenance/Shrink Geodatabase
(9) Upgrading a Geodatabase:如果用户的软件版本升级,则需要将Geodatabase升级。用户必须具备Windows管理权限。首先要Attach到旧的数据库OLD,单击OLD,将会出现对话框提示是否更新数据,点击Yes,则可以看见数据。右键单击该数据库,Properties/General,点击Upgrade Geodatabase,则实现数据库的更新。一旦数据库被升级,则旧版本的桌面程序则不能再连接该数据库。