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操作,就是我们直接使用SQL语句的增删改对空间数据进行操作,而不是非得用ArcEngine的接口函数对数据进行操作)非常便捷地处理空间数据(处理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访问数据表后,将在客户端本地完成对数据的各种操作(像空间分析,编辑等)。
直连与服务连接下比,优势表现在:
- 直连方式较服务连接方式卸载了20%-40%的负载
- 直连方式降低了服务器端内存的需求
- 直连速度更快
- 直连配置支持FAILOVER,而服务连接不支持RAC架构
- 不需要安装SDE服务,也不需要维护SDE服务
- 实施部署方便,切换环境只需将工具与ORACLE客户端打包即可
- 使用操作系统认证方式连接到数据库,必须使用直连
劣势表现在:
- 对客户端配置要求高
- 所有的客户端都必须安装oracle客户端(或其它数据库连接驱动程序)
- 数据库客户端必须是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。
Oracle spatial与arcsde 的关系的更多相关文章
- Oracle Spatial操作geometry方法
Oracle Spatial中SDO_GEOMETRY类型: CREATE TYPE SDO_GEOMETRY AS OBJECT( SDO_GTYPE NUMBER,--几何类型,如点线面 SDO_ ...
- C#读取Oracle Spatial的sdo_geometry
oracle的sdo_geometry中内置get_wkt和get_wkb两个方法. 以数据库表geoms为例,此表中有id和geometry两列 try { OracleConnection con ...
- Oracle Spatial中SDO_Geometry详细说明[转]
在ArcGIS中通过SDE存储空间数据到Oracle中有多种存储方式,分别有:二进制Long Raw .ESRI的ST_Geometry以及基于Oracle Spatial的SDO_Geometry等 ...
- 【从翻译mos文章】oracle linux 和外部存储系统 关系
oracle linux 和外部存储系统 关系 参考原始: Oracle Linux and External Storage Systems (Doc ID 753050.1) 范围: Linux ...
- shp转oracle spatial
2010年12月1日 终于搞定了shp到oracle spatial,说下步骤和感受吧! 1 XP系统:转换工具的下载(shp2sdo.exe ):下载后把此文件复制到PATH变量包含的目录下(E: ...
- Oracle Spatial中SDO_Geometry说明
Oracle Spatial中SDO_Geometry说明 在ArcGIS中通过SDE存储空间数据到Oracle中有多种存储方式,分别有:二进制Long Raw .ESRI的ST_Geometry以及 ...
- Oracle spatial抽稀函数(SDO_UTIL.SIMPLIFY)
在使用Oracle spatial做空间查询和展示时,经常会遇到展示或者查询过慢,这时候我可以通过空间数据抽稀来优化查询展示效率. 在Oracle spatial中的抽稀函数为:SDO_UTIL.SI ...
- Oracle spatial 空间修正函数(SDO_UTIL.RECTIFY_GEOMETRY)
Oracle spatial有个空间修正函数SDO_UTIL.RECTIFY_GEOMETRY,它可以修复以下可能:a.重复节点 b.自相交 c.坐标串朝向不正确. 该函数的构造函数格式: SDO_U ...
- Oracle Spatial GIS相关研究
1.Oracle Spatial 概念相关 Oracle Spatial 是Oracle 数据库强大的核心特性,包含了用于存储矢量数据类型.栅格数据类型和持续拓扑数据类型的原生数据类型.Oracle ...
随机推荐
- 解决Android8.0系统应用打开webView报错
由于webView存在安全漏洞,谷歌从5.1开始全面禁止系统应用使用webview,使用会导致应用崩溃错误提示:Caused by: java.lang.UnsupportedOperationExc ...
- webview-h5页面刷新
问题:webview 缓存了index.html页面:浏览器缓存了子页面.解决方案:网页链接后添加时间戳. 第一:避免webView缓存]在service.vue中,给url后边添加时间戳 第二:避免 ...
- EntityFramework6 学习笔记(三)
你可能要问,我用EF不就为了避免写SQL吗?如果要写SQL我不如直接用ADO.NET得了.话虽然这么说没错,可有些时候使用EF操作数据还是有一些不方便,例如让你根据条件删除一组记录,如果按照正常的流程 ...
- 独角兽估值30亿美金,我们聊聊RPA是什么
https://www.jianshu.com/p/397ecd238ffc 缩短法定工作时间,已成国际劳动立法趋势,全球政府都曾面对这样的议题,过往企业IT也在思考这件事,开发出更好的软件系统帮助员 ...
- navicat 远程连接服务器1130,1045问题报错处理
本人踩坑多次,一开始网上搜罗,解决办法大同小异,摸索了很久才全部解决完成,小小bug真磨人啊 首先,根据我的踩坑记录,navicat 1045和navicat 1130貌似属于同一种解决方案,都是修改 ...
- 经肝药酶CYP3A4代谢的药物对比记录
罗非昔布 罗非昔布,解热镇痛抗炎药,选择性环氧化酶-2(COX-2)抑制药,有研究表明,该类药可增加心脏病发作.卒中或其他严重后果概率,不良反应为,增加心肌梗死和心脏猝死的风险,现已撤市.经肝和肠壁细 ...
- nginx配置ssl加密(单/双向认证、部分https)
nginx下配置ssl本来是很简单的,无论是去认证中心买SSL安全证书还是自签署证书,但最近公司OA的一个需求,得以有个机会实际折腾一番.一开始采用的是全站加密,所有访问http:80的请求强制转换( ...
- Go-Json操作
/** * @Author: jadeshu * @Description: * @File: main * @Version: 1.0.0 * @Date: 2019/11/7 2:33 */ pa ...
- Centos 7 更换为 阿里云 yum 源
地址: https://opsx.alibaba.com/ 操作步骤: 1.备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentO ...
- eclipse为项目设置jdk
1)在项目上右键选中properties,会进入如下界面 (2)然后点击Add Library,进入设置Library的界面 (3)选中JRE System Library进入下一界面就可以设置jdk ...