现在的位置: 首页 > 综合 > 正文

ArcSDE 日志文件表(一)

2013年10月10日 ⁄ 综合 ⁄ 共 8692字 ⁄ 字号 评论关闭

今天跟大家介绍一下ArcSDE日志文件表,一直都想好好研究一下这块,因为基本上不太受大家重视,感兴趣的用户不是很多,但是一旦出现多用户并发查询或者版本操作的时候,这个东西就显得非常重要了,而且根据不同的用户场景设定不同的日志类型,对相关效率也是很有帮助的。

注意:我们所说的ArcSDE日志文件表与经常提到的ArcSDE日志文件是不一样的,因为在ArcSDE创建库、启动服务、升级出现问题都会建议用户查看%SDEHOME%/etc里面的日志文件,这些记录了相关的日志信息,但是我们今天所阐述的是ArcSDE日志文件表。


什么是ArcSDE日志文件表

企业级地理数据库使用日志文件表来维护所选记录的列表。每次选择指定大小的内容时会将记录写入日志文件表以供应用程序之后使用,对版本化数据库执行协调或提交,或者在客户端应用程序中完成离线编辑检出。日志文件表中存储了所选要素的 ObjectID,这样便可重新显示这些要素。支持信息的更快速分析和处理。

在 ArcGIS 中,默认情况下,如果选择集包含 100 或 100 条以上记录,则会使用日志文件表。100 个要素这个阈值可在注册表中设置。可对此阈值进行更改。

注意:Esri 不建议进行此操作。没有任何证据表明更改此阈值可改善性能,对其进行更改反而可能造成性能问题。

ArcSDE 日志文件有四种类型:

  • 共享的日志文件(Shared log files)
  • 基于会话的日志文件(Session log files)
  • 独立的日志文件(Stand-alone log files)
  • 基于会话的或独立的日志文件组成的池(Pools of log file tables)

共享的日志文件(Shared log files)
-------------------------------以下为ArcGIS10.1中文帮助---------------

共享日志文件

共享日志文件将由以相同用户身份连接的所有会话所共用。如果有多个用户与同一个用户帐户连接,则所有这些会话均会将记录插入同一日志文件数据表或者从同一日志文件数据表中删除记录。

何时使用共享日志文件

如果存在多个并发会话并且每个会话都使用单个 DBMS 用户帐户进行连接,则使用共享日志文件(推荐使用这种方法建立与地理数据库的连接)。

可能不想使用共享日志文件的情况

如果使用相同的登录信息建立了多个连接(例如使用通过相同的登录信息生成多个连接的 ArcIMS 服务时),则不需要使用共享日志文件。这将导致 SDE_LOGFILE_DATA 表存在争用和等待时间。在这些情况下,需要使用基于会话的日志文件。

为共享日志文件创建的表

用于该选项的日志文件表是 SDE_LOGFILES 和 SDE_LOGFILE_DATA。这些日志文件表在用户首次做出超出选择阈值的选择时在连接用户的方案中创建。对于 ArcGIS for Desktop,这个阈值是 100 个记录。

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 将保留在用户的方案中。

使用共享日志文件的设置

在 SERVER_CONFIG 表中,需要进行下列设置来创建共享日志文件表:

  • MAXSTANDALONELOGS = 0
  • ALLOWSESSIONLOGFILE = FALSE
  • LOGFILEPOOLSIZE = 0

用于控制共享日志文件表和索引的存储的设置

对于 Oracle,以下参数控制着共享日志文件表和索引的存储:

  • LD_INDEX_DATA_ID
  • LD_INDEX_ROW_ID
  • LD _STORAGE
  • LF_INDEXES
  • LF_STORAGE

有关这些参数的说明,请参阅 Oracle DBTUNE 配置参数

共享日志文件所需的权限

由于日志文件表由连接的用户所有,因此用户必须具有创建所需数据对象(如,表)的权限。即使用户具有地理数据库的只读访问权限或 ArcSDE 设置为只读,也同样要求这一点。如果未向用户授予这些权限,则当该用户首次创建大于特定客户端应用程序阈值大小的选择集时,将收到错误消息。不过在为用户创建 SDE_LOGFILES 和 SDE_LOGFILE_DATA 表后,地理数据库管理员可以撤消这些权限。

