ArcGIS10.2发布Oracle Spatial存储的Feature Service的编辑问题
环境: ArcGIS Desktop10.2 ArcGIS Server 10.2 ArcSDE10.2 Oracle 11.2.0.3 问题描述:根据ArcGIS10.2 的新特性,ArcGIS Server10.2可以发布原生的数据库存储的Feature Service。也就是说,我可以发布在没有任何ArcSDE环境下的使用Oracle Spatial存储的数据
环境:
ArcGIS Desktop10.2
ArcGIS Server 10.2
ArcSDE10.2
Oracle 11.2.0.3
问题描述:根据ArcGIS10.2 的新特性,ArcGIS Server10.2可以发布原生的数据库存储的Feature Service。也就是说,我可以发布在没有任何ArcSDE环境下的使用Oracle Spatial存储的数据的Feature Service,直接编辑Oracle Spatial数据。但是我发布完相关服务,可以进行数据删除,在进行新增数据的时候没有反应。查看浏览器的F12信息,
报:Rowbuffer creation failed.
但是,通过ArcGIS10.2连接非ArcSDE环境的数据库,也可以创建Oracle Spatial存储的数据,这个数据发布Feature Service 编辑数据没有任何问题。
帮助上如下所示:
http://resources.arcgis.com/en/help/main/10.2/index.html#/What_s_new_in_ArcGIS_10_2/016w0000005s000000/
Publishing feature services from databases Prior to 10.2, you could only publish a map service with feature access enabled (a feature service) to ArcGIS Server if the database contained a geodatabase. At 10.2, you can publish editable feature services from supported database management systems. See the ArcGIS database management system requirements for a list of supported databases and spatial data types. Beginning with ArcGIS 10.2, you should use ArcGIS Server feature services to publish data from a database rather than using ArcGIS Spatial Data Server feature services, as these have been deprecated.
延伸阅读:
也就是说,我在不用安装ArcSDE库的情况下,可以使用ArcGIS Server10.2发布Oracle(Oracle Spatial)、SQLServer(Geometry、Geography)、PostgreSQL(PostGIS Geometry)存储的Feature Service。
非常纳闷,这本来是ArcGIS10.2的新特性,怎么就不能编辑呢?
经过N天的沟通和研究,我发现了一个问题。而问题出在我自己的数据上。
我的Oracle有两个实例,一个实例安装了SDE库,另一个实例就是一个非SDE库的环境,我构造的Oracle Spatial数据,是使用ArcGIS Desktop连接SDE库,创建了SDO_Geometry的要素类,然后通过Oracle的EXP/IMP的方法导入到非SDE库,这样也能达到模拟Oracle Spatial数据存储的环境,但是正是这个数据导致了相关问题。
首先我们看一下原生的Oracle Spatial数据的结构:
SQL> desc MDSYS.SDO_GEOMETRY 名称 是否为空? 类型 ----------------------------------------- -------- ---------------------------- SDO_GTYPE NUMBER SDO_SRID NUMBER SDO_POINT MDSYS.SDO_POINT_TYPE SDO_ELEM_INFO MDSYS.SDO_ELEM_INFO_ARRAY SDO_ORDINATES MDSYS.SDO_ORDINATE_ARRAY
--------------------------------------------------------------------------------------------
Blog: http://blog.csdn.net/linghe301
Weibo: http://www.weibo.com/linghe301
--------------------------------------------------------------------------------------------
但是,在SDE环境下,通过桌面创建的Oracle Spatial数据的结构
SQL> desc wgs_p 名称 是否为空? 类型 ----------------------------------------- -------- ---------------------------- OBJECTID NOT NULL NUMBER(38) SHAPE MDSYS.SDO_GEOMETRY SE_ANNO_CAD_DATA BLOB
Tips:如果存储 CAD 和注记属性,则会向业务表中添加一个附加列。
SDO_GEOMETRY 类型无法存储 ArcGIS 存储必定支持的所有类型的几何元素。当需要存储这些元素时(由创建要素类时所指定的几何类型标记决定),ArcGIS 会向业务表中添加名为 SE_ANNO_CAD_DATA 的列。
每当 ArcGIS 检测到数据源中含有 CAD 数据时,ArcGIS 就会将 CAD 数据的简单几何表示写入 SDO_GEOMETRY 值中并将未修改的 CAD 数据写入 SE_ANNO_CAD_DATA 值中。如果数据源中不含 CAD 数据,ArcGIS 会将 SE_ANNO_CAD_DATA 值设置为 NULL。SE_ANNO_CAD_DATA 属性包含来自大量 ArcGIS 组件的数据:
- 来自 ArcSDE CAD 客户端的 AutoCAD 或 MicroStation 数据
- 来自 ArcMap 的三次样条和贝塞尔曲线等参数对象
- 来自 ArcGIS Spatial Analyst 扩展模块的表面片
我尝试是否是这个字段导致的问题,进行相关测试,该字段并不是导致该问题的原因。
而且我还发现,使用桌面在SDE环境下创建的带有Oracle Spatial存储的表的结构是
-- Create table create table SDO ( OBJECTID INTEGER not null, SHAPE MDSYS.SDO_GEOMETRY, SE_ANNO_CAD_DATA BLOB ) tablespace SDE pctfree 0 initrans 4 maxtrans 255; -- Create/Recreate indexes create unique index R95_SDE_ROWID_UK on SDO (OBJECTID) tablespace SDE pctfree 0 initrans 4 maxtrans 255;
-- Create table create table AAB ( OBJECTID INTEGER not null, SHAPE MDSYS.SDO_GEOMETRY ) tablespace ESRI pctfree 10 initrans 1 maxtrans 255 storage ( initial 64K next 1M minextents 1 maxextents unlimited ); -- Add comments to the columns comment on column AAB.OBJECTID is 'ESRI auto-incrementing'; -- Create/Recreate primary, unique and foreign key constraints alter table AAB add primary key (OBJECTID) using index tablespace ESRI pctfree 10 initrans 2 maxtrans 255 storage ( initial 64K next 1M minextents 1 maxextents unlimited );
也就是说,非SDE环境下(ArcGIS Desktop或者SQL语句)创建的OracleSpatial存储的数据可以发布要素服务,而且可以编辑,但是在SDE环境下发布的要素类,将该表迁移到非SDE环境下发布Feature Service服务,编辑就报错。
最后,解决方法:使用该功能,建议在非SDE环境下直接创建,而不能是其他迁移过来的数据。
--------------------------------------------------------------------------------------------
Blog: http://blog.csdn.net/linghe301
Weibo: http://www.weibo.com/linghe301
--------------------------------------------------------------------------------------------
其他扩展:关于Oracle Spatial
将数据以Oracle Spatial进行存储,Oracle也有一个关于投影的系统表,还有一个管理这些空间数据的系统表。
关于空间数据系统表
将 SDO_GEOMETRY 列添加到业务表时,它还会将所需的 Oracle Spatial 元数据记录添加到 USER_SDO_GEOM_METADATA 视图。此元数据包括表名称、SDO_GEOMETRY 列名称、空间参考 ID 和坐标维度信息。
关于投影的系统表,可以查看MDSYS.CS_SRS,相关的SRID信息必须在该表里面,如果没有,你的数据显示就会有相关问题。
关于Oracle Spatial的空间索引:
数据库中有好多的MDRT打头的表,而这些表的字段都是一样的,那这些表是做什么用呢?
MDRT_$: 用来存储与空间索引相关的信息。这些表与常规表不一样,不能做复制,删除,新建等。如果对这些表进行操作后,会导致其对应的空间索引无效,因此必须重新将该索引删除重建。
SQL> ALTER TABLE MDRT_1F89F$ MOVE STORAGE(INITIAL 1M) ;
ALTER TABLE MDRT_1F89F$ MOVE STORAGE(INITIAL 1M)
ORA-30967: 不允许在路径表上直接执行操作
具体如下:
不应当将MDRT表从一个表空间移动到另一个表空间:如果这样做,相应的空间索引将不可用,所有基于表索引的空间操作符都将失效。在这种情况下,恢复的唯一方法就是删除并重建空间索引。为了避免这些问题,应确保数据库管理员知道这个限制并在执行一些优化时不要移动MDRT表。可以在创建空间索引时使用tablespace参数来指定MDRT表需要的表存储空间。
不应该删除/修改MDRT表或MDRS序列:当它们与任何空间索引都不关联时(在正常的情况下,这种情况是不能发生的),可以删除它们。可以通过检查USER_SDO_INDEX_METADATA视图来确定所有的MDRT表与用户的空间索引是否相关联。
SQL> SELECT sdo_index_name, sdo_index_table, sdo_rtree_seq_name FROM USER_SDO_INDEX_METADATA;
不应当显式地导出MDRT表:当导入一个表时,如含有空间索引的customers表,相应的空间索引信息同样被导出。在导入的过程中,空间索引(和相应的MDRT表)将被重建。不需要导入或导出任何MDRT表(或MDRS序列)。
不应当将MDRT表复制到一个复制型数据库中:如果想复制一个用户表,如customers表,所有你要复制的就是那个customers表。你需要显式地在复制实例上创建空间索引。
--------------------------------------------------------------------------------------------
Blog: http://blog.csdn.net/linghe301
Weibo: http://www.weibo.com/linghe301
--------------------------------------------------------------------------------------------

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Oracle 데이터베이스 시작 순서는 다음과 같습니다. 1. 전제 조건을 확인합니다. 3. 데이터베이스 인스턴스를 시작합니다. 5. 데이터베이스에 연결합니다. . 서비스를 활성화합니다(필요한 경우). 8. 연결을 테스트합니다.

