注册
DM8 通过 OCI 访问 Oracle 数据库 DBLINK
培训园地/ 文章详情 /

DM8 通过 OCI 访问 Oracle 数据库 DBLINK

倒吊人 2026/09/24 200 0 0

1. 实验目标与工作原理

本次实验的目标是在 DM8 数据库中创建 DBLINK,通过 Oracle OCI客户端动态库连接 Oracle 数据库,使 DM8 可以直接查询 Oracle 远程表。Oracle OCI 负责建立 Oracle 连接、完成用户认证、发送 SQL 和接收结果;DM8 的 DBLINK 则负责把远程 Oracle 对象封装成可在当前数据库中访问的远程对象通道。
达梦技术社区文章说明,DM 访问 Oracle 的 DBLINK 可以通过 OCI 或 ODBC 两种方式实现,本次学习 OCI 方案。

2. 环境检查

安装 Oracle Instant Client 前,先确认操作系统架构、glibc 版本以及 libaio 依赖是否满足。高版本 Oracle Instant Client 对 glibc 有最低版本要求。

2.1 检查 glibc

rpm -qi glibc
ldd --version

image.png
image.png
本机为 Kylin V10 x86_64,glibc 版本为 2.28

2.2 检查 libaio

rpm -qa | grep libaio
image.png
说明:如果 libaio 未安装,应先通过系统软件源安装。OCI 动态库依赖缺失时,DBLINK 可能创建成功,但真正查询时才报加载库失败。

  1. 安装 Oracle Instant Client
    Oracle Instant Client 的 basic 包提供 OCI、OCCI 等核心动态库。只需要让 DM 通过 OCI 访问 Oracle 时,basic 包是关键依赖;sqlplus 包只是额外提供 SQL*Plus 命令行工具,并不是 DM DBLINK 使用 OCI 的必要条件。

3.1 初次安装 Instant Client 21.20

mkdir -p /opt/oracle
unzip instantclient-basic-linux-21.20.0.0.0dbru.zip -d /opt/oracle/

cd /opt/oracle/instantclient_21_20
pwd
ls -l

image.png

image.png

从目录可以看到 libclntsh.so.21.1、libclntshcore.so.21.1、libocci.so.21.1、libnnz21.so 等文件,同时包含指向 21.1 实际库文件的多个兼容软链接。

4. 配置系统动态库搜索路径

DM 服务进程要能够找到 libclntsh.so 及其依赖。常见做法有两层:一是把 Instant Client 目录注册到系统动态链接器,二是给 dmdba/DM 服务配置 LD_LIBRARY_PATH。

4.1 /etc/ld.so.conf.d 配置

echo /opt/oracle/instantclient_21_20 > /etc/ld.so.conf.d/oracle-instantclient.conf
cat /etc/ld.so.conf.d/oracle-instantclient.conf
ldconfig

image.png

问题记录:截图中 /etc/ld.so.conf.d/oracle-instantclient.conf 的内容为 /opt/oracle/instantclient_19_13,而实际解压目录是 /opt/oracle/instantclient_21_20。这个路径不一致本身就是一个需要优先排除的配置问题。实际操作应保证 ld.so.conf.d 和真实 Instant Client 目录完全一致,然后重新执行 ldconfig。这个问题也导致了后续操作出现问题,dm端无法链接到oracle指定表中

4.2 配置 dmdba 的 LD_LIBRARY_PATH

su - dmdba
vi ~/.bash_profile

export LD_LIBRARY_PATH=/data/dmdbms/bin:/opt/oracle/instantclient_21_20

source ~/.bash_profile
env | grep LD_LIBRARY_PATH

image.png

5. Oracle 端创建测试用户和测试表

为了验证 DBLINK 是否能够真正跨库读取中文、数字等数据,在 Oracle 侧创建 SCOTT 用户和 T1 测试表。

CREATE USER SCOTT IDENTIFIED BY oracle;
GRANT DBA TO SCOTT;

