【问题标题】:Migrate SPATIAL data from Oracle to Postgresql将 SPATIAL 数据从 Oracle 迁移到 Postgresql
【发布时间】:2012-04-05 02:10:06
【问题描述】:

我正在尽最大努力将空间数据库从 Oracle 迁移到 Postgresql,但失败得很惨。

我已经尝试了许多不同的途径,正如您在我之前的问题中看到的那样,但没有一个有效。有人可以告诉我一种相对无痛的方法,因为我现在对此一无所知。

我曾尝试使用 SwisSQL 等 3rd 方软件,但失败并出现大量错误。我尝试创建充满插入语句的文件,然后创建一个 C# 程序来解析这些文件并用相关的 postgis 替换 oracle 空间类型,并且由于这些文件的大小,在最基本的替换上出现内存不足异常而失败.一些表中有超过 200 万条记录,因此您可以想象包含每个插入的文件的大小。

我非常渴望找到解决方案,因为它严重阻碍了该项目的进展。我需要 Postgresql 中的数据,因为我正在编写需要与数据库无关的软件,这意味着它必须在每个数据库上的真实数据上进行测试。

我们会张开双臂欢迎任何想法。如果不是出于空间方面的考虑,它会简单得多,现在很可能已经完成了。

编辑:

以下是 Toad for Oracle 生成的插入示例,用于了解数据复杂性。

Insert into CLUSTER_1000M
(CLUSTER_ID, CELL_GEOM, CELL_CENTROID)
Values
(4410925, 
"MDSYS"."SDO_GEOMETRY"(2003,81989,NULL,
"MDSYS"."SDO_ELEM_INFO_ARRAY"(1,1003,3,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL),
"MDSYS"."SDO_ORDINATE_ARRAY"(80000,103280,81000,104280,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL)), 
"MDSYS"."SDO_GEOMETRY"(2001,81989,
"MDSYS"."SDO_POINT_TYPE"(80500,103780,NULL),NULL,NULL));

【问题讨论】:

  • 我认为这实际上可能会在gis.stackexchange.com 上获得更好的牵引力。
  • 我知道这不是你想要的,但它可能会给你一些好主意:How to batch synchronize data from ArcSDE to PostGIS?
  • “记录数”很少重要——每条记录的复杂性通常很重要。如果您的空间数据有数千个环、错误的几何形状等,那么您可能会遇到错误。
  • 我将添加一个由 oracle 生成的插入示例,它可能会给出复杂性的概念

标签: oracle postgresql postgis spatial


【解决方案1】:

接受的解决方案对我不起作用。

使用 OSGeo4W 安装 GDAL/OGR,并在高级安装模式下选择 gdal-oracle10g。

然后执行这个命令:

ogr2ogr 
-a_srs {{SRS}} 
-overwrite -f 
"PostgreSQL" 
-nln {{POSTGIS SCHEMA}}.{{POSTGIS TABLE}} 
PG:"
host='{{POSTGIS HOST}}' 
port='{{POSTGIS PORT}}' 
user='{{POSTGIS USER}}' 
password='{{POSTGIS PASSWORD}}' 
dbname='{{POSTGIS DATABASE}}'" 
OCI:"{{ORACLE USER}}/{{ORACLE PASSWORD}}
@(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
(HOST = {{ORACLE HOST}})
(PORT = {{ORACLE PORT}})))
(CONNECT_DATA = (SID = {{ORACLE SID}})))
:{{ORACLE SCHEMA}}.{{ORACLE TABLE}}"

用您的值替换 {{ }} 个项目!

您需要为每个表执行此操作。有一个电子表格可以为您生成这些命令:

http://gis-expert.com/wp/2018/09/12/how-to-migrate-spatial-data-from-oracle-to-postgis/

【讨论】:

    【解决方案2】:

    有两种流行的选择:开源 ogr2ogr 或来自 Safe Software 的商业产品。

    这是我处理ogr2ogr 解决方案的方法。

    首先,您需要拥有正确的工具:GDAL/OGR。如果您使用的是 Unix,请使用正确的库进行编译以获得 Oracle 支持(默认情况下未启用)。但我假设你在 Windows 上。获取开源地理空间工具的最简单方法是使用OSGeo4W。要启用对 GDAL/OGR 的 Oracle 支持,您还需要在 setup.exe 中以“高级安装”模式选择 gdal-oracle10g 包。有关 Oracle 软件包的更多信息,请访问 this page,并注意您还需要提供非免费的 OCI.DLL。工作时,您应该会看到驱动程序名称显示为ogr2ogr --formats

    来自 OSGeo4W Shell 的基本命令应该类似于:

    ogr2ogr -f "PostgreSQL" PG:"host=localhost user=someuser dbname=somedb password=password port=5432" OCI:someuser/password layername
    

    以下是有关 GDAL/OGR 的更多信息:

    【讨论】:

    • 谢谢。我会尝试两种选择,看看哪个适合我。
    猜你喜欢
    • 2013-10-02
    • 2020-06-01
    • 2017-06-19
    • 2018-09-14
    • 1970-01-01
    • 2019-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多