Oracle 데이터베이스 로그의 보존 기간은 다음을 포함한 로그 유형 및 구성에 따라 다릅니다. 재실행 로그: "LOG_ARCHIVE_DEST" 매개변수로 구성된 최대 크기에 의해 결정됩니다. 보관된 리두 로그: "DB_RECOVERY_FILE_DEST_SIZE" 매개변수로 구성된 최대 크기에 따라 결정됩니다. 온라인 리두 로그: 보관되지 않고 데이터베이스를 다시 시작하면 손실되며 보존 기간은 인스턴스 실행 시간과 일치합니다. 감사 로그: "AUDIT_TRAIL" 매개변수로 구성되며 기본적으로 30일 동안 보관됩니다.

Oracle에 필요한 메모리 양은 데이터베이스 크기, 활동 수준 및 필요한 성능 수준(데이터 버퍼 저장, 인덱스 버퍼, SQL 문 실행 및 데이터 사전 캐시 관리에 필요)에 따라 다릅니다. 정확한 양은 데이터베이스 크기, 활동 수준 및 필요한 성능 수준에 따라 달라집니다. 모범 사례에는 적절한 SGA 크기 설정, SGA 구성 요소 크기 조정, AMM 사용 및 메모리 사용량 모니터링이 포함됩니다.

