【笔记】.NET开发环境下使用PostgreSQL+Oracle_fdw实现两个数据库之间数据交互操作(一)

coding

一 前言

    以往公司开发的地理信息系统数据都是存储在oracle中,然而在地图数据的分析和计算中一直存在不小的问题,所以今次我们尝试使用PostgreSQL+PostGIS来解决这一问题。

    本篇笔记的目的就是记录在研究这一开发路径期间的“学习的内容”、“遇到的问题和解决过程”以及“简单的实践内容”以备忘。

    笔记中可能会出现部分术语概念不准确,还请您能耐心指正或者忽略,反正这是为了我自己能看懂的笔记,你爱看不看。

二 安装

  1.环境

    Windows7 64位操作系统(公司工作的台式机,探索阶段暂时使用,以后可能会转到Windows系统的服务器上去)。

    已安装了Oracle 11g客户端,这里将不在介绍oracle的安装。

  2.步骤

    基本还是准寻下一步原则,第二步注意一下语言的选择。

    SQL安装完毕后自动弹出Stack Builder引导安装PostGIS等其他扩展。

    我这里只选择了自己需要的PostGIS版本进行了安装。

    详细可以参考同事整理的安装文档:https://www.jianshu.com/p/3b1a4cd8e72e

三 遇到的第一个问题

  前一天用着好好的数据库,第二天服务就死活链接不上了,而且在pgAdime里没有报任何错误,就很奇怪。

  在尝试了修改配置文件、分析服务管理器启动产生的日志等最终还是没有奏效,索性卸载干净重新安装,居然就好了。。。

  现在仔细想想可能是头一天尝试各种配置文件,把整个配置搞毁了,还有就是真有一些奇怪的bug。不过这里吸取了一个教训就是,在还没有做太多工作的前提下,百度多次都没有明确解决办法的时候,还不如从头来过

  不过这里还是有一些未解决的小问题,就是postgreSQL的日志文件里的错误记录时不时就有乱码,而且不是所有中文都乱码,而是部分报错的记录才乱码,非常的诡异。这个以后要解决一下。

四 Oracle_fdw的安装部署

  4.1 下载地址

   

https://github.com/laurenz/oracle_fdw/releases/tag/ORACLE_FDW_1_1_0

   

选择自己合适的版本下载,然后解压。

  4.2 部署

                                                            图1

                                                            图2

  

  图1是解压后的文件,将文件夹内文件复制到postgresql安装指定目录中(图2)。


    在postgresql控制台中输入

 

create extension oracle_fdw;

    部署成功!

    这里我遇到过的问题是总提示oracle_fdw不是有效的win32程序,因为我的系统是64位系统,PostgreSQL选择安装的是64位,oracle_fdw自然选择的也是64位,为什么会提示不是有效的32位程序呢?

    百度一圈也么有找到和我相同的问题,只能自己解决,尝试换32位oracle也未果。

    不过后来发现我的oracle客户端安装的是32位,抱着试试看的态度,只能又卸载重安了一遍PostgreSQL,这次选择的是32位,成功了!

使用oracle_fdw扩展连接oracle数据库

  5.1 创建server   

    oracle已经使用多年,在这里就不总结oracle的配置方法了。

    以下代码可以直接在pgAdmin的SQL查询工具里直接查询。

create server oradb foreign data wrapper oracle_fdw options(dbserver 'orcl');

    oradb是server的名称,'orcl'指向tnsnames.ora中配置的实例名。

  5.2 授予用户权限

grant usage onforeign server oradb to postgres;

    将刚创建的服务oradb授予权限于postgresql用户postgres。

  5.3 数据库同步

createuser mapping for postgres server oradb options(user'nk_sygis',password 'nk_sygis');

    postgres用户下服务oradb连接oracle数据库。

Oracle外部表应用

  6.1建立外部表(foreign table)

    选择oracle中一个有数据的表,先查看结构和数据。

    我习惯用Navicat Premium直接导出一个表的结构脚本。

   

    根据oracle中的表,在postgresql中创建同结构的foreign table的sql语句如下:

  

CREATEFOREIGNTABLE AHW_MAPPOINT_TYPE (

ID integerNOTNULL ,

TYPENAME VARCHAR(50) NULL ,

TABLENAME VARCHAR(50) NULL ,

MAINICON VARCHAR(200) NULL ,

SUBICON VARCHAR(200) NULL ,

SPAREICON VARCHAR(200) NULL ,

ISDEFAULT integerNULL ,

USERNAME VARCHAR(50) NULL ,

PERMISSIONUSERS VARCHAR(1000) NULL ,

DISPLAYFIELD VARCHAR(1000) NULL ,

ALLFIELD VARCHAR(1000) NULL ,

SPARE1 VARCHAR(500) NULL ,

SPARE2 VARCHAR(500) NULL ,

REMARK VARCHAR(255) NULL

)server oradb options(schema'AHWD',table'AHW_MAPPOINT_TYPE');

  schema:写oracle中的schema(模式名),table是同步的oracle中的表名称。

  不过这里要注意pgAdmin数据库的结构中看不到外部表,不用担心,只要能正常查询到就是建立成功了。这一点不太友好,以后要找个更好的工具用了。

  6.2查询

select*fromAHW_MAPPOINT_TYPE;

  结果如下图

以上部分内容参考引用了他人的文档,原地址为:http://blog.csdn.net/freeland1/article/details/42968763

以上是 【笔记】.NET开发环境下使用PostgreSQL+Oracle_fdw实现两个数据库之间数据交互操作(一) 的全部内容, 来源链接: utcz.com/z/509459.html

回到顶部