例如:Ian 是一位城市规划者,他通常只从地理数据库中选择数据,进行一些与其工作相关的分析。因此,他被视为只读用户。但是,如果 Ian 要在该城市的 ArcSDE 地理数据库中创建 SDE_LOGFILES 和 SDE_LOGFILE_DATA 表,则需要拥有在地理数据库中创建表的权限。

不过地理数据库管理员不会授予 Ian 无期限创建表的权限,而是决定以 Ian 的身份登录到地理数据库,做出超出选择阈值的选择,然后撤消 Ian 创建表的权限。

使用 Oracle 中的共享日志文件表需要以下权限:

  • CREATE SESSION
  • CREATE TABLE
  • CREATE SEQUENCE

-------------------------------以上为ArcGIS10.1中文帮助---------------

共享的日志文件(Shared log files)实际说明:
默认安装后,SDE用户是没有创建SDE_LOGFILES和SDE_LOGFILE_DATA表,如果SDE用户下的数据选择超过100条记录,那么系统会默认在SDE用户下创建以上两个表,而且有相关的选择ObjectID记录。
1:如果其他数据库用户,在该用户的数据选择超过100条记录,那么系统仍然会在SDE用户下的SDE_LOGFILES和SDE_LOGFILE_DATA表填写选中记录的OBJECTID信息
2:如果使用SDE用户将SDE用户下的数据利用权限分配给User以只读权限,那么以User用户进入数据连接,加载数据,选择超过100条记录,就会报如下错误
There was an error executing the query.
Unable to create logfile system tables:User perhaps lacks permissions or resource to create tables [ORA-01031:权限不足]

该错误说明,User用户没有对SDE用户表有写的权限。



上面提到了,基于共享的日志文件主要应用于不同DBMS用户的并发连接,那么如果是以相同登录信息的并发连接就可以使用基于会话的日志文件类型。


基于会话的日志文件(Session log files)
-------------------------------以下为ArcGIS10.1中文帮助---------------

基于会话的日志文件

基于会话的日志文件数据表专用于单个会话,并可能含有多个选择集(日志文件)。所登录的每个会话都需要一组表以供选择。

何时使用基于会话的日志文件

如果用相同的登录信息与地理数据库建立了多个并发连接,则需要使用基于会话的日志文件。

您何时可能不想使用基于会话的日志文件

如果存在连接到数据库的只读用户,则不能使用基于会话的日志文件。

会话结束时,会话表将从用户的方案中删除。这意味着会话表在需要时必须重新创建;因此,用户必须拥有创建表的权限才能使用基于会话的日志文件表。

为基于会话的日志文件创建的表

将创建三个表: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> 表将被截断;会话断开连接时,此表将被删除。

使用基于会话的日志文件(非池化)所需的设置

在 SERVER_CONFIG 表中,要创建所有者不是地理数据库管理员且基于会话的日志文件表,需要进行以下设置:

  • ALLOWSESSIONLOGFILE = TRUE
  • MAXSTANDALONELOGS = 0
  • LOGFILEPOOLSIZE = 0

用于控制基于会话的日志文件表和索引的存储的设置

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 DBTUNE 配置参数

基于会话的日志文件所需的权限

基于会话的日志文件由启动该连接会话的用户所有。这意味着用户需要拥有创建所需数据库对象的权限。

要使用 Oracle 中基于会话的日志文件表,所有用户需要具有以下权限:

  • CREATE SESSION
  • CREATE TABLE
  • CREATE SEQUENCE

-------------------------------以上为ArcGIS10.1中文帮助---------------


基于会话的日志文件(Session log files)实际说明:
使用ArcSDE命令将基于共享的日志模型修改为基于会话的日志模式
C:\Users\Administrator>sdeconfig -o alter -v ALLOWSESSIONLOGFILE=TRUE -i sde:oracle11g:orcl2 -u sde -p sde


ArcSDE 10.0  for Oracle11g Build 2004 Fri Jan 13 11:45:40  2012
SDE Server Configuration Tool    Administration Utility
-----------------------------------------------------
Alter SERVER_CONFIG Table. Are you sure? (Y/N): y

        Successfully altered SERVER_CONFIG Table.

