当从 ArcGIS 客户端或通过 ArcGIS for Server Web 服务连接到企业级地理数据库时,您将与您或其他数据库用户已添加到地理数据库中的数据集进行交互。为了追踪该数据和实施地理数据库行为,企业级地理数据库将使用系统表。
不得使用 ArcGIS 软件或 SDK 以外的任何其他软件更改系统表及其内容。但是,您可以使用 SQL 来查看系统表的内容。
核心系统表
核心地理数据库系统表可以强制实施地理数据库行为、存储有关地理数据库的信息以及追踪存储在地理数据库中的用户数据。
当您查询包含企业级地理数据库的 Oracle 数据库时,您将看到 sde 用户方案中的以下核心系统表:
- COLUMN_REGISTRY
- COMPRESS_LOG - 于首次压缩地理数据库时创建。
- DBTUNE
- GDB_CONFLICTS
- GDB_ITEMRELATIONSHIPS
- GDB_ITEMRELATIONSHIPTYPES
- GDB_ITEMS
- GDB_ITEMTYPES
- GDB_REPLICALOG
- GDB_TABLES_LAST_MODIFIED
- GEOMETRY_COLUMNS
- INSTANCES
- LAYER_LOCKS
- LAYERS
- LOCATORS
- METADATA
- MVTABLES_MODIFIED
- OBJECT_LOCKS
- PROCESS_INFORMATION
- RASTER_COLUMNS
- SDE_ARCHIVES
- SDE_LOGFILE_POOL
- SDE_TABLES_MODIFIED
- SDE_XML_COLUMNS
- SDE_XML_INDEX_TAGS
- SERVER_CONFIG
- SPATIAL_REFERENCES
- STATE_LINEAGES
- STATE_LOCKS
- STATES
- ST_COORDINATE_SYSTEMS
- ST_GEOMETRY_COLUMNS
- ST_GEOMETRY_INDEX
- ST_SPATIAL_REFERENCES
- TABLE_LOCKS
- TABLE_REGISTRY
- VERSION
- VERSIONS
以下表格存在于地理数据库中,但不再使用。未来的版本中可能会将其移除。
- SDE_LAYER_STATS
- SDE_XML_INDEXES
用于实现企业级地理数据库功能的表
某些地理数据库功能的信息仅存储在核心系统表中。例如,以下功能的信息将存储在核心系统表中,且当您针对用户数据定义或启用此功能时,不会在数据库中创建其他表:
- 属性域 - 存储在 GDB_ITEMS 系统表中。GDB_ITEMTYPES 系统表中的字段将对象标识为属性域。
- 地理数据库复本 - 在 GDB_ITEMS、GDB_ITEMRELATIONSHIPS、GDB_ITEMTYPES 和 GDB_REPLICALOG 系统表的数据库中进行追踪。
- 关系类 - 存储在 GDB_ITEMS 和 GDB_ITEMRELATIONSHIPS 系统表中。
但是,以下部分中描述的地理数据库功能会在您启用或使用该功能时创建其他内部表。
地理数据库存档
可使用地理数据库存档追踪数据的历史事务时间。事务时间表示在数据库中添加、删除或更新要素的时刻。
当启用地理数据库存档功能后,系统将创建一个存档类。存档类为业务表的副本,其中包含业务表中的所有字段,另外还包括三个新字段:GDB_FROM_DATE、GDB_TO_DATE 和 GDB_ARCHIVE_OID。在参与传统版本的表或要素类上启用存档功能时,系统还会向 SDE_ARCHIVES 系统表添加一条记录。该条记录中存储了为进行存档而被启用的表的注册 ID 及该表相关联的存档类表的注册 ID。
存档类表的名称是原业务表名称后加一条下划线和 H。例如,如果启用名为 buildings 的要素类的存档功能,则系统会创建一个存档类 buildings_H。此存档类表将存储在与业务表相同的方案中。
版本
当注册要素类或表以参与版本化时,系统将创建两个表以追踪对数据的编辑:添加表和删除表。总之,它们被称为增量表。
添加表 (a_<registration_id>) 中包含了有关版本化业务表中各个插入或更新的记录(要素)的信息,并且可以查询该表来确定特定地理数据库状态时添加或修改的记录。
删除表 (d_<registration_id>) 中包含了与版本化表中已删除或已更新的行有关的信息,并且可通过查询识别特定状态下已删除或已修改的行。删除行时,不会以物理方式移除记录;它被标记为已删除并且不会再返回到后续数据库查询结果中。
添加表和删除表名称中的 registration_id 是 TABLE_REGISTRY 系统表中版本化表的值。
这些表是在与注册为版本化的表或要素类相同的用户方案中创建的。
除了增量表之外,追踪版本化表和编辑内容的核心系统表包括:STATES、STATE_LINEAGES、MVTABLES_MODIFIED 和 VERSIONS 表。
密钥集表
ArcGIS 客户端可使用密钥集表来提高查询性能。在以下情况下密钥集表将存储一组所选的行:ArcGIS 客户端执行使用整型、数值型、日期型或字符串型属性来连接表的地理数据库关系查询。此类表可保存使用对象 ID 字段以外的属性的连接。
只有在执行以下任一操作时,地理数据库中才会出现密钥集表:
- 如果要素类涉及关系类,则从 ArcGIS Pro 或 ArcMap 中地图的要素类中选择 99 条以上的记录。
- 在 ArcGIS Pro 或 ArcMap 中,打开关系类中所涉及的要素类的属性表,并检索相关表。
- 在 ArcMap 中启动编辑会话。
每个会话每个连接会创建一个密钥集表作为全局临时表。因为该密钥集表是临时表,所以在用户与地理数据库断开连接时会被删除。
密钥集表名称的格式如下所示:
<user_schema>.keyset_<process_id>,其中 <schema_name> 是引发此表创建操作的用户对应的方案,<process_id> 是触发此表创建操作的用户会话的进程标识号。
日志文件表
ArcGIS 客户端使用日志文件表通过存储所选行的列表来提高查询性能。日志文件表使用基于对象 ID 属性的连接。
默认情况下,Oracle 中的地理数据库使用共享的日志文件表。此类型的日志文件配置将在执行需要日志文件表的操作的用户方案中创建两个表(SDE_LOGFILES 和 SDE_LOGFILE_DATA)。这些表一经创建完成,就将保留在地理数据库中;但是,当连接中的应用程序删除所有日志文件时,所有日志文件条目也将被删除。
如果更改地理数据库使用的日志文件表的类型,则以下列表将指示在数据库中显示的日志文件表:
- 基于会话的日志文件表:SDE_LOGFILES、SDE_LOGFILE_DATA 和 SDE_SESSION<SDE_ID>。哪位用户的会话使得这些表得以创建,这些表就将在哪位用户的方案中创建。创建后,SDE_LOGFILES 和 SDE_LOGFILE_DATA 将保留数据库中。当使用基于会话的日志文件表时,将不会填充 SDE_LOGFILE_DATA。SDE_LOGFILES 表将在用户的会话结束时被截断。当处于连接状态中的应用程序不再需要日志文件记录时,SDE_SESSION<SDE_ID> 表将被截断,且当会话断开连接时,将删除该表。
- 日志文件表池 - 此日志文件实施使用核心系统 SDE_LOGFILE_POOL 表并创建 SDE_LOGPOOL_<TABLE_ID> 表,以存储基于对象 ID 的选择。当配置地理数据库以使用此类型的日志文件表实施时,地理数据库管理员将定义要创建的 SDE_LOGPOOL_<TABLE_ID> 表数量。所有这些表都由 sde 用户所有。