SQL Server 中的地理数据库系统表

当从 ArcGIS 客户端或通过 ArcGIS Server Web 服务连接到企业级地理数据库时,您将与您或其他数据库用户已添加到地理数据库中的数据集进行交互。 为了追踪该数据和实施地理数据库行为,企业级地理数据库将使用系统表。

请勿使用 ArcGIS 软件或 SDK 以外的任何其他软件更改系统表及其内容。 但是,您可以使用 SQL 来查看系统表的内容。

核心系统表

当您查询包含企业级地理数据库的 Microsoft SQL Server 数据库时,您将看到 sde 用户方案或 dbo 方案中的以下核心系统表:

  • GDB_CONFLICTS
  • GDB_EDITINGTEMPLATERELATIONSHIPS
  • GDB_EDITINGTEMPLATES
  • GDB_ITEMRELATIONSHIPS
  • GDB_ITEMRELATIONSHIPTYPES
  • GDB_ITEMS
  • GDB_ITEMTYPES
  • GDB_LOCKS
  • GDB_REPLICALOG
  • GDB_TABLES_LAST_MODIFIED
  • SDE_archives
  • SDE_branch_tables_modified
  • SDE_branches
  • SDE_column_registry
  • SDE_compress_log - 于首次压缩地理数据库时创建。
  • SDE_dbtune
  • SDE_geometry_columns
  • SDE_layer_locks
  • SDE_layers
  • SDE_lineages_modified
  • SDE_multibranch_tables
  • SDE_mvtables_modified
  • SDE_object_ids
  • SDE_object_locks
  • SDE_process_information
  • SDE_raster_columns
  • SDE_server_config
  • SDE_spatial_references
  • SDE_state_lineages
  • SDE_state_locks
  • SDE_states
  • SDE_table_locks
  • SDE_table_registry
  • SDE_tables_last_edit_time
  • SDE_tables_modified
  • SDE_version
  • SDE_version_history
  • SDE_versions

以下表格存在于地理数据库中,但不再使用。 未来的版本中可能会将其移除。

  • SDE_locators
  • SDE_metadata
  • SDE_layer_stats
  • SDE_logfile_pool
  • SDE_xml_columns
  • SDE_xml_index_tags
  • SDE_xml_indexes

用于实现企业级地理数据库功能的表

某些地理数据库功能的信息仅存储在核心系统表中。 例如,以下功能的信息将存储在核心系统表中,且当您针对用户数据定义或启用此功能时,不会在数据库中创建其他表:

  • 属性规则 - 存储在 GDB_ITEMS 系统表中。
  • 分支版本 - 将表或要素类业务表注册为参与分支版本化时,系统将向其中添加六个字段以追踪编辑内容。
  • 属性域 - 存储在 GDB_ITEMS 系统表中。 GDB_ITEMTYPES 系统表中的字段将对象标识为属性域。
  • 地理数据库复本 - 在 GDB_ITEMSGDB_ITEMRELATIONSHIPSGDB_ITEMTYPESGDB_REPLICALOG 系统表的数据库中进行追踪。
  • 关系类 - 存储在 GDB_ITEMSGDB_ITEMRELATIONSHIPS 系统表中。

但是,以下部分中描述的地理数据库功能会在您启用或使用该功能时创建其他内部表。

地理数据库存档

可使用地理数据库存档追踪数据的历史事务时间。 事务时间表示在数据库中添加、删除或更新要素的时刻。

当在表或要素类上启用地理数据库存档功能后,系统将创建一个存档类。 存档类为业务表的副本,其中包含业务表中的所有字段,另外还包括三个新字段:GDB_FROM_DATEGDB_TO_DATEGDB_ARCHIVE_OID。 在参与传统版本的表或要素类上启用存档功能时,系统还会向 SDE_archives 系统表添加一条记录。 该条记录中存储了为进行存档而被启用的表的注册 ID 及该表相关联的存档类表的注册 ID。

存档类表的名称与包含下划线并追加 H 的原始业务表名称相同。 例如,如果启用名为 buildings 的要素类的存档功能,则系统会创建一个存档类 buildings_H。 此存档类表将存储在与业务表相同的方案中。

当您修剪未注册为版本化的存档类中不需要的存档记录时,该事务将记录在 SDE_metadata 系统表中。

传统版本

当注册要素类或表以参与传统版本时,系统将创建两个表以追踪对数据的编辑:添加表和删除表。 总之,它们被称为增量表。

添加表 (a_<registration_id>) 中包含了有关版本化业务表中各个插入或更新的记录(要素)的信息,并且可以查询该表来确定特定地理数据库状态时添加或修改的记录。

删除表 (d_<registration_id>) 中包含了与版本化表中已删除或已更新的行有关的信息,并且可通过查询识别特定状态下已删除或已修改的行。 删除行时,不会以物理方式移除记录;它被标记为已删除并且不会再返回到后续数据库查询结果中。

添加表和删除表名称中的 registration_id 是 SDE_table_registry 系统表中版本化表的值。

这些表是在与注册为版本化的表或要素类相同的用户方案中创建的。

除了增量表之外,追踪版本化表和编辑内容的核心系统表包括:SDE_statesSDE_state_lineagesSDE_mvtables_modifiedSDE_versions 表。

密钥集表

ArcGIS 客户端可使用密钥集表来提高查询性能。 在以下情况下密钥集表将存储一组所选的行:ArcGIS 客户端运行使用整型、数值型、日期型或字符串型属性来连接表的地理数据库关系查询。 此类表可保存使用对象 ID 字段以外的属性的连接。

只有在执行以下任一操作时,地理数据库中才会出现密钥集表:

  • 如果要素类涉及关系类,则从 ArcGIS Pro 中地图的要素类中选择 99 条以上的记录。
  • ArcGIS Pro 中,打开关系类中所涉及的要素类的属性表,并检索相关表。

每个会话每个连接会创建一个密钥集表作为全局临时表。 因为该密钥集表是临时表,所以在用户与地理数据库断开连接时会被删除。

密钥集表名称的格式如下所示:

<user_schema>.##keyset_<process_id>_sde,其中 <schema_name> 是引发此表创建操作的用户对应的方案,<process_id> 是触发此表创建操作的用户会话的进程标识号。

日志文件表

ArcGIS 客户端使用日志文件表通过存储所选行的列表来提高查询性能。 日志文件表使用基于对象 ID 属性的连接。

SQL Server 中的地理数据库使用基于会话的本地临时表作为日志文件表。 每个需要使用日志文件表的客户端会话都会拥有一个专用的日志文件表。 表名称是 SDE_session<sde_ID>,其中 <SDE_ID> 是来自 SDE_process_information 表的唯一会话 ID,<DBID> 是来自 SQL Server 的数据库 ID。