企业级地理数据库使用日志文件表来维护所选记录的列表。在下列情况中,记录将被写入日志文件表以供应用程序稍后使用:
- 客户端创建指定大小的选择集(ArcMap 中 100 个记录;ArcGIS Pro 中 1,000 个记录;如果从要素服务请求 ObjectID,则为 1,000 个记录)。
- 您协调或提交到版本化的地理数据库。
- 客户端应用程序检出数据以进行离线编辑。
有三种日志文件选项:共享的日志文件、基于会话的日志文件以及由基于会话的日志文件组成的池。在本主题中,分别对每个选项进行了描述。
默认情况下,PostgreSQL 中的地理数据库使用共享的日志文件,但是您可以使用配置地理数据库日志文件表地理处理工具更改日志文件表设置。
共享日志文件
共享日志文件将由以相同用户身份连接的所有会话所共用。如果有多个用户与同一个用户帐户连接,则所有这些会话均会将记录插入同一日志文件数据表或者从同一日志文件数据表中删除记录。
何时使用共享日志文件
如果各个客户端和用户均使用不同的数据库用户帐户连接,则使用共享的日志文件。
可能不想使用共享日志文件的情况
如果使用相同的登录帐户建立了多个连接(例如,如果向 ArcGIS Server 发布要素服务,则将使用相同登录帐户建立多个连接),则可能不会想要使用共享日志文件。如果针对同一要素服务运行属性查询的用户过多,则将导致 SDE_LOGFILE_DATA 表争用和等待时间更长。在这些情况下,需要使用基于会话的日志文件。
为共享日志文件创建的表
用于该选项的日志文件表是 SDE_LOGFILES 和 SDE_LOGFILE_DATA。这些日志文件表在用户首次做出超出选择阈值的选择时在连接用户的方案中创建。
SDE_LOGFILES 存储所创建的每个选择集(日志文件)的相关信息。此表中的 logfile_name 列和 logfile_id 列唯一地标识了日志文件的名称,而 logfile_id 列则将日志文件记录链接到 SDE_LOGFILE_DATA 表。SDE_LOGFILE_DATA 表包含所选记录的 logfile_data_id 和要素标识符。
选择集被清除后,会立即删除所有记录,以防止 SDE_LOGFILE_DATA 表变得过大。SDE_LOGFILES 表将在会话结束时被截断。SDE_LOGFILE_DATA 和 SDE_LOGFILES 将保留在用户的方案中。
使用共享日志文件的权限
由于日志文件表由连接用户所有,因此该用户必须具有可在其中创建表的方案。在地理数据库中,方案名称必须与用户名称相同。如果用户不具有可在其中创建表的匹配方案,则当该用户执行需要日志文件表的操作时(例如,启动编辑会话或创建大于特定客户端应用程序阈值大小的选择集),将收到一条错误消息。
使用 PostgreSQL 中的共享日志文件表需要以下权限:
- CONNECT
- 对用户自己的方案的 USAGE 权限
- 对用户自己的方案的 CREATE 权限
请注意,该方案的 AUTHORIZATION 权限将自动授予 USAGE 和 CREATE 权限。然而,如果不希望用户创建表,可不授予 AUTHORIZATION 权限。而是授予每位用户对其方案的 USAGE 和 CREATE 权限,这样在创建共享日志文件表后便可撤消 CREATE 权限。必须保留 USAGE 权限,以便用户能在以后写入日志文件表。
例如,Ian 是一位城市规划者,他通常只从地理数据库中选择数据,进行一些与其工作相关的分析。因此,他被视为只读用户。但对于 Ian,要创建需要存储选择集的 SDE_LOGFILES 和 SDE_LOGFILE_DATA 表,他需要对自己的方案具有权限。
sde 用户不会授予 Ian 无限创建表的权限,而是为 Ian 创建方案并临时向其授予方案的 CREATE 和 USAGE 权限。然后 sde 用户将要求 Ian 登录至 ArcMap 的地理数据库,并选择 101 个或更多要素。此操作将在方案中创建必要表。创建表后,sde 用户将撤消 Ian 的 CREATE 权限。
共享日志文件表和索引的可选存储控制
DBTUNE 表的 LOGFILE_DEFAULTS 关键字下有许多控制日志文件表在数据库中的存储方式或存储位置的参数。要使用共享日志文件,无需设置这些参数;但如果要更改 SDE_LOGFILES 和 SDE_LOGFILE_DATA 表和索引在数据库中的存储方式,则可对这些参数进行设置。
对于 PostgreSQL,使用以下参数:
- LD_INDEX_ALL
- LD_STORAGE
- LF_INDEX_ID
- LF_INDEX_NAME
- LF_STORAGE
有关详细信息,请参阅 PostgreSQL 配置参数。
基于会话的日志文件
基于会话的日志文件数据表专用于单个会话,并可能含有多个选择集(日志文件)。所登录的每个会话都需要一组表以供选择。
何时使用基于会话的日志文件
如果用相同的登录信息与地理数据库建立了多个并发连接,则需要使用基于会话的日志文件。例如,如果许多服务均参考地理数据库内的数据,则可能需要使用基于会话的日志文件。
您何时可能不想使用基于会话的日志文件
如果存在连接到数据库的只读用户,则不能使用基于会话的日志文件。
会话结束时,会话表将从用户的方案中删除。这意味着会话表在需要时必须重新创建;因此,用户必须拥有创建表的权限才能使用基于会话的日志文件表。
为基于会话的日志文件创建的表
将创建三个表:SDE_LOGFILES、SDE_LOGFILE_DATA 和 SDE_SESSION<SDE_ID>。事实上,SDE_LOGFILE_DATA 不在这种情况下使用,但会自动创建出来。SDE_LOGFILES 表存储选择集的相关信息以及附加到 SDE_SESSION 表名称的会话标签 <SDE_ID>。SDE_SESSION 表存储所选集的要素标识符,以及日志文件的 ID。
SDE_LOGFILES 和 SDE_LOGFILE_DATA 表保留在地理数据库中。当连接中的应用程序断开连接时,SDE_LOGFILES 表将被截断。当连接中的应用程序删除日志文件时,SDE_SESSION<SDE_ID> 表将被截断;会话断开连接时,此表将被删除。
使用基于会话的日志文件的权限
基于会话的日志文件由启动该连接会话的用户所有。这意味着用户需要拥有创建所需数据库对象的权限。
要使用 PostgreSQL 中基于会话的日志文件,所有用户需要具有以下权限:
- CONNECT
- 对用户自己方案的 AUTHORIZATION 权限(AUTHORIZATION 将自动授予 USAGE 和 CREATE 权限)
基于会话的日志文件表和索引的可选存储控制
sde_dbtune 表的 LOGFILE_DEFAULTS 关键字下的许多参数控制着在数据库中存储日志文件表的方式和位置。不设置这些参数也可使用基于会话的日志文件,但如果要更改 SDE_LOGFILES、SDE_LOGFILE_DATA 和 SDE_SESSION 表和索引在数据库中的存储方式,则可对这些参数进行设置。
对于 PostgreSQL,使用以下参数:
- LD_INDEX_ALL
- LD_STORAGE
- LF_INDEX_ID
- LF_INDEX_NAME
- LF_STORAGE
- SESSION_INDEX
- SESSION_STORAGE
有关这些参数的说明,请参阅 PostgreSQL 配置参数。
归 sde 用户所有的日志文件池
地理数据库管理员可以创建可由其他用户检出和使用的基于会话的日志文件池。共享日志文件不能从日志文件池中检出。
使用日志文件池可以避免向用户授予在数据库中创建对象所需的权限。
何时使用日志文件池
如果无法向用户授予他们在自己的方案中创建日志文件表的权限,则可以使用日志文件池。尽管如此,用户依然需要拥有创建会话或连接到数据库的权限。
可能不想使用日志文件池的情况
一般来说,使用日志文件池需要的维护略多一些,这是因为您必须估计所需日志文件表的数量,而且还需要调整池的大小或已使用的池的数量。请切记,日志文件池过大或过多可能会对性能产生不良影响。
为日志文件池创建的表
指定配置地理数据库日志文件表要在 sde 用户方案中创建的 SDE_LOGPOOL_<table_ID> 表的数量。例如,如果指定 5 个表,则将在 sde 方案中创建以下表:
- SDE_LOGPOOL_1
- SDE_LOGPOOL_2
- SDE_LOGPOOL_3
- SDE_LOGPOOL_4
- SDE_LOGPOOL_5
sde 方案中还有一个表 SDE_LOGFILE_POOL,该表记录了会话的 SDE_ID 和表 ID。SDE_LOGPOOL 表名称中的 <table_ID> 对应于 SDE_LOGFILE_POOL 表的 table_ID 列中的值。
每个需要日志文件表的会话均会将一个记录添加到 SDE_LOGFILE_POOL 表,并且该会话将被分配到其中一个 SDE_LOGPOOL_<table_ID> 表中。如果额外的日志文件由同一会话创建(例如,ArcMap 会话创建了一个具有 300 个记录的另一个选择集),则新的日志文件(选择集)将添加到同一个 SDE_LOGPOOL 表。
清除日志文件时,检出到会话的 SDE_LOGPOOL 表将被截断。例如,如果 ArcMap 会话中的第二个选择集被清除,则这 300 个记录也将从 SDE_LOGPOOL 表中移除,但是第一个选择集的记录仍将保留。清除第一个选择集时,这些记录将从 SDE_LOGPOOL 表中移除。
日志文件(选择集)清除时,对应的 SDE_LOGPOOL 表也将被截断。
日志文件池所需的权限
要使用池中的日志文件表,用户只需要能够连接到数据库和使用 sde 用户方案中的对象。具体而言,需要以下权限:
- CONNECT
- 对用户自己的方案的 USAGE 权限
日志文件池的可选存储控制
sde_dbtune 表的 LOGFILE_DEFAULTS 关键字下仅有一些参数控制着 SDE_LOGPOOL<SDE_ID> 表及其索引的存储方式。
PostgreSQL 中的企业级地理数据库使用 sde_dbtune 表中的 LD_STORAGE 和 LD_INDEX_ALL 参数来设置 SDE_LOGPOOL<SDE_ID> 表及其索引的存储。这两个参数还控制着 SDE_LOGFILE_DATA 表和索引的存储。有关这些参数的说明,请参阅 PostgreSQL 配置参数。
要使用日志文件表池,无需设置这些参数;但如果要更改 SDE_LOGPOOL<SDE_ID> 表和索引在数据库中的存储方式,则可对这些参数进行设置。