Oracle Spatial DBTUNE 存储参数

因为 Oracle Spatial 的存储参数不同于 ArcSDE 使用的其他 Oracle 数据库的存储参数,所以本文介绍了有关 Oracle Spatial 的存储参数的使用方法的描述和示例。

创建新业务表

ArcSDE 使用 B_STORAGE、B_INDEX_ROWID 和 B_INDEX_USER 存储参数来存储业务表及业务表的非空间索引。

创建新要素类的 Oracle Spatial 元数据

数据库视图 USER_SDO_GEOM_METADATA 是 Oracle Spatial 而不是 ArcSDE 的一部分。它包含与用户拥有的现有表中 SDO_GEOMETRY 列有关的元数据。每个用户都拥有其自己的 USER_SDO_GEOM_METADATA 视图。要进行索引和查询,表的所有者必须为 USER_SDO_GEOM_METADATA 中的每个 SDO_GEOMETRY 列记录元数据。创建要素类的 ArcSDE 客户端会为要素类选择相应的元数据。通常,这些客户端会接受与 DBTUNE 表中参数组对应的配置关键字。

用于控制新 Oracle Spatial 要素类的元数据的存储参数如下所示:

SDO_DIMNAME_<n> SDO_LB_<n> SDO_UB_<n> SDO_TOLERANCE_<n>	 SDO_SRID

如果创建要素类期间指定的配置关键字包含设置为有效坐标参考系的 SDO_SRID 参数,则即使客户端提供了其他坐标参考系,也会使用 SDO_SRID 值并将其写入 USER_SDO_GEOM_METADATA 视图中。

Oracle Spatial 允许 x/y、x/y/z、x/y/m(度量值)或 x/y/z/m 组合形式的二维、三维或四维的要素几何。通过这些存储参数,ArcSDE 可用于指定每个维度的元数据。某些参数名称中的 <n> 应使用与维度数对应的某个数字(1、2、3 或 4)进行替换。如果不提供这些存储参数,则创建要素类的 ArcSDE 客户端应用程序会为每个维度确定名称、上限和下限(范围)以及容差。

注意注意:

Oracle Spatial 还允许 x/y/m/z 形式的要素几何;但是它不会对 ArcSDE 使用这些要素几何。

创建空间索引

DBTUNE 参数 SDO_INDEX_SHAPE 决定 Oracle Spatial 创建空间索引的方式。在将 CREATE INDEX 语句提交到 Oracle 之前,ArcSDE 会将此参数的内容(配置字符串)追加到此语句中。配置字符串会插入到 SQL 语句中的 PARAMETERS 关键字之后。例如:

CREATE INDEX MY_SP_INDEX ON MY_SP_TABLE(SHAPE)
INDEXTYPE IS MDSYS.SPATIAL_INDEX PARAMETERS ( <configuration string is inserted here> );

配置字符串是一串用双引号引起来的字符串,其中包含一系列“参数 = 值”形式的元素。在配置字符串中可以指定许多参数。要了解 Oracle Spatial 索引参数以及它们的交互方式,请参阅《Oracle Spatial 用户指南和参考》的适用部分

请注意空间索引配置字符串与业务表配置字符串中物理存储参数的差别(例如在 B_STORAGE 中指定)。其中一种差别是由于 Oracle 对这些参数出现在 SQL 语句中的方式的设定不同。Oracle 语句之间的格式互不相同,因此配置字符串的格式也不相同。还有,在用于创建表的物理存储参数中,只有一部分可用于创建空间索引。

B_STORAGE	"TABLESPACE ORSPBIZ PCTFREE 10 INITRANS 4 STORAGE(INITIAL 512000)" SDO_INDEX_SHAPE	"tablespace=ORSPIDX initial=512000"

Oracle Spatial 要素类的 DBTUNE 参数组举例

本部分讲述用于某些常见情形的 DBTUNE 参数组。(请记住,参数的分组所依据的是配置关键字。)这些示例针对的是 Oracle Spatial 要素类的存储参数。

Oracle 和 ESRI 建议 SDO_GEOMETRY 存储类型使用 R 树空间索引。在以下某些示例中将会包含 "sdo_indx_dims=2",此参数指定 R 树空间索引所要使用的维数。对于 Oracle 9.2,默认值为 2,这表示使用前两个维度(x 和 y)。对以前的 Oracle 版本,默认值为 USER_SDO_GEOM_METADATA 中记录的维数。在除 x 和 y 之外的其他维度上创建 R 树空间索引会出现各种问题。例如,Oracle 不支持在度量值维度上创建 R 树索引。如果要创建 R 树空间索引并且使用的是 Oracle 9.2 之前的版本,那么建议您始终包括此参数。

如果默认情况下未使用 Oracle Spatial,则可以通过创建一个简单的参数组来创建 Oracle Spatial 要素类(几乎全部采用默认设置)。表和索引通常会在用户的默认表空间中使用默认物理存储参数进行创建,除非特意指定,否则将采用 DEFAULTS 参数组。空间索引是二维的 R 树。

##SDO_GEOMETRY GEOMETRY_STORAGE		"SDO_GEOMETRY" SDO_INDEX_SHAPE	"sdo_indx_dims=2" UI_TEXT	"Oracle Spatial: default settings" END

