---
title: OceanBase 数据库 Oracle 模式创建到 Oracle 的 DBLink-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于OceanBase 数据库 Oracle 模式创建到 Oracle 的 DBLink相关的常见问题和使用技巧，帮助您快速解决OceanBase 数据库 Oracle 模式创建到 Oracle 的 DBLink的难题。
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

划线反馈

# OceanBase 数据库 Oracle 模式创建到 Oracle 的 DBLink

更新时间：2026-05-26 02:16

适用版本： V3.1.x、V3.2.x、V4.0.x、V4.1.x、V4.2.x 内容类型：How-to  

本文介绍 OceanBase 数据库 Oracle 模式创建到 Oracle 的 DBLink。

## 适用版本

OceanBase 数据库 V3.x、V4.x。

## 操作方法

OceanBase 数据库 Oracle 租户连接原生 Oracle 需要配置 OCI 库，该库将提供连接原生 Oracle 数据库的驱动支持。

### 步骤 1：下载 oracle instantclient

注: 如不方便下载，可以联系 OceanBase 技术支持同学获取现成的 rpm 文件。

- OceanBase 数据库 V3.2.x 版本(x86 服务器)

  [https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html](https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html)

  点击 **Version 11.2.0.4.0** 后下载 **oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm**。

  #### 注意

     - 建议使用此文档推荐的版本以避免不必要的问题，如必须使用其他版本请与技术同学确认。
     - x86 Kylin Server V10 SP1 (Tercel) 等服务器如遇到无 `/lib64/libnsl.so.1` 报错则需要先安装相关依赖。
 - OceanBase 数据库 V4.2.x 版本(x86 服务器)

  点击 **Version 12.2.0.1.0** 后下载 **oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm**。

  #### 注意

     - 建议使用此文档推荐的版本以避免不必要的问题，如必须使用其他版本请与技术同学确认。
     - x86 Kylin Server V10 SP1 (Tercel) 等服务器如遇到无 `/lib64/libnsl.so.1` 报错则需要先安装相关依赖。
 - OceanBase 数据库 V3.2.x 版本(arm 服务器) 和 OceanBase 数据库 V4.2.x 版本(arm 服务器)

  [https://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/aarch64/index.html](https://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/aarch64/index.html)

  下载 **oracle-instantclient19.10-basic-19.10.0.0.0-2.aarch64.rpm**。

以下步骤以 OceanBase 数据库 V4.2.x 版本(x86 服务器)为例：

![1](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/knowledge-base/database/sql/database-object-management/dblink/how-to-create-dblink-between-oboracle-and-oracle.png)

### 步骤 2：安装 oracle instantclient

注: 如不方便下载，可以联系技术 OceanBase 支持同学获取现成的 rpm 文件。

以下是以 x86 服务器安装 oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm 为例， arm 服务器需要安装 oracle-instantclient19.10-basic-19.10.0.0.0-2.aarch64.rpm，操作步骤类似。

安装并查看 oracle instantclient 安装目录。

```shell
sudo rpm -ivh oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm
rpm -ql oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64

```

例如：

```shell
$rpm -ql oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64
/usr/lib/oracle/12.2/client64/bin/adrci
/usr/lib/oracle/12.2/client64/bin/genezi
/usr/lib/oracle/12.2/client64/lib/libclntsh.so.12.1
/usr/lib/oracle/12.2/client64/lib/libclntshcore.so.12.1
/usr/lib/oracle/12.2/client64/lib/libipc1.so
/usr/lib/oracle/12.2/client64/lib/libmql1.so
/usr/lib/oracle/12.2/client64/lib/libnnz12.so
/usr/lib/oracle/12.2/client64/lib/libocci.so.12.1
/usr/lib/oracle/12.2/client64/lib/libociei.so
/usr/lib/oracle/12.2/client64/lib/libocijdbc12.so
/usr/lib/oracle/12.2/client64/lib/libons.so
/usr/lib/oracle/12.2/client64/lib/liboramysql12.so
/usr/lib/oracle/12.2/client64/lib/ojdbc8.jar
/usr/lib/oracle/12.2/client64/lib/xstreams.jar

```

### 步骤 3：配置 OCI 库

OCI 库，即 oracle instantclient lib 目录下 lib 文件。

admin 为 OceanBase 默认安装用户。如使用的是非 admin 用户，改成相应用户即可。

```shell
su - admin # OB Docker 已默认使用 root，不需要此步骤

```

创建 `/home/admin/oceanbase/lib` 目录。

```shell
mkdir -p /home/admin/oceanbase/lib && cd /home/admin/oceanbase/lib

```

将 `/usr/lib/oracle/12.2/client64/lib` 目录下 `lib` 文件 copy 到 `/home/admin/oceanbase/lib`。

```shell
cp -a /usr/lib/oracle/12.2/client64/lib/lib* /home/admin/oceanbase/lib/
cp -a /usr/lib/oracle/12.2/client64/lib/lib* /lib64/

```

执行如下命令。

```shell
cd /home/admin/oceanbase/lib
cp -a libclntsh.so.*.1 libclntsh.so
chown admin: lib* # OB Docker 已默认使用 root，不需要此步骤
chmod +x lib*
ldd libclntsh.so
echo 'export LD_LIBRARY_PATH="/home/admin/oceanbase/lib/:"' >> ~/.bash_profile
grep LD_LIBRARY_PATH ~/.bash_profile
source ~/.bash_profile

```

如下 `ldd libclntsh.so` 输出结果为正常。

```shell
$ ldd libclntsh.so
    linux-vdso.so.1 =>  (0x00007fff58143000)
    libnnz11.so => /home/admin/oceanbase/lib/libnnz11.so (0x00007f1b5b644000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f1b5b434000)
    libm.so.6 => /lib64/libm.so.6 (0x00007f1b5b132000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f1b5af16000)
    libnsl.so.1 => /lib64/libnsl.so.1 (0x00007f1b5acfb000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f1b5a92e000)
    libaio.so.1 => /lib64/libaio.so.1 (0x00007f1b5a72c000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f1b5e381000)
$echo 'export LD_LIBRARY_PATH="/home/admin/oceanbase/lib/:"' >> ~/.bash_profile
$grep LD_LIBRARY_PATH ~/.bash_profile
export LD_LIBRARY_PATH="/home/admin/oceanbase/lib/:"

```

**注意事项：**

- 如输出结果中有 not found，需要手动相应安装缺失的包。例如：`yum install libnsl` 或 `dnf install libnsl`。

  ```shell
  ...
  libnsl.so.1 => not found
  ...

  ```
 - LD_LIBRARY_PATH 输出前后不能多 `:` 也不能少 `:`。

  ```shell
  $grep LD_LIBRARY_PATH ~/.bash_profile
  export LD_LIBRARY_PATH="/home/admin/oceanbase/lib/:"

  ```

  以下两个均为不正确的。

  ```shell
  # 后面少了 :
  export LD_LIBRARY_PATH="/home/admin/oceanbase/lib/"
  # 前面多了 :
  export LD_LIBRARY_PATH=":/home/admin/oceanbase/lib/:"

  ```

### 步骤 4：其他所有 OBServer 配置 OCI 库

其他所有 OBServer 按步骤 2 和步骤 3 配置 OCI lib。

集群中的每一个 observer 的安装目录下都要按照本文档方法配置 OCI 库，否则 proxy 一旦路由 SQL 到未配置 OCI 库的 observer 上会报错 -5976。

### 步骤 5：创建 DBLINK

创建 OceanBase Oracle 租户到 Oracle 的 DBLINK。

例如：`sqlplus alxxx/abcxxx@orcl` 对应 DBLINK 创建 SQL 如下。

```shell
obclient [ALVIN]> CREATE DATABASE LINK orcl_dblink CONNECT TO alxxx@oracle IDENTIFIED BY abcxxx OCI HOST '10.xx.xx.xx:1521/orcl';
Query OK, 1 row affected (0.359 sec)

```

关于创建 DBLink 的更多详细信息，参见 [创建 DBLink](https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000034930)。

```shell
obclient> CREATE DATABASE LINK dblink_name CONNECT TO user@oracle IDENTIFIED BY password OCI HOST 'ip:port/oracle_service_name';

```

- dblink_name：DBLink 的名称，长度不超过 128 个字符。
 - user：远端 Oracle 数据库的用户名。
 - oracle：连接 Oracle 数据库时，该值始终为 oracle。
 - password：远端 Oracle 数据库用户的登录密码。密码中如果有 @#! 等除数字、字母以外的其他特殊字符时，需要使用双引号将密码括起来避免报语法出错。
 - OCI：表示指定访问的远端数据库的类型为 Oracle。如果不指定该参数，则默认访问的远端数据库类型为 OceanBase。
 - ip：指定远端 Oracle 数据库实例的 IP 地址。
 - port：指定远端 Oracle 数据库实例的端口号。
 - oracle_service_name：远端 Oracle 数据库服务的名称。

### 步骤 6：访问 DBLINK

表 test 为在 Oracle 已有的表。

```shell
obclient [ALVIN]> SELECT * FROM test@orcl_dblink;
+------+-----------+
| N1   | D1        |
+------+-----------+
|   10 | 07-MAR-23 |

```

生产环境 Oracle 到 OceanBase 的数据的同步建议使用 OMS。

测试环境大批量的同步建议使用 OMS，个别表的话可以使用 DBLINK。

## 常见问题处理方式

### 查看日志

如出现问题，获取对应的日志文本文件并提供给 OceanBase 技术支持以便进一步排查问题。

查看日志时建议通过 2881 端口直连数据库执行 SQL，以避免查询所有 OBServer 日志。

```shell
obclient -h10.x.x.61 -P2881 -uORACLEUSER@oraclet -pxxxxxxxx

```

通过 obclient 命令行或 ODC 中 obclient 命令行查看 traceid (通过 ODC SQL 窗口不可以，因与数据库交互较多导致查不到对应的 last trace id)。

```shell
obclient> SELECT * FROM test@orcl_dblink;
obclient> SELECT last_trace_id() FROM dual; -- e.g. YB42Cxxxxxxx-00060xxxxxxxxxx-0-0

```

然后根据 trace id 查看 OBServer 日志。如已安装 OCP，建议通过 OCP 查询日志 (系统管理 -> 日志服务)。

```shell
ls -lth /home/admin/oceanbase/log/|head
grep 'YB42Cxxxxxxx-00060xxxxxxxxxx-0-0' observer.log
# 如找不到，则是因为日志已经轮转，查询最近的一个 observer 日志
grep 'YB42Cxxxxxxx-00060xxxxxxxxxx-0-0' observer.log.20230828230936614

```

### ORA-02019 - 未配置 OCI 库

```shell
obclient [ALVIN]>  SELECT * FROM test@orcl_dblink;
ORA-02019: connection description for remote database not found
obclient> SELECT last_trace_id() FROM dual;
YB42Cxxxxxxx-00060xxxxxxxxxx-0-0

# grep 'YB42Cxxxxxxx-00060xxxxxxxxxx-0-0' observer.log
observer.log.20230828230936614:[2023-08-28 23:08:56.033833] WDIAG [SQL.RESV] ob_dml_resolver.cpp:8422 [2281][0][YB42Cxxxxxxx-00060xxxxxxxxxx-0-0] [lt=28] [dc=0][errcode=-5835] dblink not exist(ret=-5835, tenant_id=1001, dblink_name=ORCL_DBLINK)

```

是因为未配置 OCI 库。按以上步骤 1-7 操作即可。

### dblink remote ora error code: -5976

```shell
obclient [ALVIN]>  SELECT * FROM test@orcl_dblink;
ORA-00600: internal error code, arguments: -5975, dblink remote ora error code: -5976

```

仔细按步骤 3-5 检查每一步是否按文档操作。

1. 将操作截图发保存，并提供给 OceanBase 技术支持以便进一步排查问题。
 2. 将查询的日志文本文件提供给 OceanBase 技术支持以便进一步排查问题。

### failed to open lib libclntsh.so

日志报错:

```shell
[2023-08-29 18:16:56.261544] WDIAG [LIB.OCI] ob_oci_environment.cpp:990 [944][0][YB42Cxxxxxxx-00060xxxxxxxxxx-0-0] [lt=31] [dc=0][errcode=0] LD_LIBRARY PATH: (ObString(env_str)=/home/admin/oceanbase/lib:/usr/local/lib:/usr/lib:/usr/lib64:/usr/local/lib64:)
[2023-08-29 18:16:56.262743] WDIAG [LIB.OCI] ob_oci_environment.cpp:1110 [944][0][YB42Cxxxxxxx-00060xxxxxxxxxx-0-0] [lt=23] [dc=0][errcode=-5976] failed to open lib from path(ret=-5976, ObString(lib_path)=/home/admin/oceanbase/lib/libclntsh.so, ObString(dlerror())=libnsl.so.1: cannot open shared object file: No such file or directory)

```

首先，检查 LD_LIBRARY_PATH。

```shell
$ grep LD_LIBRARY_PATH ~/.bash_profile
export LD_LIBRARY_PATH="/home/admin/oceanbase/lib/:"

```

其次，执行以下命令。

```shell
ldd libclntsh.so

$ ldd libclntsh.so
    linux-vdso.so.1 =>  (0x00007fff58143000)
    libnnz11.so => /home/admin/oceanbase/lib/libnnz11.so (0x00007f1b5b644000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f1b5b434000)
    libm.so.6 => /lib64/libm.so.6 (0x00007f1b5b132000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f1b5af16000)
    libnsl.so.1 => not found
    libc.so.6 => /lib64/libc.so.6 (0x00007f1b5a92e000)
    libaio.so.1 => /lib64/libaio.so.1 (0x00007f1b5a72c000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f1b5e381000)

```

输出结果中有 not found ，按步骤 3 中注意事项 1 中处理。

执行以下命令。

```shell
yum install libnsl

```

上一篇

[OceanBase 数据库如何手动关闭 DBLink](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000209981)

下一篇

[DBLink 获取超较长中文字符报 ORA-01406 错误](https://www.oceanbase.com/knowledge-base/oceanbase-database-20000045543) ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
