循序渐进丨Oracle 通过透明网关以dblink形式连接 MogDB 的方法

bf605a47e9fc80043f2cd409f5600ae8.gif

Oracle 透明网关是 Oracle 公司的一个连接访问异构数据库的组件。通过透明网关,Oracle 可以以数据库链接(dblink)的方式连接异构数据库。

目前,通过 Oracle Database Gateway for ODBC,可以实现在 Oracle 数据库中直接访问 MogDB 数据库。

下面是具体的实现步骤:

01

下载 Oracle 透明网关软件

登录 https://edelivery.oracle.com,搜索 database gateway:

259fde2fa96632f4ce2af13debcc0b87.png

选择合适版本,点击Continue:

7cb68b79e7c60c85befc30d3e6b64cc5.png

选择合适操作系统平台,开始下载。

02

安装Oracle透明网关软件

不同版本界面可能不一样,解压,并运行 ./runInstaller,关键步骤在于选择 Oracle Database Gateway for ODBC:

2a600188914f4e37ef60636fa6e1d126.png

完成安装。

03

安装unixODBC

以root用户直接运行:

yum install unixODBC unixODBC-devel

04

下载 openGauss ODBC驱动和libpq驱动

https://opengauss.org/zh/download/

c620421ee7198d78e341e80b37fc15ca.png

并一起解压到$ORACLE_HOME/hs/ogodbc下(或者其他地方也可以)。

05

配置Oracle LISTENER/TNSNAME

cd $ORACLE_HOME/network/admin
n  listener.ora
LISTENER_HS =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1567))
    )
  )
SID_LIST_LISTENER_HS=
  (SID_LIST=
      (SID_DESC=
         (SID_NAME=mogdb)
         (ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1)
         (ENV="LD_LIBRARY_PATH=/u01/app/oracle/product/19c/dbhome_1/hs/odbc")
         (PROGRAM=dg4odbc)
      )
      (SID_DESC=
         (SID_NAME=mogdb2)
         (ORACLE_HOME=/u01/app/oracle/product/19c/dbhome_1)
         (ENV="LD_LIBRARY_PATH=/u01/app/oracle/product/19c/dbhome_1/hs/odbc ")
         (PROGRAM=dg4odbc)
      )
  )

其中:

  • LISTENER_HS为监听名字,可随意选择

  • 1567为端口号,可随意选择,不重复即可

  • mogdb/mogdb2为透明网关SID, 理论上可随意选择(不超过8位,不以数字开头)

  • /u01/app/oracle/product/19c/dbhome_1 为ORACLE_HOME,根据实际情况做相应改动即可

可支持一个监听负责多个数据库,通过多个SID_DESC实现;

也可以把SID_DESC加到现有的LISTENER当中,实现默认LISTENER同时监听普通连接和透明网关连接。

n  tnsnames.ora
mogdbtns =
  (DESCRIPTION=
    (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1567))
    (CONNECT_DATA=(SID=mogdb))
    (HS=OK)
  )
Mogdb2tns =
  (DESCRIPTION=
    (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1567))
    (CONNECT_DATA=(SID=mogdb2))
    (HS=OK)
  )

其中:

  • mogdbtns为TNS名字,可随意选择

  • 1567为端口号,对应listener内容

  • mogdb为透明网关SID, 对应listener内容

如果连接多个数据库,则需要建立多个tnsname。

06

配置 ODBC.ini

目录和文件名其实可任选,为了方便管理,建议$ORACLE_HOME/hs/admin:

cd $ORACLE_HOME/hs/admin
vi odbc.ini
[MOGDB]
Servername=192.168.2.131
Port=10086
Database=postgres
Driver=/u01/app/oracle/product/19c/dbhome_1/hs/odbc/psqlodbcw.so
Username=tpcc
Password=tpcc@123
[MOGDB2]
Servername=192.168.2.131
Port=10199
Database=postgres
Driver=/u01/app/oracle/product/19c/dbhome_1/hs/odbc/psqlodbcw.so
Username=tpcc
Password=tpcc@123

其中:

  • MOGDB/MOGDB2为ODBC的数据源名称,可任选

  • Driver为ODBC驱动解压目录下的psqlodbcw.so

  • Servername/Port/ Database/ Username/Password 为目标库相应信息

07