对于 Oracle Spatial,如果经常使用特定的空间参考标识符 (SRID) - 例如大地 SRID 8307(纬度/经度 WGS84)- 来加载数据,则可以创建之前参数组的扩展版本。一般不必指定上限、下限和容差,除非要使所有要素类的 x 维度和 y 维度具有相同的元数据。如果要使用相同要素数据集中的要素类,那么这会非常有用。另外,此示例表明,在将任何反向多边形边界发送到 ArcSDE 客户端之前,都会对它们进行重新排序。

注意注意:

对于 Oracle9i 大地数据,范围以十进制度为单位来指定,而容差则以米为单位来指定。

##SDO_GEOMETRY_8307 GEOMETRY_STORAGE		"SDO_GEOMETRY" SDO_INDEX_SHAPE	"sdo_indx_dims=2" SDO_SRID	8307 SDO_DIMNAME_1	"Lon" SDO_LB_1	-180.000000 SDO_UB_1	180.000000 SDO_TOLERANCE_1	0.05 SDO_DIMNAME_2	"Lat" SDO_LB_2	-90.000000 SDO_UB_2	90.000000 SDO_TOLERANCE_2	0.05 UI_TEXT	"Oracle Spatial: WGS84" END

以下示例可用于通过 R 树空间索引,将要素类加载到表空间 ORSPBIZ 中。R 树空间索引将创建在表空间 ORSPIDX 中。正在加载数据的 ArcSDE 客户端会确定元数据的值。

##SDO_GEOMETRY_ORSPBIZ GEOMETRY_STORAGE		"SDO_GEOMETRY" B_STORAGE	"TABLESPACE ORSPBIZ" SDO_INDEX_SHAPE	"tablespace=ORSPIDX sdo_indx_dims=2" UI_TEXT	"Tablespace ORSPBIZ / ORSPIDX" END

以下示例可用于通过具有固定大小的 6 级切片级别(镶嵌级别)的四叉树空间索引来加载要素类。空间索引会创建在表空间 ORSPIDX 中。

提交间隔对于四叉树索引很重要,但是对于 R 树空间索引却可以忽略不计。它指明了在提交索引数据之前所处理的业务表记录的数量。没有它,会在提交索引数据之前对所有业务表记录进行处理。这将导致在对拥有许多记录的表进行索引时产生问题。

注意注意:

参数 sdo_commit_interval 非常重要,即使未将它指定为 SDO_INDEX_SHAPE 参数的一部分,ArcSDE 也会在 Oracle Spatial 表的 SQL 索引语句中自动添加它。此参数被设置为 1,000。

##SDO_GEOMETRY_QT_6 GEOMETRY_STORAGE		"SDO_GEOMETRY" SDO_INDEX_SHAPE	"tablespace=ORSPIDX sdo_level=6 sdo_commit_interval=1000" END

当您设计自己的参数组时,可能需要添加参数以支持其他地理数据库结构,例如几何网络或 terrain。也可以通过设置 DEFAULTS 参数组中的参数来满足这些要求。

例如,如果在创建拓扑、网络或 terrain 时,将 DEFAULTS 关键字的 GEOMETRY_STORAGE 参数设置为 SDO_GEOMETRY,则将会使用这些结构类型的默认复合关键字。由于默认复合关键字不指定 GEOMETRY_STORAGE,所以将会使用 DEFAULTS GEOMETRY_STORAGE;此示例中使用 SDO_GEOMETRY。

如果 DEFAULTS GEOMETRY_STORAGE 关键字设置为除 SDO_GEOMETRY 之外的其他值,但是您又想创建使用 SDO_GEOMETRY 存储类型的结构,例如 terrain,这时就需要创建一组新的 terrain 关键字以使用 SDO_GEOMETRY 存储类型专门存储 terrain。以下是此情况的一个示例,其显示效果与 dbtune.sde 文件中的效果一致:

##TERRAIN_SDO UI_TERRAIN_TEXT    "The terrain default configuration"  GEOMETRY_STORAGE  "SDO_GEOMETRY"  B_STORAGE           "PCTFREE 0 INITRANS 4 TABLESPACE ter_tblspc"                      B_INDEX_ROWID       "PCTFREE 0 INITRANS 4 TABLESPACE ter_tblspc NOLOGGING"  B_INDEX_SHAPE       "PCTFREE 0 INITRANS 4 TABLESPACE ter_tblspc NOLOGGING"  B_INDEX_USER        "PCTFREE 0 INITRANS 4 TABLESPACE ter_tblspc NOLOGGING"  END  ##TERRAIN_SDO::EMBEDDED GEOMETRY_STORAGE  "SDO_GEOMETRY"  B_STORAGE           "PCTFREE 0 INITRANS 4 TABLESPACE ter_tblspc"  B_INDEX_ROWID       "PCTFREE 0 INITRANS 4 TABLESPACE ter_tblspc NOLOGGING"  B_INDEX_SHAPE       "PCTFREE 0 INITRANS 4 TABLESPACE ter_tblspc NOLOGGING"  B_INDEX_USER        "PCTFREE 0 INITRANS 4 TABLESPACE ter_tblspc NOLOGGING"  END


3/7/2012