---
title: "管理 DBLink | OceanBase 文档中心"
description: 管理 DBLink OceanBase 数据库的 DBLink 功能实现了跨数据源访问的能力，您可以在本地数据库上访问远端数据库。当前仅 Oracle 模式支持 DBLink 功能。 创建 OceanBase 数据库到 OceanBase 数据库的 DBLink 如果要访问远端的 OceanBase 数据库，您可以创…
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

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

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 3.2.3 企业版 LTS

# 管理 DBLink

更新时间：2023-12-11 17:45:31

OceanBase 数据库的 DBLink 功能实现了跨数据源访问的能力，您可以在本地数据库上访问远端数据库。当前仅 Oracle 模式支持 DBLink 功能。

## 创建 OceanBase 数据库到 OceanBase 数据库的 DBLink

如果要访问远端的 OceanBase 数据库，您可以创建 OceanBase 数据库 Oracle 租户到其他 OceanBase 数据库 Oracle 租户的 DBLink。

创建 DBLink 的 SQL 语法如下：

```sql
obclient> CREATE DATABASE LINK dblink_name CONNECT TO user@tenant IDENTIFIED BY password [OB] HOST 'ip:port' [CLUSTER cluster_name];

```

语句使用说明：

- 执行该语句的用户需要具备 `CREATE DATABASE LINK` 权限。为用户授权的相关操作请参见 [修改用户权限](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000357879)。
 - `dblink_name`：DBLink 的名称，长度不超过 128 个字符。
 - `user`：远端 OceanBase 数据库的用户名。
 - `tenant`：远端 OceanBase 数据库的租户名。当前仅支持 Oracle 租户。
 - `password`：远端 OceanBase 数据库用户名的登录密码。
 - `OB`：表示指定访问的远端数据库的类型为 OceanBase。

  您也可以不指定该参数，默认访问的远端数据库类型即为 OceanBase。
 - `ip`：指定远端 OceanBase 数据库的 IP 地址。IP 地址可以指定为集群的 OBProxy 的 IP 地址，或者也可以指定为集群中某个 OBServer 的 IP 地址。

  当 IP 地址为指定 OBServer 的 IP 地址时，要求本地数据库与指定 OBServe之间的网络是可以互通的。
 - `port`：指定远端 OceanBase 数据库的端口号。端口号可以指定为集群的 Proxy 的端口号，或者也可以指定为集群中某个 OBServer 的端口号。

  当端口号为指定 OBServer 的端口号时，要求本地数据库与指定 OBServer 之间的网络是可以互通的。
 - `cluster_name`：远端 OceanBase 数据库对应的集群的名称。仅当 IP 和端口号为集群的 Proxy 的 IP 和端口号，且 Proxy 是由 ConfigUrl 方式部署时，才需要指定集群名称。

  > **说明**
  >
  >  
  >
  > 在部署 OBProxy 时，有以下两种部署方式：
  >
  >  
  >    - ConfigUrl 部署方式：表示在启动 OBProxy 时，通过在命令中指定 `obproxy_config_server_url` 参数项来查询获取 OceanBase 集群的 RootServer 信息的方式。
  >    - RsList 部署方式：表示在启动 OBProxy 时，通过在命令中指定 `-r` 参数来指定 OceanBase 集群的 RootServer 信息的方式。

示例如下：

- 创建连接到远端 OceanBase 数据库的 DBLink，且 IP 地址和端口号为指定 OBServer 的 IP 地址和端口号。

  ```sql
  obclient> CREATE DATABASE LINK ob_dblink CONNECT TO ob_user@oracle IDENTIFIED BY *** OB HOST '10.10.10.1:12345';

  ```
 - 创建连接到远端 OceanBase 的 DBLink，且 IP 地址和端口号为集群的 Proxy 的 IP 地址和端口号，同时 Proxy 由 ConfigUrl 方式部署。

  ```sql
  obclient> CREATE DATABASE LINK ob_dblink_proxy CONNECT TO ob_user@oracle IDENTIFIED BY *** OB HOST '10.10.10.2:30084' CLUSTER "ob323";

  ```

  > **注意**
  >
  >  
  >
  > 在填写集群名称时，需要加双引号，防止集群名称的字母被升格为大写字母。

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

