【笔记】.NET开发环境下使用PostgreSQL+Oracle_fdw实现两个数据库之间数据交互操作(一)
一 前言
以往公司开发的地理信息系统数据都是存储在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