配置 hs/admin/init.ora

cd $ORACLE_HOME/hs/admin
vi init<SID>.ora

此处SID对应listerner.ora里面的 SID_NAME的定义,如果多个SID_NAME,则需要多份init.ora;

最核心的几个参数:

HS_FDS_CONNECT_INFO = MOGDB
set ODBCINI = /home/oracle/.odbc.ini
HS_FDS_SHAREABLE_NAME = /home/oracle/ogodbc/lib/psqlodbcw.so
HS_FDS_QUOTE_IDENTIFIER = FALSE
set LowerCaseIdentifier = on
HS_FDS_TRACE_LEVEL = 1
HS_NLS_NCHAR = UCS2

其中:

  • HS_FDS_CONNECT_INFO 对应 odbc.ini 里面的数据源名字

  • ODBCINI 对应上一步odbc.ini的完整路径及文件名

  • HS_FDS_SHAREABLE_NAME 对应odbc.ini的驱动文件

  • HS_FDS_QUOTE_IDENTIFIER = FALSE 解决字段名大小写问题

  • set LowerCaseIdentifier = on 解决字段名大小写问题

  • HS_FDS_TRACE_LEVEL 开始时可以设置大一点,方便Debug, 比如255, 稳定下来可以改为0或者1。

  • HS_NLS_NCHAR = UCS2 有时候连接失败需要设置这个参数,应该是字符集不匹配时。

08

启动listener并简单测试

lsnrctl start LISTENER_HS

名字对应listener里的名字:

tnsping mogdb
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1567)) (CONNECT_DATA = (SERVER = DEDICATED) (SID_NAME = mogdb) (SERVICE_NAME = mogdb)) (HS=OK))
OK (10 msec)

注意,此处的OK 仅代表LISTENER正常工作,还未和远程数据库发生关系。

09

创建dblink

Create database link mogdb_link connect to “user” identified by “pass” using ‘mogdb’;

  • mogdb_link是dblink名字

  • ‘mogdb’对应tnsnames.ora里的内容

  • 注意前面的user和pass加双引号,using后面的mogdb加单引号

10

测试dblink

Select * from pg_class@mogdb_link;
select “relname” from pg_class@mogdb;

目前字段名称需要加括号,暂无合适的绕过方法;

如果可以,建议修改应用,涉及远程表的部分SQL中使用字段名称小写+双引号的方式,如果实在不想改应用代码,可联系云和恩墨的工程师进行定制化调整。

11

遗留问题

  • 如果语句报错,后面的访问也会报错

需要显式rollback 或者断开会话重连。

odbc.ini里面设置ForExtensionConnector=1可能可以解决这个问题,还需要进一步测试验证。

  • 表名大小写问题

访问 MogDB 的表的指定字段需要使用小写并加双引号。

如果可以,建议修改应用,涉及远程表的部分SQL中使用字段名称小写+双引号的方式,如果实在不想改应用代码,可联系云和恩墨的工程师进行定制化调整。

关于作者

罗海雄,数据库研发架构师,性能优化专家,2012 ITPUB 全国SQL大赛冠军。超十年企业级系统设计与优化经验,资深架构师与优化大师,对SQL优化理解尤其深入。曾服务于甲骨文公司。

【特别推荐】“openGauss Developer Day 2024”将于6月21日,在北京昆泰嘉瑞文化中心召开。云和恩墨将在当天下午1:30-3:30承办一场专题论坛,携手河北移动、鼎捷软件,为您呈现 MogDB 数据库技术的创新突破和在生态与市场方面的成果,还有盖国强领衔的Liveshow为您答疑解惑✨

我们诚邀您现场参与!现在就点击下方图片了解大会详情,并扫码即刻报名~

fa58ec1590719330c5cfe1cd588580fb.png

👇🏻云和恩墨专属报名通道

(记得勾选“云和恩墨分论坛”哦~)

76a81df8edab12c4e42d1b8648e492e9.gif

f7c0a8167150c3160fabf6afb4016d12.png

29f751e9d76357e998a05f52a0f398ca.gif

ae5350af64f27bba9bd468d165af6f46.gif

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


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

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

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

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

我们期待与您携手,共同探索数据力量,迎接智能未来。

bac1d06b84d1d11c51e430a789892a3a.gif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值