如果要访问远端的 Oracle 数据库，您可以创建 OceanBase 数据库的 Oracle 租户到 Oracle 数据库的 DBLink。当前 DBLink 仅支持只读操作。

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

```

语句使用说明：

- 执行该语句的用户需要具备 `CREATE DATABASE LINK` 权限。为用户授权的相关操作请参见 [修改用户权限](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000357879)。
 - `dblink_name`：DBLink 的名称，长度不超过 128 个字符。
 - `user`：远端 Oracle 数据库的用户名。
 - `oracle`：连接 Oracle 数据库时，该值始终为 oracle。
 - `password`：远端 Oracle 数据库用户名的登录密码。
 - `OCI`：表示指定访问的远端数据库的类型为 Oracle。如果不指定该参数，则默认访问的远端数据库类型为 OceanBase。
 - `ip`：指定远端 Oracle 数据库实例的 IP 地址。
 - `port`：指定远端 Oracle 数据库实例的端口号。
 - `oracle_service_name`：远端 Oracle 数据库服务的名称。

创建连接到远端 Oracle 数据库的 DBLink 的示例如下：

```sql
obclient> CREATE DATABASE LINK orcl_dblink CONNECT TO orcl_user@oracle IDENTIFIED BY *** OCI HOST '10.10.10.2:1521/ORCL';

```

## 查看已创建的 DBLink

您可以通过 `sys.all_virtual_dblink_agent` 表来查看已创建的 DBLink。

语句如下：

```sql
obclient> SELECT * FROM sys.all_virtual_dblink_agent;

```

## 通过 DBLink 访问远端数据库中的数据

您可以通过 `SELECT... FROM 表名@DBLink 名` 来查询远端数据库中的数据，当前暂不支持通过 DBLink 修改、插入或删除数据。

#### 注意

使用 DBLink 功能访问远端 Oracle 数据库时，需要在集群的所有 OBServer 节点上安装并配置 OCI-11.2，安装和配置 OCI-11.2 的详细操作，请参见 [安装和配置 OCI](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-1000000000321584)。

SQL 语句如下：

```sql
SELECT select_expr_list
      FROM table_name@dblink_name
      WHERE where_conditions;

select_expr_list:
    table_name.*
    | table_alias_name.*
    | expr [[AS] column_alias_name]

```

语句使用说明：

- `select_expr_list`：指定待查询的表达式或列名，不同的列之间用英文逗号（,）隔开，星号（*）表示所有列。

     - `table_name.*`：指定从指定的表、视图中选择所有的列。
     - `table_alias_name.*`：指定表、视图的别名。
     - `expr [[AS] column_alias_name]`：指定查询列或表达式的别名，`AS` 为可选。
 - `table_name@dblink_name`：指定待查询的远端数据库的表，多个数据库之间用英文逗号（,）隔开。
 - `where_conditions`：指定筛选条件，查询结果中仅包含满足条件的数据，为可选项。

示例：

- 通过名为 `my_link` 的 DBLink 查询远端数据库中表 `tbl1` 的数据。

  ```sql
  obclient> SELECT * FROM tbl1@my_link;

  ```

更多 DBLink 相关的查询语句，请参见 [SIMPLE SELECT](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000358063)。

## 删除 DBLink

您可以删除不需要使用的 DBLink。语法如下：

```sql
obclient> DROP DATABASE LINK dblink_name;

```

语句使用说明：

- 执行该语句的用户需要具备 `DROP DATABASE LINK` 权限。为用户授权的相关操作请参见 [修改用户权限](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000357879)。
 - `dblink_name` 表示待删除的 DBLink 的名称。

示例如下：

```sql
obclient> DROP DATABASE LINK ob_dblink;
Query OK, 1 row affected

obclient> DROP DATABASE LINK orcl_dblink;
Query OK, 1 row affected

```

 上一篇 下一篇 ![有帮助](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) 咨询热线
