当前位置: 首页 > news >正文

循序渐进丨MogDB 对 Oracle DBLink兼容性增强

本特性自 MogDB 5.0.0版本开始引入,支持 Oracle DBLink语法,可以使用@符号访问 Oracle 数据库中的表。

示  例

01

环境准备

9fc32f3a2dfdcbe39651a6565e656e46.png

MogDB 环境

dc2a51f311b390596b6686f05416deba.png

  • 已安装 MogDB 数据库。

  • 已安装oracle_fdw插件,具体安装方法参见oracle_fdw安装文档

    https://docs.mogdb.io/zh/mogdb/v5.0/1-oracle_fdw(复制链接至浏览器查阅)

08ef9afc9ee0d1b5a12a25ada7de5045.png

Oracle 环境

36155a6d18953cef603be9c6594fe288.png

创建测试表:

CREATE TABLE scott.EMPLOYEE (
ID INT PRIMARY KEY,
NAME VARCHAR2(50) NOT NULL,
SALARY NUMBER(10,2)
);

插入测试数据:

INSERT INTO scott.EMPLOYEE (ID, NAME, SALARY) VALUES (1001, 'Mike', 5000);
INSERT INTO scott.EMPLOYEE (ID, NAME, SALARY) VALUES (1002, 'JACK', 6000);

02

验证步骤

f9ce74b61d8e384cbb8ad50f00bdcaa8.png

① 登录 MogDB 数据库

63f7d11d2b614ddd152494dcc9e8ab37.png

以数据库postgres,端口号26000为例:

[omm@master01 ~]$ gsql -d postgres -p 26000 -r
gsql ((MogDB 5.0.4 build 070c88a0) compiled at 2023-11-25 12:57:09 commit 0 last mr 1804 )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.MogDB=#

c6cf3cb00fdc26651d4124f27ef707fc.png

② 创建用户

7ca7e73a5e9aed75a1ccecd1bd17a235.png

赋予用户sysadmin权限,以用户名test为例:

MogDB=# create user test identified by 'Enmo@123';
NOTICE:  The encrypted password contains MD5 ciphertext, which is not secure.
CREATE ROLE
MogDB=# alter user test sysadmin;
ALTER ROLE

ae8ca55c3bcf619f04d4e2dc85c751fe.png

③ 用户创建用户映射密钥文件

c3e66c896c9323c0da16b2cd88c2f7f5.png

[omm@master01**粗体** oracle_file]$ gs_guc generate -S 'xxxx@123' -D $GAUSSHOME/bin -o usermapping -U test
The gs_guc run with the following arguments: [gs_guc -S ******** -D /data/mogdb500/app/bin -o usermapping -U test generate ].
gs_guc generate -S *** -U ***

-S 表示自定义密钥,例如xxxx@123

44929f01f1a0625a05002afcd1f5dee4.png

④ 以test用户登录 MogDB 数据库

30a518271c01fd9c52f8891d9e916548.png

[omm@master01 ~]$ gsql -d postgres -p 26000 -r -U test -W 'Enmo@123'
gsql ((MogDB 5.0.4 build 070c88a0) compiled at 2023-11-25 12:57:09 commit 0 last mr 1804 )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for helpMogDB=>

f5011d1a2fe571745039bae82dffce64.png

⑤ 创建 MogDB 数据库到 Oracle 数据库的DBLink连接

6498bc67282eac6354d04aeb68a20cb1.png

以IP地址10.211.55.21,端口号1521,数据库名orcl为例:

MogDB=> CREATE SERVER dblink_to_orcl FOREIGN DATA WRAPPER oracle_fdw OPTIONS(dbserver '10.211.55.21:1521/orcl');
CREATE SERVER

94cc85023008103abea2037a1ae8743a.png

⑥ 创建用户映射

b9f61c4bc8114a9e9b7e1966e6c4958c.png

为 MogDB 数据库用户test和 Oracle 数据库用户scott建立映射关系:

MogDB=> create user mapping for test server dblink_to_orcl options(user 'scott',password 'xxx123');
CREATE USER MAPPING

00400ba3e194c60a8ac0646b315b0059.png

⑦ 通过DBLink在 MogDB 数据库中查询 Oracle 表

d3988fb8587aefe8213045e66d44e961.png

MogDB=> SELECT * FROM scott.EMPLOYEE@dblink_to_orcl;id  | name | salary
------+------+---------1001 | Mike | 5000.001002 | JACK | 6000.00
(2 rows)MogDB=> SELECT * FROM scott.EMPLOYEE@dblink_to_orcl WHERE SALARY > 400;id  | name | salary
------+------+---------1001 | Mike | 5000.001002 | JACK | 6000.00
(2 rows)

b13eaf594c39ba73f6305b7dbefffe72.png

⑧ 通过DBLink操作数据

34963a63fc673edb27cc80d3d99c8995.png

在 MogDB 数据库中对 Oracle 数据库表执行更新、插入、删除、查询操作:

