怎么在ArcSDE中使用Oracle分区表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么在ArcSDE中使用Oracle分区表相关的知识,希望对你有一定的参考价值。

参考技术A 通过上面的文章咱们可能得出,假设心愿Oracle分区后,索引也停止相应的分区,需求在DBTUNE减少相应的要害字ST_INDEX_PARTITION_LOCALB_STORAGE "PCTFREE 0 INITRANS 4 PARTITION BY RANGE (OBJECTID) ( PARTITION CUS_PART1 VALUES LESS THAN (2000) TABLESPACE SDE, PARTITION CUS_PART2 VALUES LESS THAN (6000) TABLESPACE ESRI ) " ST_INDEX_PARTITION_LOCAL "TRUE"这样重新导入到ArcSDE外面,而后导入数据数据的索引就存储在和数据相应的表空间外面了依照上面的信息,将数据导入进ArcSDE,可能看到Sde用户新增了一个对于分区索引的办理表sql">SQL> desc st_partition_index 称谓能否为空必修 类型 ----------------------------------------- -------- ---------------------------- OWNER NVARCHAR2(32) TABLE_NAME NVARCHAR2(32) COLUMN_NAME NVARCHAR2(32) GEOM_ID NUMBER(38) PARTITION_NAME NVARCHAR2(32) GRID SP_GRID_INFO VERSION NUMBER(38) STATUS NVARCHAR2(10) UNIQUENESS VARCHAR2(9) DISTINCT_KEYS NUMBER BLEVEL NUMBER LEAF_BLOCKS NUMBER CLUSTERING_FACTOR NUMBER DENSITY NUMBER NUM_ROWS NUMBER NUM_NULLS NUMBER SAMPLE_SIZE NUMBER LAST_ANALYZED DATE USER_STATS VARCHAR2(3) MINX NUMBER MINY NUMBER MAXX NUMBER MAXY NUMBER咱们检查这个表外面的信息sql">SQL> select table_name,Partition_name,Geom_id,column_name from st_partition_index; TABLE_NAME PARTITION_NAME GEOM_ID COLUMN_NAME --------------------------------------------- ------------------------------------------ ZD CUS_PART1 11 SHAPE ZD CUS_PART2 11 SHAPE 盘问一下相干的信息能否在对应的表空间外面sql">SQL> select objectid,rowid from zd where objectid=1999 or objectid=2000; OBJECTID ROWID ---------- ------------------ 1999 AAASttAAGAAABX2AAI 2000 AAAStuAAFAAAACOAAA sql">SQL> select sp_id from s11cus_part1 where rownum<2; SP_ID ------------------ AAASttAAGAAABXcAAO sql">SQL> select sp_id from s11cus_part2 where rownum<2; SP_ID ------------------ AAAStuAAFAAAADnAAH咱们可能看到AAAStt和AAAStu是在差异的表空间外面。对于空间索引分区Esri提供了如下的协助An ST_Geometry st_spatial_index domain index can be built to have discrete index partitions that correspond to each partition for range-partitioned tables. This type of index is called a local domain index, as opposed to a global domain index, which has no index partitions. A local domain index is equally partitioned with the underlying table. For each partition: all keys in a local domain index refer to rows stored in its corresponding table partition. St_spatial_index local domain indexes can be created only for range-partitioned, heap-organized tables. Local domain indexes cannot be built for hash-partitioned tables or Indexed Organized Tables. 通过第三段咱们可能看出,Esri的空间索引的当地区索引只反对范畴分区和堆组织表,不反对哈希分区或许索引组织表。最近有用户问怎样操作SQL语句之间创建ArcSDE的索引并且这些索引页停止分区,大家可能参考以下命令假设用户已经定义好相干的DBTUNE文件,并且也减少了对于ST_INDEX_PARTITION_LOCAL,创建索引可能被动根据要害字调配的存储。假设需求手动创建,创建索引可能操作如下命令SQL> CREATE INDEX st_shape_index 2 ON parcels (shape) 3 INDEXTYPE IS sde.st_spatial_index 4 PARAMETERS('st_srid=1 st_grids=280') 5 LOCAL; Index created.在创建进程中,假设你的ST-SRID设置的差池,会揭示如下舛误SQL> CREATE INDEX st_zd_shape_index ON ZD (shape) INDEXTYPE IS sde.st_spatial_index PARAMETERS('st_srid=5 st_grids=280') LOCAL; CREATE INDEX st_zd_shape_index ON ZD (shape) INDEXTYPE IS sde.st_spatial_index PARAMETERS('st_srid=5 st_grids=280') LOCA L * 第 1 行呈现舛误: ORA-29855: 执行 ODCIINDEXCREATE 例行顺序时出错 ORA-20083: Parameter ST_SRID 5 does not exist in ST_SPATIAL_REFERENCES table. ORA-06512: 在 "SDE.SPX_UTIL", line 938 ORA-06512: 在 "SDE.ST_DOMAIN_METHODS", line 1312假设需求删除索引会报如下舛误SQL> drop index ST_SHAPE_INDEX; drop index ST_SHAPE_INDEX * 第 1 行呈现舛误: ORA-29952: 无奈对标记为 LOADING 的域索引分区收回 DDL 命令 操作如下方法即可删除SQL> drop index ST_SHAPE_INDEX force; 索引已删除。其实不需求检查ST_SPATIAL_REFERENCES表,咱们只要求检查st_geometry_columns表的因素类对应的SRID即可SQL> select SRID from st_geometry_columns where table_name='ZD'; SRID ---------- 300002设置好相应的SRID再次创建SQL> CREATE INDEX st_zd_shape_index ON ZD (shape) INDEXTYPE IS sde.st_spatial_index PARAMETERS('st_srid=300002 st_grids= 280') LOCAL; 索引已创建。

