SQL Server 中地理数据库 (geodatabase) 内的 ArcSDE 日志文件表

地理数据库使用日志文件表来存储表行的列表。

有关详细信息,请参阅有关 SQL Server 的 ArcSDE 日志文件表配置选项

ArcGIS Desktop 中的日志文件表

ArcGIS Desktop 中无法查看日志文件表。而只会在从 ArcMap 中选择的内容返回一个数量超过 100 的要素集时,创建并填充日志文件表。

SQL Server 数据库中的日志文件表

当您首次在 SQL Server 中安装 ArcSDE 并创建地理数据库时,默认的日志文件配置将使用在 SQL Server tempdb 数据库中创建的基于会话的日志文件。每个需要使用日志文件表的客户端会话都会在此数据库中拥有一个专用的日志文件表。因此,如果使用该默认配置,这些会话日志文件表将不会出现在数据库中。

如果更改默认的日志文件配置,则将在地理数据库中出现不同的日志文件表,出现哪种日志文件表要取决于对日志文件配置做出的更改。如果所使用的基于会话的日志文件是在地理数据库中创建的,而不是在 tempdb 数据库中创建的,则将在此地理数据库中出现 SDE_logfiles、SDE_logfile_data 和 SDE_session<SDE_ID> 表。哪位用户的会话导致创建这些表,这些表就将在哪位用户的方案中创建。尽管 SDE_logfile_data 表创建完成,但没有在其中填充数据。SDE_logfiles 和 SDE_logfile_data 表将保留在地理数据库中,但在连接中的应用程序断开连接时,SDE_logfiles 表将被截断。当连接中的应用程序不再需要日志文件记录时,SDE_session<SDE_ID> 表将被截断,当会话断开连接时,将丢弃该表。

下图中的虚线表明了各表之间的隐含关系。

SQL Server 中基于会话的 ArcSDE 日志文件表

如果使用独立的日志文件,对于超出会话所设定的选择阈值的每个选择集,会为每个图层都创建一个新的 SDE_logdata<SDE_ID>_<#> 表。同时还会根据会话创建 SDE_logfiles 和 SDE_logfile_data 表,但 SDE_logfile_data 表不会填充数据。这两个表都在引起表创建操作的用户的方案中创建。

当连接中的会话不再需要日志文件时,SDE_logdata<SDE_ID> 表将被截断,当会话断开连接时,会将这些表丢弃。当连接中的应用程序断开连接时,SDE_logfiles 表将被截断。

SQL Server 中独立的 ArcSDE 日志文件表

如果使用共享的日志文件,则将在该 DBMS 用户的方案中根据 DBMS 用户 ID 创建并存储两个表 - SDE_logfiles 和 SDE_logfile_data。这些表一经创建完成,就将保留在地理数据库中;但是,当连接中的应用程序删除所有日志文件时,所有日志文件条目也将被删除。

SQL Server 中共享的 ArcSDE 日志文件表

在创建地理数据库后,将在 ArcSDE 管理员的方案中创建并存储 SDE_LOGFILE_POOL 表。如果使用一个文件池,并且该文件池由 ArcSDE 管理员拥有的独立或基于会话的日志文件组成,则将使用此表,另外还会在地理数据库中创建 SDE_LOGPOOL_<table_ID> 表。所创建的 SDE_logpool_<table_ID> 表的数量取决于您在 SDE_server_config 表中指定的 LOGFILEPOOLSIZE 值。在下面的示例中,LOGFILEPOOLSIZE 被设置为 10;因此将创建 10 个 SDE_logpool 表(ID 从 1 到 10)。在本例的 SDE_logfile_pool 表中,将包含 10 条记录,table_id 分别为 1 到 10。

所有针对日志文件池创建的表都在 ArcSDE 管理员方案中创建。

SQL Server 中的 ArcSDE 日志文件表池

日志文件的系统表

以下是 ArcSDE 日志文件所用各表的定义。

SDE_logdata<SDE_ID>_<#>

SDE_logdata_<sde_ID>_<#> 表包含业务表记录的列表,这些记录是独立日志文件的一部分。表的名称包含会话 ID 和独立日志文件顺序。此表归使得此表得以创建的用户所有。

字段名

字段类型

描述

