企业级地理数据库使用日志文件表来维护所选记录的列表。在下列情况中,记录将被写入日志文件表以供应用程序稍后使用:
- 客户端创建指定大小的选择集(ArcMap 中 100 个记录;ArcGIS Pro 中 1,000 个记录;如果从要素服务请求 ObjectID,则为 1,000 个记录)。
- 您协调或提交到版本化的地理数据库。
- 客户端应用程序检出数据以进行离线编辑。
日志文件表中存储了所选要素的 ObjectID,这样便可重新显示这些要素。支持信息的更快速分析和处理。
有三种日志文件选项:共享的日志文件、基于会话的日志文件以及由基于会话的日志文件组成的池。在本主题中,分别对每个选项进行了描述。
默认情况下,Oracle 中的地理数据库使用共享的日志文件表。大多数情况下,此选项应该足以满足要求,您还可以使用配置地理数据库日志文件表地理处理工具更改日志文件表的设置。
共享日志文件
共享日志文件将由以相同用户身份连接的所有会话所共用。如果有多个用户与同一个用户帐户连接,则所有这些会话均会将记录插入同一日志文件数据表或者从同一日志文件数据表中删除记录。
何时使用共享日志文件
如果各个客户端和用户均使用不同的数据库用户帐户连接,则使用共享的日志文件。
可能不想使用共享日志文件的情况
如果使用相同的登录帐户建立了多个连接(例如,如果向 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 将保留在用户的方案中。
共享日志文件所需的权限
由于日志文件表由连接的用户所有,因此用户必须具有创建所需数据对象(如,表)的权限。即使用户已具有地理数据库的只读访问权限,也需要这一权限。如果未向用户授予这些权限,则当该用户首次创建大于特定客户端应用程序阈值大小的选择集时,将收到错误消息。不过在为用户创建 SDE_LOGFILES 和 SDE_LOGFILE_DATA 表后,地理数据库管理员可以撤消这些权限。
例如,Ian 是一位城市规划者,他通常只从地理数据库中选择数据,进行一些与其工作相关的分析。因此,他被视为只读用户。但是,如果 Ian 要在该城市的企业级地理数据库中创建 SDE_LOGFILES 和 SDE_LOGFILE_DATA 表,则需要拥有在地理数据库中创建表的权限。
地理数据库管理员将要求 Ian 登录至地理数据库并做出超过选择阈值的选择,而不会授予 Ian 无期限创建表的权限。随后,地理数据库管理员将撤销 Ian 创建表的权限。
使用 Oracle 中的共享日志文件表需要以下权限:
- CREATE SESSION
- CREATE TABLE
- CREATE SEQUENCE
共享日志文件的可选存储控制
对于 Oracle,以下参数控制着共享日志文件表和索引的存储:
- LD_INDEX_DATA_ID
- LD_INDEX_ROW_ID
- LD _STORAGE
- LF_INDEXES
- LF_STORAGE
有关这些参数的说明,请参阅 Oracle 配置参数。
基于会话的日志文件
基于会话的日志文件数据表专用于单个会话,并可能含有多个选择集(日志文件)。所登录的每个会话都需要一组表以供选择。
何时使用基于会话的日志文件
如果用相同的登录信息与地理数据库建立了多个并发连接,则需要使用基于会话的日志文件。例如,如果许多服务均参考地理数据库内的数据,则可能需要使用基于会话的日志文件。
您何时可能不想使用基于会话的日志文件
如果存在连接到数据库的只读用户,则不能使用基于会话的日志文件。
会话结束时,会话表将从用户的方案中删除。这意味着会话表在需要时必须重新创建;因此,用户必须拥有创建表的权限才能使用基于会话的日志文件表。
为基于会话的日志文件创建的表
将创建三个表: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> 表将被截断;会话断开连接时,此表将被删除。
基于会话的日志文件所需的权限
基于会话的日志文件由启动该连接会话的用户所有。这意味着用户需要拥有创建所需数据库对象的权限。
要使用 Oracle 中基于会话的日志文件表,所有用户需要具有以下权限:
- CREATE SESSION
- CREATE TABLE
- CREATE SEQUENCE
基于会话的日志文件表和索引的可选存储控制
DBTUNE 表的 LOGFILE_DEFAULTS 关键字下有许多控制日志文件表在数据库中的存储方式或存储位置的参数。不设置这些参数也可使用基于会话的日志文件,但如果要更改 SDE_LOGFILES、SDE_LOGFILE_DATA 和 SDE_SESSION 表和索引在数据库中的存储方式,则可对这些参数进行设置。
对于 Oracle,以下参数控制着基于会话的日志文件表和索引的存储:
- LD_INDEX_DATA_ID
- LD_INDEX_ROW_ID
- LD_STORAGE
- LF_INDEXES
- LF_STORAGE
- SESSION_INDEX
- SESSION_STORAGE
有关这些参数的说明,请参阅 Oracle 配置参数。
归地理数据库管理员所有的日志文件池
地理数据库管理员可以创建可由其他用户检出和使用的基于会话的日志文件池。共享日志文件不能从日志文件池中检出。
使用日志文件池可以避免向用户授予在数据库中创建对象所需的权限。
何时使用日志文件池
如果无法向用户授予他们在自己的方案中创建日志文件表的权限,则可以使用日志文件池。尽管如此,用户依然需要拥有创建会话或连接到数据库的权限。
可能不想使用日志文件池的情况
一般来说,使用日志文件池需要的维护略多一些,这是因为您必须估计所需日志文件表的数量,而且还需要调整池的大小或已使用的池的数量。请切记,日志文件池过大或过多可能会对性能产生不良影响。
为日志文件池创建的表
指定配置地理数据库日志文件表工具要在地理数据库管理员方案中创建的 SDE_LOGPOOL_<table_ID> 表的数量。例如,如果指定 5 个表,则将在地理数据库管理员的方案中创建以下表:
- SDE_LOGPOOL_1
- SDE_LOGPOOL_2
- SDE_LOGPOOL_3
- SDE_LOGPOOL_4
- SDE_LOGPOOL_5
地理数据库管理员的方案中还有一个表 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 表也将被截断。
日志文件池所需的权限
要使用池中的日志文件表,用户只需要能够连接到数据库和使用地理数据库管理员方案中的对象。因此,使用日志文件表池仅需具有 CREATE SESSION 权限。
默认情况下,会授予所有用户 CREATE SESSION 权限;因此如果已从 PUBLIC 中撤消此权限,仅需显式授予该权限即可。
日志文件池的可选存储控制
LOGFILE_DEFAULTS 关键字下仅存在几个控制 SDE_LOGPOOL<SDE_ID> 表及其索引存储方式的参数。
在 Oracle 中的地理数据库中,LD_STORAGE、LD_INDEX_ROWID 和 LD_INDEX_DATA_ID DBTUNE 参数用于设置 SDE_LOGPOOL<SDE_ID> 表及其索引的存储。这三个参数还控制着 SDE_LOGFILE_DATA 表和索引的存储。有关这些参数的说明,请参阅 Oracle 配置参数。
要使用日志文件表池,无需设置这些参数;但如果要更改 SDE_LOGPOOL<SDE_ID> 表和索引在数据库中的存储方式,则可对这些参数进行设置。