假设用户的索引想存储在其余磁盘的表空间,也可能操作如下命令:SQL> CREATE INDEX st_shape_index 2 ON parcels (shape) 3 INDEXTYPE IS sde.st_spatial_index 4 LOCAL (PARTITION quarter1 PARAMETERS('st_srid=1 st_grids=280 TABLESPACE q1_idx 5 STORAGE (INITIAL 128K NEXT 128K MINEXTENTS 1 MAXEXTENTS 256 PCTINCREASE 0)'), 6 PARTITION quarter2 PARAMETERS('st_srid=1 st_grids=280 TABLESPACE q2_idx 7 STORAGE (INITIAL 128K NEXT 128K MINEXTENTS 1 MAXEXTENTS 256 PCTINCREASE 0)'), 8 PARTITION quarter3 PARAMETERS('st_srid=1 st_grids=280 TABLESPACE q3_idx 9 STORAGE (INITIAL 128K NEXT 128K MINEXTENTS 1 MAXEXTENTS 256 PCTINCREASE 0)'), 10 PARTITION quarter4 PARAMETERS('st_srid=1 st_grids=280 TABLESPACE q4_idx 11 STORAGE (INITIAL 128K NEXT 128K MINEXTENTS 1 MAXEXTENTS 256 PCTINCREASE 0)'), 12 PARTITION qunknown PARAMETERS('st_srid=1 st_grids=280 TABLESPACE qunknown_idx 13 STORAGE (INITIAL 128K NEXT 128K MINEXTENTS 1 MAXEXTENTS 256 PCTINCREASE 0)')); Index created.本回答被提问者和网友采纳

Oracle spatial与arcsde 的关系

有一些同事问过我下面这些问题:

  • 我们用了oracle spatial sdo_geometry,是不是没用arcsde?
  • 我们到底是使用oracle spatial还是arcsde,有点懵!
  • 执行了create enterprise geodatabase是不是就表示使用了arcsde?那这个动作到底是做什么呢?
  • 我们没用arcsde的服务,为什么你还说我们用了arcsde呢?
  • ……

因为问得人很多,我打算将我的理解写下来,与大家交流,以收抛砖引玉之效。

1、什么是ARCSDE

  SDE的全称是spatial database engine(空间数据引擎),之所以称之为引擎,是因为所有的空间数据IO都需要通过它来管理。它属于中间件技术,位于客户端和数据库之间,其本身并不能够存储空间数据(存储是由数据库完成),它的作用可以理解为将数据库中的对象(表、视图等)抽象成上层GIS应用可以认识的概念,例如feature、feature class等。

技术分享

 

 

 

                                                                                                                                          

 

