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

Oracle DBLink兼容性增强

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

示例

环境准备

1、MogDB 环境

2、Oracle 环境

创建测试表

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

插入测试数据。
INSERT INTO scott.EMPLOYEE (IDNAME, SALARY) VALUES (1001'Mike'5000);
INSERT INTO scott.EMPLOYEE (IDNAME, SALARY) VALUES (1002'JACK'6000);

步骤

1、登录MogDB数据库

以数据库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=#

2、创建用户

赋予用户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

3、用户创建用户映射密钥文件

[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

4、以test用户登录MogDB数据库。

[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 help

MogDB=>

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

以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

6、创建用户映射

为MogDB数据库用户test和Oracle数据库用户scott建立映射关系。
MogDB=> create user mapping for test server dblink_to_orcl options(user 'scott',password 'xxx123');
CREATE USER MAPPING

7、通过DBLink在MogDB数据库中查询Oracle表。

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

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

8、通过DBLink操作数据

在MogDB数据库中对Oracle数据库表执行更新、插入、删除、查询操作
MogDB=> UPDATE scott.EMPLOYEE@dblink_to_orcl SET SALARY = 5500 WHERE ID = 1001;
UPDATE 1

MogDB=> insert into scott.EMPLOYEE@dblink_to_orcl values (1003'JANE'7000);
INSERT 0 1

MogDB=> DELETE FROM scott.EMPLOYEE@dblink_to_orcl WHERE SALARY =6000;
DELETE 1

MogDB=> select * from scott.EMPLOYEE@dblink_to_orcl;
  id  | name | salary
------+------+---------
 1003 | JANE | 7000.00
 1001 | MIKE | 5500.00
(2 rows)

9、查看执行计划

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" FROM
 scott.employee r1
(2 rows)

本文由 mdnice 多平台发布

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值