CONN SCOTT/oracle

CREATE TABLE SCOTT.T1
(
    NAME  VARCHAR2(20),
    AGE   INTEGER,
    SEX   VARCHAR2(3),
    GRADE INTEGER
);

INSERT INTO SCOTT.T1 VALUES('丽丽',18,'女',1000);
COMMIT;

image.png

6. DM8 中创建 Oracle DBLINK

完成 OCI 环境准备并重启 DM 服务后,可以在 DM8 中创建 Oracle 类型的 DBLINK。

CREATE OR REPLACE LINK PDBLINK
CONNECT 'ORACLE'
WITH "SCOTT" IDENTIFIED BY "oracle"
USING '<Oracle服务器IP>:1521/<服务名>';

查看已创建的链接:
SELECT * FROM DBA_DB_LINKS;
通过 DBLINK 查询远端 Oracle 表:
SELECT * FROM T1@PDBLINK;

SELECT * FROM V$VERSION@PDBLINK;
删除链接:
DROP LINK PDBLINK;

6.1 打开 DBLINK SQL 日志

ALTER SYSTEM SET 'ELOG_REPORT_LINK_SQL' = 1;

7.问题排查

7.1 遇到问题

本次实验最主要的问题是 OCI 动态库加载。初次使用 Instant Client 21.20 时,虽然客户端目录、LD_LIBRARY_PATH 等已经配置,但 DM 通过 DBLINK 调用 OCI 时仍出现动态库加载问题。这次现象为21.20 在当前 DM8 + Kylin + Oracle 11g 环境不兼容

7.2 第一步:确认 dmdba 环境变量

echo $LD_LIBRARY_PATH
env | grep LD_LIBRARY_PATH
本次截图中 dmdba 环境已经包含 /opt/oracle/instantclient_21_20,因此交互式用户环境这一层基本正常。

7.3 第二步:检查 OCI 主库和软链接

cd /opt/oracle/instantclient_21_20
ls -l
ls -l libclntsh.so

重点确认 libclntsh.so 存在,并且软链接最终指向真实的 libclntsh.so.21.1。
image.png

7.4 第三步:检查动态库依赖

ldd libclntsh.so
正常情况下,应能看到 libnnz、libaio、libm、libpthread 等依赖的解析路径;如果出现 not found,需要先补依赖或修正动态库路径。

7.5 第四步:确认 DM 服务进程是否真正加载 OCI 路径

# 查找 DM 服务进程
ps -ef | grep DmServiceDMSERVER

# 假设 dmserver PID 为 1234
cat /proc/1234/environ | tr '\0' '\n' | grep LD_LIBRARY

# 查看 systemd 服务定义
systemctl cat DmServiceDMSERVER
systemctl status DmServiceDMSERVER

执行 source ~/.bash_profile 只改变当前终端环境,systemd 启动的 dmserver 并不一定读取 dmdba 的 .bash_profile。
如果 dmserver 进程中没有 OCI 路径,可在服务文件的 [Service] 中加入:

Environment="LD_LIBRARY_PATH=/data/dmdbms/bin:/opt/oracle/instantclient_11_2"

然后以 root 执行:

systemctl daemon-reload
systemctl restart DmServiceDMSERVER

本次实验的核心是理解 DBLINK 对 Oracle OCI 动态库的依赖。DM8 通过 OCI 访问 Oracle 时,数据库服务进程必须能够定位 libclntsh.so,并且该动态库的所有依赖也必须能够被系统解析。
实际排错时应按“系统运行库 → Instant Client 文件 → 系统动态库路径 → dmdba 环境 → dmserver 进程环境 → OCI 版本 → DBLINK SQL”的顺序逐层检查。本次遇到的 21.20 客户端问题说明,动态库版本和运行环境也是 DBLINK 成功与否的重要因素;换用与 Oracle 11g 更接近的 11.2.0.4 客户端后,再结合正确的软链接和服务环境变量进行验证,排查思路会更加清晰。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服