2、ARCSDE是怎么工作的

  ARCSDE保存了一系统数据库对象,用于管理空间信息,这些对象统称为资料档案库(Repository)。以基于ORACLE数据库的ARCSDE为例,资料档案库包含SDE用户下的数据字典表、存储过程、以及数个.dll文件。数据字典表,用以存储要素类、要素类字段、要素类投影、要素类范围等元数据信息,而存储过程和.dll用于实现对空间数据的GIS运算和操作,例如用于计算polygon周长的方法。

3、空间数据是如何存储的

  上文已经说过,ARCSDE并不能够存储空间数据,数据都是存储在RDBMS(关系型数据库)(实际上并不限于RDBMS,ARCSDE也支持非关系型数据库和HADOOP。但现在只谈它与ORACLE SPATIAL的关系,因此,此处说RDBMS)中。以矢量数据为例,它既可以以二近制形式存储为一个BLOB对象,也可以使用RDBMS或ARCSDE提供的矢量数据类型。

  最初的时候,即ARCSDE和RDBMS还未提供矢量数据类型之前,所有的数据都是以序列化的二近制形式存储,在数据库里表现为一个BLOB字段。

  以BLOB字段的形式存储,虽然解决了存储的问题,但却没能很好地利用RDBMS的能力。例如,它不能用SQL操作(所谓SQL操作,就是与我们COM的ArcGISEngine对比就是我们不需要使用ArcGIS接口对数据进行操作,我们直接使用SQL语句的增删改对空间数据进行操作)非常便捷地处理空间数据(处理BLOB需要反序列化)。为了更好地利用RDBMS的资源,从ARCSDE 9.2开始,提供了一个结构化的数据类型——ST_GEOMETRY。由于数据是结构化的,所以通过SQL查询空间数据即可了解数据内容,通过SQL即可非常便捷地对数据进行各种操作(例如更新)。这样的好处是显示易见的,它突破了ARCGIS的种种障碍限制,在特定的环境下特别是用户的数据都是简单的点线面,并且业务只有相关的编辑方面,无需SDE版本要求时,SQL操作将非常便捷直观。这些操作其实也降低了操作人员的GIS门槛,但是切记:高便利与高风险是时刻并存的

  除此之外,RDBMS也纷纷推出了自定义的空间数据类型,例如ORACLE的SDO_GEOMETRY。它的作用与ST_GEOMETRY类似。

4、使用ARCSDE的连接方式

  在ARCSDE8.1之前,通过ARCSDE连接数据库是一种三层模型。从8.1之后,ArcSDE提供了两种数据联结架构,即两层和三层模型。两层模型即直连、三层模型即ARCSDE服务连接。

  ARCSDE服务连接模型如下图:

技术分享

      在ArcSDE Server上运行着1个giomgr进程和多个gsrvr进程。

    giomgr即ArcSDE服务器管理进程,该进程一直存在,负责监听用户连接请求,分配相应的gsrvr管理进程,进行空间数据字典的维护。

    gsrvr属于这样一种进程:当有客户端请求数据库连接,由giomgr分配名为gsrvr的独立进程来全面负责客户机与服务器的元数据通信。

    当使用ArcSDE服务连接时,需要在ArcSDE Server安装RDBMS Client software。在此种连接模式下,客户端通过SDE服务访问数据表后,ArcSDE Server服务器端完成对数据的各种操作,再把操作结果返回客户端。

    ARCSDE直连模型如下图:

技术分享

  与ARCSDE服务连接方式不同,gsrvr进程内嵌到客户端,不再需要服务器端ArcSDE服务。ArcSDE直连驱动和ArcSDE服务采用相同的代码构建。不同的是,ArcSDE直连驱动是一系列动态链接库dll,安装和运行于客户端应用程序的进程空间内;而ArcSDE服务是可执行程序,运行于服务器端。

    当使用ArcSDE直连时,需要在客户端安装dbms client software。在此种连接模式下,通过SDE访问数据表后,将在客户端本地完成对数据的各种操作(像空间分析,编辑等)。

      直连与服务连接下比,优势表现在:

  1. 直连方式较服务连接方式卸载了20%-40%的负载
  2. 直连方式降低了服务器端内存的需求
  3. 直连速度更快
  4. 直连配置支持FAILOVER,而服务连接不支持RAC架构
  5. 不需要安装SDE服务,也不需要维护SDE服务
  6. 实施部署方便,切换环境只需将工具与ORACLE客户端打包即可
  7. 使用操作系统认证方式连接到数据库,必须使用直连

     

    劣势表现在:

  1. 对客户端配置要求高
  2. 所有的客户端都必须安装oracle客户端(或其它数据库连接驱动程序)
  3. 数据库客户端必须是32位

 