Oracle 데이터베이스 서버 하드웨어 구성 요구 사항: 프로세서: 기본 주파수가 2.5GHz 이상인 멀티 코어, 대규모 데이터베이스의 경우 32개 이상의 코어가 권장됩니다. 메모리: 소규모 데이터베이스의 경우 최소 8GB, 중간 크기의 경우 16~64GB, 대규모 데이터베이스 또는 과도한 작업 부하의 경우 최대 512GB 이상. 스토리지: SSD 또는 NVMe 디스크, 중복성 및 성능을 위한 RAID 어레이. 네트워크: 고속 네트워크(10GbE 이상), 전용 네트워크 카드, 지연 시간이 짧은 네트워크. 기타: 안정적인 전원 공급 장치, 이중 구성 요소, 호환 가능한 운영 체제 및 소프트웨어, 열 방출 및 냉각 시스템.

Oracle 데이터베이스에 필요한 메모리 양은 데이터베이스 크기, 작업 부하 유형 및 동시 사용자 수에 따라 다릅니다. 일반 권장 사항: 소형 데이터베이스: 16~32GB, 중형 데이터베이스: 32~64GB, 대형 데이터베이스: 64GB 이상. 고려해야 할 다른 요소로는 데이터베이스 버전, 메모리 최적화 옵션, 가상화 및 모범 사례(메모리 사용량 모니터링, 할당 조정)가 있습니다.

Oracle에서 하루에 한 번 실행되는 예약된 작업을 생성하려면 다음 세 단계를 수행해야 합니다. 작업을 생성합니다. 작업에 하위 작업을 추가하고 해당 일정 표현식을 "INTERVAL 1 DAY"로 설정합니다. 작업을 활성화합니다.

Oracle 데이터베이스 메모리 요구 사항은 데이터베이스 크기, 활성 사용자 수, 동시 쿼리, 활성화된 기능 및 시스템 하드웨어 구성 등의 요소에 따라 달라집니다. 메모리 요구 사항을 결정하는 단계에는 데이터베이스 크기 결정, 활성 사용자 수 추정, 동시 쿼리 이해, 활성화된 기능 고려 및 시스템 하드웨어 구성 검사가 포함됩니다.

Oracle 데이터베이스를 NOMOUNT 상태로 시작하기 위해 호출되는 파일은 initsid.ora입니다. 이 파일을 편집하여 DB_NAME(데이터베이스 이름), DB_CREATE(자동 생성 방지), DB_RECOVERY_FILE_DEST(복구 로그 디렉터리), DB_RECOVERY_FILE_DEST_SIZE(복구 로그 크기) 매개변수를 수정한 다음 "STARTUP NOMOUNT" 명령을 사용하여 데이터베이스를 시작합니다.