然后,开启两个都是以SDE用户的ArcMap连接同一数据,然后选中超过100条记录,可以得到如下信息

C:\Users\Administrator>sqlplus sde/sde@orcl2

SQL*Plus: Release 11.2.0.1.0 Production on 星期一 10月 15 15:49:07 2012

Copyright (c) 1982, 2010, Oracle.  All rights reserved.


连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> set long 2000
SQL> select sde_id,server_id from process_information;

    SDE_ID  SERVER_ID
---------- ----------
        43       7668
        42       7824

SQL> desc sde_session_42;
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 LOGFILE_DATA_ID                           NOT NULL NUMBER(38)
 SDE_ROW_ID                                NOT NULL NUMBER(38)

SQL> select count(*) from sde_session_43;

  COUNT(*)
----------
       619

从上面可以得出,看到两个SDE进程,分别是42、43,那么sde用户下会产生两个sde_session_<SDE_ID>的表来存储相关的信息。


上面提到的存储超过100条记录都会在SDE用户下往相关表写信息,那么如果是多用户并发编辑的话,其实SDE用户下这些表的压力是很大的,那么也可以选择在不同的用户下创建自己的存储日志表,就是下面要介绍的独立日志文件类型。

独立的日志文件(Stand-alone log files)
-------------------------------以下为ArcGIS10.1中文帮助---------------

独立日志文件

独立日志文件由会话为应用程序需要存储的每个选择集创建。

何时使用独立的日志文件

如果您不需要向所有数据库用户均授予在地理数据库中创建表的权限,那么您可以使用独立的日志文件表

独立的日志文件表的一个优点是:清除选择集时,存储该选择的 SDE_LOGDATA 表将被截断而不是被删除。截断操作的执行速度要快于删除操作,这是因为前者无需发出内部结构化查询语言 (SQL) 语句。不过,还没有太多实例可以说明这种性能提升的价值高于为每个图层创建并存储单个日志文件表的成本。

何时不使用独立的日志文件

如果存在连接到数据库的只读用户,则不能使用独立的日志文件。中断连接时,SDE_LOGDATA<SDE_ID> 表将从用户的方案中删除。每次超过某个图层的选择阈值时,都必须重新创建它们。因此,如果用户将要连接到地理数据库,您不能移除这些用户的 CREATE 权限。

为独立的日志文件创建的表

对于会话创建的超出选择阈值的每个选择集,将为每个图层创建一个新的 SDE_LOGDATA<SDE_ID> 表。这么做可以消除对 SDE_LOGDATA 表的争用。不过,由于为每个选择集都会创建新表并且新表将在会话断开时删除,因此会生成大量的 CREATE TABLE 和 DROP TABLE SQL 语句。

对于每个连接,都将在用户的方案中创建 SDE_LOGFILES 和 SDE_LOGFILE_DATA 表。SDE_LOGFILES 表用于存储选择集属性,但不使用 SDE_LOGFILE_DATA 表。

当图层不再需要选择集时,SDE_LOGDATA<SDE_ID> 表将被截断。当会话断开时,将删除 SDE_LOGDATA<SDE_ID> 表。即使用户断开连接以后,SDE_LOGFILES 和 SDE_LOGFILE_DATA 表仍然保留在用户的方案中;不过,SDE_LOGFILES 表将被截断。

使用独立日志文件(非池化)所需的设置

SERVER_CONFIG 表中指定可创建的独立日志文件数量的参数为 MAXSTANDALONELOGS。MAXSTANDALONELOGS 的默认设置为 0,因此,如果要使用独立日志文件,必须将 MAXSTANDALONELOGS 数值设置为允许每个用户创建的独立日志文件数。

要创建所有者不是地理数据库管理员的独立日志文件表,需要进行以下设置:

  • MAXSTANDALONELOGS = <任何用户都可创建的 SDE_LOGDATA<SDE_ID> 表的最大数量>
  • LOGFILEPOOLSIZE = 0