是否允许空值

sde_row_id

integer

所记录的业务表行的行 id 或形状 id

非空

SDE_logfile_data

SDE_logfile_data 表包含业务表记录的列表,这些记录是各日志文件的一部分。它归使得此表得以创建的用户所有。

字段名

字段类型

描述

是否允许空值

logfile_data_id

integer

标识该行 ID 所属的日志文件。logfile_data_id 引用的是 SDE_logfiles 中的日志文件元数据。

非空

sde_row_id

integer

所记录的业务表行的行 id 或形状 id;日志文件可记录行 id、形状 id 或用户 id。

非空

row_id

integer

唯一识别记录,并可移除重复的 <logfile_data_id,sde_row_id> 值

SDE_logfile_pool

SDE_logfile_pool 表包含当前已检出的日志文件的列表。创建地理数据库时即会创建此表,并且词表归 ArcSDE 管理员所有。

字段名

字段类型

描述

是否允许空值

table_id

integer

用于识别日志文件池表

非空

sde_id

integer

识别当前正在使用给定的日志文件池表的 sde 连接。sde_id 是对 process_information 表的 sde_id 列的引用。如果 sde_id 为空,则表示此日志文件池表当前未处于使用中。

SDE_logfiles

SDE_logfiles 表包含日志文件元数据。它归使得此表得以创建的用户所有。

字段名

字段类型

描述

是否允许空值

logfile_name

nvarchar(255)

日志文件的唯一用户定义(或应用程序定义)名称

非空

logfile_id

integer

用于唯一识别日志文件

非空

logfile_data_id

integer

识别行 id 所属的日志文件

每当日志文件被截断时,将指定新的 logfile_data_id 以避免代价较大的删除操作。

非空

registration_id

integer

业务表的注册 ID,该业务表的 ID 将记录到此日志文件中

非空

flags

integer

可表明日志文件属性的值的位掩码

非空

session_tag

integer

连接会话的唯一标识符,例如,可以利用它使指定 ArcSDE 连接清除所有属于其会话的临时日志文件。

非空

logfile_data_db

nvarchar(32)

存储为此日志文件存放 ID 的表的数据库的名称

logfile_data_owner

nvarchar(32)

为此日志文件存放 ID 的表的所有者的名称

logfile_data_table

nvarchar(32)

持有该日志文件 ID 的表的名称。此表可以是传统的 SDE_logfile_data 表,也可以是日志池表、会话表或独立的 SDE_logdata<SDE_ID>_<#> 表。

column_name

nvarchar(32)

业务表中要进行记录的列的名称。通常为行 id 或形状 id,但也可以指定一个任意整型列进行记录。

SDE_logpool_<table_id>

SDE_logfile_pool 表包含当前已检出的日志文件的列表。创建地理数据库时即会创建此表,并且词表归 ArcSDE 管理员所有。

字段名

字段类型

描述

是否允许空值

logfile_data_id

integer

识别行 id 所属的日志文件

每当日志文件被截断时,将指定新的 logfile_data_id 以避免代价较大的删除操作。logfile_data_id 是对 sde_logfiles 中的日志文件元数据的引用。

非空

sde_row_id

integer

所记录的业务表行的行 id 或形状 id;日志文件可以记录行 id,也可以记录形状 id。

非空

SDE_session<SDE_ID>

SDE_session<sde_ID> 表在使用基于会话的日志文件时创建。如果已连接会话创建的选择集超出了应用程序阈值(ArcMap 中为 100 条记录),可使用此表追踪日志文件记录。当会话断开连接时,将丢弃 SDE_session<sde_ID> 表。

字段名

字段类型

描述

是否允许空值

logfile_data_id

integer

标识该行 ID 所属的日志文件。logfile_data_id 引用的是 SDE_logfiles 中的日志文件元数据。

非空

sde_row_id

integer

所记录的业务表行的行 id 或形状 id;日志文件可以记录行 id,也可以记录形状 id。

非空

XML 文档中的日志文件表

日志文件表无法存储在 XML 文档中。这意味着,如果将地理数据库方案导出到 XML 工作空间文档中,则在导入方案后,下次用户创建的选择集超出日志文件阈值时,日志文件表将被重新创建。


3/7/2012