使用 SQL 编辑版本化数据的快速浏览
要从 SQL 客户端编辑版本化数据,必须编辑数据的版本化视图,而不是基表(业务表)本身。版本化表使用两个关联表来记录变化,即添加表和删除表(统称为增量表)。编辑表的版本化视图时,编辑内容将写入添加表和删除表中。通过编辑基表可直接避开这一步骤,但可能会导致孤立的记录和数据丢失。
针对版本化视图执行 SQL 数据操作语句时,对于每类语句会在数据库中执行以下操作:*
- 插入:向基础基表的添加表中添加一条行记录,并自动生成新行的对象 ID 值。
- 更新:更新会彻底删除原始行并添加包含新信息的新行。因此,当执行更新语句时,会同时向基础基表的添加表和删除表中添加一条行记录。
- 删除:向基础基表的增量表中添加一条行记录。
*如果在 DEFAULT 版本指向状态 0 时对该版本进行编辑,所有编辑内容都会立即移到基表中。
请注意,不会对通过 SQL 执行的编辑进行内部版本协调。因此,完成编辑后,必须通过 ArcGIS for Desktop 或 Python 脚本将您的编辑与父版本进行协调。
编辑模型
您可以创建一个新的命名地理数据库版本,然后编辑此版本,或者可以直接编辑 DEFAULT 版本。如何选择取决于您站点的要求。选择适当的模型很重要,即编辑命名的版本或编辑 DEFAULT 版本,从而确保最佳性能和可扩展性。
编辑命名的版本
如果您的站点符合以下任意一种情况,请创建并使用命名的版本以使用 SQL 通过版本化视图进行编辑:
- 多个编辑器必须更改同一数据。
- 需要明确定义质量控制过程。
- 更改不必对其他用户立即生效,其在协调并提交前可保持独立。
- 您想编辑的版本化要素类在 Oracle 或 SQL Server 数据库中使用 SDEBINARY 或 OGCWKB 几何存储。
- 您想编辑的版本化要素类或表被注册为具有将编辑内容移动到基表的选项的版本。
通过版本化视图进行编辑时,编辑内容记录在添加表和删除表中。编辑内容被写入命名的版本所引用的当前状态。
以下是在命名的版本中编辑数据所采用的步骤,应按以下显示的顺序来执行这些步骤:
- 如果尚不存在版本化视图,则对版本化表或要素类创建版本化视图。
- 创建用于执行编辑的地理数据库版本。
- 使用 set_current_version 过程指定您想要访问新版本。这样做会将编辑会话设置为命名的版本指向的状态并锁定此版本。
- 通过执行适合数据库的 edit_version 过程或函数启动编辑会话。
- 使用 SQL 对版本化视图执行编辑。
- 将编辑内容提交到数据库或回滚编辑内容。
- 通过执行适合数据库的 edit_version 过程或函数停止编辑会话。
- 通过 ArcGIS 协调并提交编辑。
- 使用 ArcGIS 将所有更改提交到父版本以后,可删除版本化视图上为进行编辑而创建的版本。
编辑 DEFAULT 版本
如果您的站点符合下面的一种或多种情况,可以使用 SQL 通过版本化视图编辑 DEFAULT 版本:
- 要进行的编辑是短事务。
- 您的站点要求通过版本化视图所进行的编辑对其他用户立即生效。
- 编辑要素类时,要素类使用 SQL 空间类型,而不是 SDEBINARY 或 OGCWKB 几何存储。
- 要编辑的表或要素类没有注册为具有将编辑内容移动到基表的选项的版本。
编辑 DEFAULT 版本时,编辑内容像编辑命名的版本时那样记录在增量表中。但是,编辑 DEFAULT 版本时,任何人在查看 DEFAULT 版本时都能看到这些编辑内容。
每个插入、更新和删除操作都会写入 DEFAULT 版本所引用的当前状态。如果 DEFAULT 版本引用状态 0,每个编辑会直接应用于版本化表或要素类基表。如果 DEFAULT 版本由其他用户编辑,版本会更新以引用新的状态。如果您正在包括对 DEFAULT 版本进行多次编辑的事务中时出现这种情况,编辑内容会写入您最终提交时 DEFAULT 版本的状态。
提交编辑内容之后,以下项可立即对其进行访问:
- 正在处理版本化表和 DEFAULT 版本的用户或应用程序
- 正在处理子版本的用户或应用程序(子版本具有包含 DEFAULT 版本当前状态的状态谱系)
如果在 DEFAULT 版本中,版本化视图正在修改的行已由其他版本(此版本的状态取决于 DEFAULT 版本的当前状态)修改,则版本化视图会创建新的地理数据库状态、更新 DEFAULT 版本以引用新状态,然后执行编辑。这可确保正在修改的行(在取决于 DEFAULT 版本状态的状态下也会修改)不会被压缩操作或因后代状态的版本与 DEFAULT 版本协调而覆盖。
如果想要通过版本化视图编辑 DEFAULT 地理数据库版本中的数据,不要设置版本或启动编辑会话。要执行的步骤如下:
- 如果尚不存在版本化视图,则对版本化表或要素类创建版本化视图。注:
如果创建的版本化视图早于 ArcGIS 10.1,则必须重新创建,因为不能在 DEFAULT 版本中编辑旧的版本化视图。
- 使用 SQL 对版本化视图执行编辑。您将自动编辑 DEFAULT 版本的当前状态。
- 将编辑内容提交到数据库或回滚编辑内容。最好在每次编辑后提交或回滚编辑内容,因为事务打开时排它锁会锁定增量表。直到事务结束才会解锁。