opengauss编译和使用oracle_fdw

news2025/1/20 18:20:49

opengauss虽然继承自postgresql9.2,但由于做了魔改,网上通用的从oracle_fdw源码编译安装到postgresql的方法,是否成功的应用到opengauss,并不一定,今天试了一下,参照opengauss官网文档(其实写的很简单,缺乏例子)。其实,与opengauss适配的oracle_fdw源码在third_party仓里的kernel/dependency/oracle_fdw,整个过程,除了编译安装,使用过程与postgresql上的oracle_fdw相同。

由于opengauss官网文档缺乏使用oracle_fdw的详细描述或例子,我只好参考网上postgresql上的oracle_fdw的配置过程,结果成功了。而网上专门针对opengauss的oracle_fdw配置使用文章几乎没有。

看了许多别人的分享,学到很多也解决了很多工作中的问题,我也把我的经验分享一下。

一、编译安装

首先oracle_fdw是在opengauss编译时,与它一起编译的,而不是单独编译的,这一点与通用的postgresql oracle_fdw插件不同(opengauss的编译我就不介绍了),在编译opengauss时,configure中指定--enable-oracle-fdw,就可以一起把oracle_fdw编译出来,并且make install时也会安装相关文件和库,但是,有个前提,就是编译机器上要安装unixODBC 和oracle客户端:

unixODBC 通过源码安装,并不复杂。

oracle客户端包括:

oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm

oracle-instantclient12.2-devel-12.2.0.1.0-1.x86_64.rpm

oracle-instantclient12.2-jdbc-12.2.0.1.0-1.x86_64.rpm

oracle-instantclient12.2-sqlplus-12.2.0.1.0-1.x86_64.rpm

二、使用oracle_fdw

首先需要创建extension

CREATE EXTENSION ORACLE_FDW;

这一步可能会报错缺少so

openGauss=# create extension oracle_fdw;

ERROR:  could not load library "oracle_fdw.so": libclntsh.so.12.1: cannot open shared object file: No such file or directory

需要将libclntsh.so.12.1所在目录,例如/usr/lib/oracle/12.2/client64/lib加入/etc/ld.so.conf,然后以root执行ldconfig,对于三个节点的主备集群,每个节点都要这样做。

然后创建server:

create server oracle_test foreign data wrapper oracle_fdw options(dbserver '172.32.150.13:1521/nlpass01');

这一步创建名称为oracle_test的server,server代表一个远程oracle服务器,可以看到server中包含了远程oracle服务器的连接字符串:包括IP,端口,SID,但是不包括用户名密码。

其中options(dbserver '172.32.150.13:1521/nlpass01');既可以直接写oracle服务器的IP也可以引用tnsnames.ora里定义的连接名称,例如,tnsnames.ora文件内容为:

orcl_test =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.32.150.13)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = nlpass01)
    )
  )
 

则创建server的语句,也可以写成:

 create server oracle_test foreign data wrapper oracle_fdw options(dbserver 'orcl_test');

在opengauss/bin目录下创建usermapping.key.cipher文件。

注意,在安装时先创建到opengauss/bin,再打包分发,不能每个节点单独创建。

然后创建user mapping

create user mapping for postgres server oracle_test options (user 'paastest', password 'Ptest1015');

这是创建opengauss用户到oracle_test所指的远程oracle服务器的用户映射。映射的是opengauss的postgres用户到oracle服务器上的paastest用户,同时包括了paastest的密码。

然后创建外部表,即远程oracle上的表到opengauss本地表的映射:

create foreign table fdw_test01( id int options(key 'true'),

                                                   name varchar(64) options(key 'true'),

                                                   hiredate timestamp,

                                                   resume text)

server oracle_test options (schema 'PAASTEST',table 'FDW_TEST01');

这条件语句,创建了一个名为fdw_test01的外部表,它的列名和类型定义,应该与远程oracle表一一对应或兼容(其实列名甚至列数不同也可以,不过最好不要这样做)。

语句的后半部分,指定了fdw_test01要映射到哪个远程oracle服务器(oracle_test),哪个schema(PAASTEST),哪个表(FDW_TEST01)。