MogDB=> UPDATE scott.EMPLOYEE@dblink_to_orcl SET SALARY = 5500 WHERE ID = 1001;
UPDATE 1MogDB=> insert into scott.EMPLOYEE@dblink_to_orcl values (1003, 'JANE', 7000);
INSERT 0 1MogDB=> DELETE FROM scott.EMPLOYEE@dblink_to_orcl WHERE SALARY =6000;
DELETE 1MogDB=> select * from scott.EMPLOYEE@dblink_to_orcl;id  | name | salary
------+------+---------1003 | JANE | 7000.001001 | MIKE | 5500.00
(2 rows)

2515cd10b149192aadaa2d759d7821a4.png

⑨ 查看执行计划

dc4eab883d88bf77c63da2c2cda3b330.png

MogDB=> explain select * from scott.EMPLOYEE@dblink_to_orcl;QUERY PLAN-----------------------------------------------------------------------------------------------
-------------------Foreign Scan on "scott.employee@dblink_to_orcl" employee  (cost=10000.00..20000.00 r
ows=1000 width=78)Oracle query: SELECT /*66abc20a4a7895b75898e391381f9de8*/ r1."ID",r1."NAME",r1."SALARY" FROMscott.employee r1
(2 rows)

关于作者

许玉晨,云和恩墨 MogDB 技术支持工程师,有超过10年的金融、保险、政府、地税、运营商等业务关键型系统的运维经验,曾担任公司异常恢复东区接口人,负责紧急异常恢复工作,目前负责 MogDB 数据库的技术推广工作。

a96809cb1906efea09b2700afdf80761.gif

数据驱动,成就未来,云和恩墨,不负所托!


云和恩墨:智能的数据技术提供商,创立于2011年,总部位于中国北京,在国内外35个地区设有本地办公室并开展业务。

我们以“数据驱动,成就未来”为使命,致力于将创新的数据技术产品和解决方案带给全球的企业和组织,帮助客户构建起安全、高效、敏捷且经济的数据环境,并增强客户在数据洞察和决策上的竞争优势,实现数据驱动的业务创新和升级发展。

自成立以来,我们始终专注于数据技术领域,根据不断变化的市场需求和技术进步,创新研发了系列软件产品,涵盖数据库、数据库存储、数据库云化管理和数据智能分析等领域。这些产品已经在集团型、大中型、高成长型客户以及行业云场景中得到广泛应用,证明了我们的技术和商业竞争力,展现了我们在数据技术端到端解决方案方面的优势。

在云化、数字化和智能化的时代背景下,我们始终以正和多赢为目标,感恩每一位客户和合作伙伴的信任与支持,“利他先行”,坚持长期投入于数据技术核心能力的理念,为构建智能的数字世界而不懈努力。

158b98453f8ae3c62d9257c16d845870.gif

相关文章:

  • GPU从虚拟化迈向池化:趋动OrionX产品的创新之路
  • 安全点安全区的通俗理解
  • 【C语言】strcmp 的使⽤和模拟实现
  • Spring高级面试题-2024
  • 政安晨:【深度学习实践】【使用 TensorFlow 和 Keras 为结构化数据构建和训练神经网络】(五)—— Dropout和批归一化
  • Ipython与Jupyter之间的关系
  • 红外遥控器的使用和详细解释
  • C语言牛客网BC-37 牛牛的圆(求面积)
  • 信号处理--基于FBCSP滤波方法的运动想象分类
  • 4.Python数据分析—数据分析入门知识图谱索引(知识体系下篇)
  • vue+Echarts实现多设备状态甘特图
  • canvas画带透明度的直线和涂鸦
  • MySQL学习笔记------DCL
  • C++实现FFmpeg音视频实时拉流并播放
  • 如何在服务器上传/下载文件
  • 2018一半小结一波
  • Android Volley源码解析
  • co.js - 让异步代码同步化
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • JS题目及答案整理
  • LintCode 31. partitionArray 数组划分
  • React as a UI Runtime(五、列表)
  • React-生命周期杂记
  • Ruby 2.x 源代码分析:扩展 概述
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • Vue.js-Day01
  • 发布国内首个无服务器容器服务,运维效率从未如此高效
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 基于组件的设计工作流与界面抽象
  • 实战:基于Spring Boot快速开发RESTful风格API接口
  • 使用agvtool更改app version/build
  • 主流的CSS水平和垂直居中技术大全
  • - 转 Ext2.0 form使用实例
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • ​用户画像从0到100的构建思路
  • #pragma once
  • $NOIp2018$劝退记
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (27)4.8 习题课
  • (附源码)springboot课程在线考试系统 毕业设计 655127
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (论文阅读30/100)Convolutional Pose Machines
  • (十)T检验-第一部分
  • (转) Android中ViewStub组件使用
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)编辑寄语:因为爱心,所以美丽
  • (转)我也是一只IT小小鸟
  • (转载)Linux 多线程条件变量同步
  • .axf 转化 .bin文件 的方法
  • .gitignore文件设置了忽略但不生效
  • .NET CORE 3.1 集成JWT鉴权和授权2
  • .NET HttpWebRequest、WebClient、HttpClient
  • .NET 中什么样的类是可使用 await 异步等待的?