在会话的配额(由 MAXSTANDALONELOGS 服务器配置参数定义)用完以前,将一直使用独立的日志文件。当用户用完独立的日志文件时,换言之,当应用程序需要同时创建的选择集(日志文件)数量超出 MAXSTANDALONELOGS 允许的值时,ArcSDE 将尝试创建基于会话的日志文件,但前提是将 ALLOWSESSIONLOGFILE 设为 TRUE。如果 ArcSDE 无法创建基于会话的日志文件,则将尝试创建共享日志文件。如果共享日志文件也无法创建并且独立的日志文件也已用完,那么 ArcSDE 将返回错误。

有关日志文件类型使用顺序的示例的信息,请参阅 ArcSDE 日志文件按照何种顺序使用?

用于控制独立日志文件表和索引的存储的设置

DBTUNE 表的 LOGFILE_DEFAULTS 关键字下有许多控制日志文件表在数据库中的存储方式或存储位置的参数。不设置这些参数也可使用独立日志文件,但如果要更改 SDE_LOGFILES、SDE_LOGFILE_DATA 和 SDE_LOGDATA 表和索引在数据库中的存储方式,则可对这些参数进行设置。

对于 Oracle,以下参数控制着独立日志文件表和索引的存储:

  • LD_INDEX_DATA_ID
  • LD_INDEX_ROW_ID
  • LD_STORAGE
  • LF_INDEXES
  • LF_STORAGE
  • SESSION_INDEX
  • SESSION_STORAGE

有关这些参数的说明,请参阅 Oracle DBTUNE 配置参数

独立日志文件所需的权限

使用独立的日志文件表的用户帐户必须拥有创建所需数据库对象的权限。与共享日志文件不同的是,日志文件表创建完以后,您无法撤消用户的权限,这是因为每次会话创建一个足够大的选择时,每个图层都将创建一个新的用户所有的表。

要使用 Oracle 中的独立日志文件表,所有用户需要具有以下权限:

  • CREATE SESSION
  • CREATE TABLE
  • CREATE TRIGGER
  • CREATE SEQUENCE
  • CREATE PROCEDURE

-------------------------------以上为ArcGIS10.1中文帮助---------------


独立的日志文件(Stand-alone log files)实际操作:
将ArcSDE日志模式转换为独立的日志模式
C:\Users\Administrator>sdeconfig -o alter -v MAXSTANDALONELOGS=3 -i sde:oracle11g:orcl2 -u sde -p sde


ArcSDE 10.0  for Oracle11g Build 2004 Fri Jan 13 11:45:40  2012
SDE Server Configuration Tool    Administration Utility
-----------------------------------------------------
Alter SERVER_CONFIG Table. Are you sure? (Y/N): y

        Successfully altered SERVER_CONFIG Table.


C:\Users\Administrator>sdeconfig -o alter -v ALLOWSESSIONLOGFILE=FALSE -i sde:oracle11g:orcl2 -u sde -p sde


ArcSDE 10.0  for Oracle11g Build 2004 Fri Jan 13 11:45:40  2012
SDE Server Configuration Tool    Administration Utility
-----------------------------------------------------
Alter SERVER_CONFIG Table. Are you sure? (Y/N): y

        Successfully altered SERVER_CONFIG Table.

从数据库的角度可以查看

SQL> select sde_id,server_id from sde.process_information;

    SDE_ID  SERVER_ID
---------- ----------
        51       5316
        49       1856


SQL> select count(*) from bbb.sde_logdata49_1;

  COUNT(*)
----------
      1004

SQL> select count(*) from sde.sde_logdata51_1;

  COUNT(*)
----------
       367

从上图可以看出,如果使用独立日志模式,那么在加载相关用户下的数据进行超过100条记录的选中,就会在该用户下创建相关的表,而且根据用户的连接进程(SDE_ID)来创建不同的表。

其实大部分情况也可以使用最后一种日志模式,基于会话的或独立的日志文件组成的池来代替

ArcSDE 日志文件表(二) - ArcGIS技术研究 - 博客频道 - CSDN.NET http://t.cn/zT8wk60

-------------------------------------------------------------------------------------------------------
版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
------------------------------------------------------------------------------------------------------

抱歉!评论已关闭.