注意:自ESRI提供直连方式后,ESRI一直推荐使用直连方式。另外,从ARCGIS 10.3之后,不再提供SDE服务(即不再提供sdeservice工具(从ARCGIS 10.1开始,ESRI官方推荐以直连方式连接SDE,因此在SDE安装时不再自动安装SDE服务,需要手动用sdeservice工具来创建服务 ))。

5、ORACLE SPATIAL是什么

  ORACLE SPATIAL提供了一套 SQL 方案和函数,用来存储、检索、更新和查询数据库中的空间要素集合。主要由几何数据类型,空间索引机制,一套操作函数,管理工具组成。

  对ORACLE数据库而言,实际上ORACLE SPATIAL可以全面取代ArcSDE, ArcSDE提供的能力它几乎都提供了。它除了提供了数据类型SDO_GEOMETRY,还提供了大量的GIS应用API,还实现了渲染与可视化,只是在实现方式上,功能的丰富性、稳定性上与ARCSDE有所不同。

6、Oracle Spatial+ArcSDE是一种怎样的组合

  当前,我们很多项目的确是同时使用了Oracle Spatial和ArcSDE。按照第5个问题的回答,我们有一套东西就够了,为什么这里它们同时都被使用了?

  在Oracle Spatial+ArcSDE这种应用中,Oracle Spatial提供矢量数据类型,即SDO_GEOMETRY,而ArcSDE负责将使用SDO_GEOMETRY数据类型的表在SDE Repository中注册,只有注册后,应用层的ArcMap、ArcEngine才能认识它。因为对于ArcMap、ArcEngine等应用程序来讲,它没有数据库中表的概念,它只有geodatabase中定义的feature、feature class、feature dataset这些概念。换句话说,之所以要用SDE Repository,是因为我们的项目是基于ArcEngine开发的。如果项目不基于ArcEngine开发,而是使用ORACLE SPATIAL提供的SDK,那么我们完全可以不用SDE Repository,也就完全不需要使用ARCSDE,而是全面使用ORACLE SPATIAL来实现各种GIS操作、渲染与可视化。

7、create enterprise geodatabase到底在做什么

  在ARCGIS 10.0(包括10.0)之前,在安装完ARCSDE软件之后,会跳转到post Installation界面。在这里,可以选择创建用户、创建表空间、安装SDE Repository、创建SDE服务等。如下图:

技术分享

(当选择“complete”时,创建用户、创建表空间、安装SDE Repository、创建SDE服务四个步骤均会执行)

  10.1之后,不再需要安装ARCSDE软件,创建SDE用户、SDE表空间、安装SDE Repository都由create enterprise geodatabase功能完成。与10.1之前相比,默认不再创建SDE服务,SDE服务需要用sdeservice工具手动创建(ARCGIS 10.3不再提供该工具)。

8、没有SDE Repository,通过arcmap为何仍然能够看到feature class

  从ARCMAP 10.1开始,如果一个带SDO_GEOMETRY数据类型的表未在SDE Repository中注册,甚至没有SDE Repository,也是可以浏览的。此时ARCMAP会根据矢量数据类型,去读取ORACLE SPATIAL的Repository(元数据表),即user_sdo_geom_metadata,只要能够获取到该图层在oracle spatial中的元数据信息,也可以在arcmap中浏览。但此时也仅限于浏览,因为没有SDE Repository,sdo geodatabase模型的高级功能,如拓扑构建、版本管理等特性将无法使用。

9、Oracle Spatial+ArcSDE算不算用了ARCSDE

      算,只要使用SDE Repository就等于说使用了ArcSDE。

以上是关于怎么在ArcSDE中使用Oracle分区表的主要内容,如果未能解决你的问题,请参考以下文章

Oracle spatial与arcsde 的关系

ArcSDE账户频繁被锁定(Oracle显示12560协议适配器错误)

ArcSDE创建企业级数据库

ArcGIS Engine连接ArcSDE SQL Server(获得所有SDE图层)

oracle 大表怎么建索引

oracle中怎么删除分区表?