还有一点很重要,oracle侧组成主键的列,在opengauss侧每个对应的列,定义时要加options(key 'true')属性,表示它是主键列,否则update或delete外部表时会报错。

上面的外表对应oracle表定义为:

create table fdw_test01 ( id int,

                                         name varchar2(64),

                                         hiredate timestamp,

                                         resume clob,

                                         primary key (id, name));

有趣的是,即使oracle侧的表没有定义主键,opengauss侧定义的外表也要求至少一个列有options(key 'true')属性,否则是没法进行update和delete操作的,而且即使opengauss测试定义了key列,oracle侧这个列有重复也不能update和delete,所以,最好oracle侧的表定义了主键。

三、opengauss 查看外部表信息

注意,下面的命令都是在opengauss上执行的,不是在oracle上执行的。

查看都有哪些data wrapper:

\dew

查看都有哪些foreign data server: 

\des+

 查看都有哪些foreign table:

\det+

 查看oracle诊断信息:

参考:

PostgreSQL Insider - How to link to Oracle databases using oracle_fdw (part 1) (fastware.com)

PostgreSQL Insider - How to link to Oracle databases using oracle_fdw (part 2) (fastware.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/469181.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Bean的作用域及生命周期

目录 前言: Bean的作用域(Scope) 单例模式 原型模式(多例作用域) 请求作用域(request) 会话作用域 全局作用域 网络长连接 Spring执行流程 Bean的生命周期 测试 小结: 前…

多模态论文串讲:ALBEF VLMo BLIP CoCa Beit V3

文章目录 前言ALBEF:Align before Fuse: Vision and Language Representation Learning with Momentum Distillation(2021-10)VLMO: Unified Vision-Language Pre-Training with Mixture-of-Modality-Experts(2021-11)relatedmethod BLIP:Bootstrapping Language-Im…

【贴片SD Card介绍】贴片SD Card (LEILONG雷龙科技)

有幸申请到了雷龙科技代理的 贴片 SD Card (SD NAND) 样品,做出测试,分享一下。 型号:CSNP32GCR01-BOW;CSNP4GCR01-BOW 生产方:CS创世半导体 由于是第一次使用贴片类型的 SD Card ,可能文章会有较多疏忽。…

【Git】Windows Git和TortoiseGit安装教程(Git2.23.0、TortoiseGit2.8.0、语言包2.8.0)

介绍 这里是小编成长之路的历程,也是小编的学习之路。希望和各位大佬们一起成长! 以下为小编最喜欢的两句话: 要有最朴素的生活和最遥远的梦想,即使明天天寒地冻,山高水远,路远马亡。 一个人为什么要努力&a…

eletron+react+antd+node开发桌面小程序并打包(electron-packager+electron-builder)

首先罗列一下项目中用到的技术: electron, react,antd, typescript, node,及打包命令:pkg,electron-packager,electron-builder及child_process实现多进程 需求:开发一个桌面应用,左…

前端架构师-week3-脚手架执行准备过程实现

目录​​​​​​​​​​​​​​ 脚手架框架代码拆包 import-local应用 检查版本号功能开发(require加载资源类型讲解 npmlog封装) 最低Node版本检查功能开发 root 账号启动检查和自动降级功能开发 用户主目录检查功能开发 入参检查和 debug…

华为OD机试真题(Java),火星文计算(100%通过+复盘思路)

一、题目描述 已知火星人使用的运算符为#、$,其与地球人的等价公式如下: x#y 2*x3*y4 x$y 3*xy2 其中x、y是无符号整数;地球人公式按C语言规则计算;火星人公式中,$的优先级高于#,相同的运算符&#x…

数字船厂信息化整体解决方案(ppt可编辑)

本资料来源公开网络,仅供个人学习,请勿商用,如有侵权请联系删除 数字船厂建设思路 智慧船厂将以信息化为基础、以数据为纽带、以制造为核心、以管理为载体打造新型智慧园区,该智慧园区整合了船厂的安全、环保、能源、安防、应急…

基于 JavaWeb 的用户报名审核平台项目

目录 一、项目的需求: 二、项目的思路流程: 三、项目的框架(基于JavaWeb): 四、项目的详细搭建 1、数据库--建库建表 2、JavaBean编写(以Status.java为例) 3、Dao层(StatusDao…

Linux系统与shell编程第一节课

目录 1.1 Linux发展历史 1.2 什么是linux? 1.3 Linux的发行版 Host-Only(仅主机模式) windows开发 linux服务 区块链, 特点:稳定,安全,可移植性,低资源消耗,开源软…

做工业品行业的财务有多难

财务 做工业品行业的财务需要具备一定的财务和会计知识,以及对行业内经济运作有一定的了解。在处理大量数据和信息方面也需要有较高的能力。此外,工业品行业往往涉及到复杂的生产过程和供应链管理,需要对这些方面有一定的了解和掌握。因此&a…

数据结构初阶(栈和队列)

文章目录 一、栈1.1 什么是栈1.2 栈的使用(1)底层代码(2)方法(3)栈的应用 二、队列2.1 什么是队列2.2 队列的使用(1)底层代码的实现(2)队列的使用 2.3 双端队…

字节跳动发放年终奖,远超预期~

最近一段时间,国内互联网大厂接连公布年终奖情况,整个后厂村都洋溢在春节般的喜庆气氛里。 虽然由于各种各样的顾虑(主要是人员流失问题),大部分公司都将年终奖发放时间调整到了年中,但好饭不怕晚&#xf…

06_Callable接口

Thread类、Runnable接口使得多线程编程简单直接。 但Thread类和Runnable接口都不允许声明检查型异常,也不能定义返回值。没有返回值这点稍微有点麻烦。不能声明抛出检查型异常则更麻烦一些。 public void run()方法规范意味着你必须捕获并处理检查型异常。即使你小…

磁盘被格式化了能找到资料吗?资料找到的具体方法

磁盘格式化了还能找到,用读卡器接到电脑,就可以作为可移动磁盘来找到资料。下面讲下磁盘被格式化了能找到资料吗?资料找到的具体方法 磁盘被格式化了能找到资料吗?资料找到的具体方法 工具/软件:sayRecy 步骤1&#xf…

博世中国创新软件开发中心 BCSC

Bosch China Innovation and Software Development Campus 博世中国创新软件开发中心 BCSC 擎软件! 拓未来!Bosch China Innovation and Software Development Campus——IntroductionBOSCH——Our AdvantagesBOSCH——Hotly recruited positions Welcom…

wifi芯片行业信息汇总

1、Wifi概述 Wi-Fi这个术语被人们普遍误以为是指无线保真(Wireless Fidelity),并且即便是Wi-Fi联盟本身也经常在新闻稿和文件中使用“Wireless Fidelity”这个词。 主要版本: 随着最新的 802.11 ax 标准发布,新的 W…

『Linux』第九讲:Linux多线程详解(一)_ 线程概念 | 线程控制之线程创建 | 虚拟地址到物理地址的转换

「前言」文章是关于Linux多线程方面的知识,讲解会比较细,下面开始! 「归属专栏」Linux系统编程 「笔者」枫叶先生(fy) 「座右铭」前行路上修真我 「枫叶先生有点文青病」 「每篇一句」 我与春风皆过客, 你携秋水揽星河。 ——网络…

高精度延时

在使用STM32的时候可以使用SYSTICK来实现高精度延时。 I.MX6U没有SYSTICK定时器,但是有GPT定时器来实现高精度延时。 GPT(General Purpose Timer) GPT定时器是一个32位向上定时器(也就是从0x00000000开始向上递增计数&#xff0…

C#【必备技能篇】制作NuGet程序包,并发布到NuGet官网

文章目录 一、准备工作:在NuGet上创建并获取API Keys1、首先需要登录,直接用微软账户登录即可2、点击右上角菜单API Keys,创建Key3、填写信息并创建4、复制API Key 二、制作一个简单的dll三、创建发布文件夹四、上传NuGet程序包并发布1、方法…