首批通过分布式安全可靠测评,为关键业务系统打造
创建 DBLink
更新时间:2026-03-28 08:21:05
OceanBase 数据库的 DBLink 功能实现了跨数据源访问的能力,您可以在本地数据库上访问远端数据库。
当前,对于 OceanBase 数据库的 Oracle 模式,支持创建 OceanBase 数据库的 Oracle 租户到其他 OceanBase 数据库的 Oracle 租户以及 OceanBase 数据库的 Oracle 租户到 Oracle 数据库的 DBLink。
前提条件
创建 DBLink 的用户需要具备 CREATE DATABASE LINK 或 CREATE PUBLIC DATABASE LINK 权限。为用户授权的相关操作请参见 直接授予权限。
注意事项
强烈建议
MY_NAME后的local_ip:local_port设置为本地集群的代理(ODP)节点,ODP 节点会自动路由反向 Link 到正确的节点上获取本地数据。如果创建 DBLink 时,
MY_NAME后的local_ip:local_port不是本地集群的 ODP 节点,而是本地集群的某个 OBServer 节点(例如节点 A),则在使用该 DBLink 在执行把 OceanBase 数据库 Oracle 模式本地表的数据写入(相关INSERT、UPDATE、DELETE和MERGE INTO的 SQL 语句)到 OceanBase 数据库 Oracle 模式远端表时,将出现以下情况:- 如果这条 SQL 是在 A 节点上被执行的,那么 DBLink 写的结果是符合预期的。
- 如果这条 SQL 是在本地集群的其他节点(例如节点 B)上执行的,那么 DBLink 写的节点将不符合预期,会执行结果错误。因为反向 Link 没有在预期的事务分支里执行,所获取的数据不包含事务内的改动,即
MY_NAME后的local_ip:local_port是节点 A,反向 Link 一定会到 OBServer 节点 A 上去读 A 节点的分布式 XA 事务分支数据。但是 A 节点没有执行相应的 DBLink 写的 SQL 语句,故 A 节点不存在相应的分布式 XA 事务分支的,相应的分布式 XA 事务分支在节点 B 上才有。
建议
CONNECT TO后的ip:port也使用远端集群的 ODP 节点,如果使用的是远端集群的某个 OBServer 节点,OBServer 节点一旦发生故障,该 DBLink 会无法连接到远端集群,即无法保证高可用。
创建 OceanBase 数据库到 OceanBase 数据库的 DBLink
如果要访问远端的 OceanBase 数据库,可以创建 OceanBase 数据库的 Oracle 租户到其他 OceanBase 数据库的 Oracle 租户的 DBLink。
创建 DBLink 需要指定 DBLink 名称并且提供远端数据库的用户名、租户名、密码、IP 地址、端口号以及访问类型等信息。DBLink 写数据功能中有一个反向 Link 特性,反向 Link 特性主要用于远端数据库访问本地数据库的对象,对象包括表、视图和同义词等。如果需要使用反向 Link 特性,则在创建 DBLink 时需要提供本地数据库的用户名、租户名、密码、IP 地址、端口号等信息。
Oracle 模式下创建 OceanBase 数据库 Oracle 租户到其他 OceanBase 数据库 Oracle 租户的 DBLink 的 SQL 语法如下:
CREATE DATABASE LINK dblink_name CONNECT TO user@tenant IDENTIFIED BY remote_password [OB] HOST 'ip:port'
[CLUSTER "cluster_name"]
[MY_NAME local_user@local_tenant IDENTIFIED BY local_password HOST 'local_ip:local_port' [CLUSTER "local_cluster_name"]];
相关参数说明如下:
dblink_name:DBLink 的名称,长度不超过 128 个字符。user:远端 OceanBase 数据库的用户名。tenant:远端 OceanBase 数据库的租户名。remote_password:远端 OceanBase 数据库用户名的登录密码。密码中如果有@#!等除数字、字母以外的其他特殊字符时,需要使用双引号将密码括起来避免报语法错误。OB:可选,表示指定访问的远端数据库的类型为 OceanBase。您也可以不指定该参数,默认访问的远端数据库类型即为 OceanBase。
ip:指定远端 OceanBase 数据库的 IP 地址。IP 地址可以指定为集群的 OBProxy 的 IP 地址,或者也可以指定为集群中某个 OBServer 节点的 IP 地址。当 IP 地址为指定 OBServer 节点的 IP 地址时,要求本地数据库与指定 OBServer 节点之间的网络是可以互通的。
说明
除了 IP 地址外,OceanBase 数据库还支持域名地址。例如,
example.com:port。您可以根据实际环境,使用相应的域名地址来连接远端的数据库。port:指定远端 OceanBase 数据库的端口号。端口号可以指定为集群的 Proxy 的端口号(默认为 2883),或者也可以指定为集群中某个 OBServer 节点的 SQL 端口号(默认为 2881)。当端口号为指定 OBServer 节点的 SQL 端口号时,要求本地数据库与指定 OBServer 服务器之间的网络是可以互通的。
cluster_name:远端 OceanBase 数据库对应的集群的名称。仅当 IP 和端口号为集群的 Proxy 的 IP 和端口号,且 Proxy 是由 ConfigUrl 方式部署时,才需要指定集群名称。由于集群名称对大小写敏感,集群名称需要使用双引号括起来。说明
在部署集群的 Proxy(例如 ODP) 时,有以下两种部署方式:
- ConfigUrl 部署方式:表示在启动 OBProxy 时,通过在命令中指定
obproxy_config_server_url参数项来查询获取 OceanBase 集群的 RootServer 信息的方式。 - RsList 部署方式:表示在启动 OBProxy 时,通过在命令中指定
-r参数来指定 OceanBase 集群的 RootServer 信息的方式。
- ConfigUrl 部署方式:表示在启动 OBProxy 时,通过在命令中指定
[MY_NAME local_user@local_tenant IDENTIFIED BY local_password HOST 'local_ip:local_port' [CLUSTER "local_cluster_name"]]:可选,本地数据库的用户名、租户名、密码、IP 地址、端口号以及集群信息,如果需要在 DBLink 写数据功能中使用反向 Link 特性,则需要填写该信息。local_user:本地数据库的用户名。local_tenant:本地数据库所属的租户名。local_password:本地数据库用户的登录密码,密码中如果有@#!等除数字、字母以外的其他特殊字符时,需要使用双引号将密码括起来避免报语法出错。local_ip:本地数据库集群中某个 OBServer 服务器的 IP 地址。local_port:本地数据库集群中某个 OBServer 服务器的 SQL 端口号。OBServer 服务器的 SQL 端口号默认为 2881。local_cluster_name:本地 OceanBase 数据库对应的集群的名称。仅当 IP 和端口号为集群的 Proxy 的 IP 和端口号,且 Proxy 是由 ConfigUrl 方式部署时,才需要指定集群名称。集群名称需要使用双引号括起来。
示例如下:
创建连接到远端 OceanBase 数据库的 DBLink,且 IP 地址和端口号为指定 OBServer 服务器的 IP 地址和端口号。
obclient> CREATE DATABASE LINK ob_dblink CONNECT TO ob_user@oracle IDENTIFIED BY ****** OB HOST 'xx.xx.xx.xx:2881'; Query OK, 1 row affected创建连接到远端 OceanBase 的 DBLink,且 IP 地址和端口号为集群的 Proxy 的 IP 地址和端口号,同时 Proxy 由 ConfigUrl 方式部署。
obclient> CREATE DATABASE LINK ob_dblink_proxy CONNECT TO ob_user@oracle IDENTIFIED BY ****** OB HOST 'xx.xx.xx.xx:2883' CLUSTER "ob410"; Query OK, 1 row affected注意
在填写集群名称时,需要加双引号,防止集群名称的字母被升格为大写字母。
创建连接到远端 OceanBase 数据库带有反向 Link 特性的 DBLINK,名称为
ob_dblink_reverse_link。obclient> CREATE DATABASE LINK ob_dblink_reverse_link CONNECT TO ob_user2@oracle IDENTIFIED BY ****** OB HOST 'xx.xx.xx.xx:2881' MY_NAME local_ob_user@oracle IDENTIFIED BY ****** HOST 'xx.xx.xx.xx:2881'; Query OK, 1 row affected
创建 OceanBase 数据库到 Oracle 数据库的 DBLink
如果要访问远端的 Oracle 数据库,您可以创建 OceanBase 数据库的 Oracle 租户到 Oracle 数据库的 DBLink。
创建 DBLink 需要指定 DBLink 名称并且提供远端数据库的用户名、租户名、密码、IP 地址、端口号以及访问类型等信息。DBLink 写数据功能中有一个反向 Link 特性,反向 Link 特性主要用于远端数据库访问本地数据库的对象,对象包括表、视图和同义词等。OceanBase 数据库到 Oracle 数据库的 DBLink 暂不支持反向 Link 特性。
创建 OceanBase 数据库到 Oracle 数据库的 DBLink 的 SQL 语法如下:
obclient> CREATE DATABASE LINK dblink_name CONNECT TO user@oracle IDENTIFIED BY remote_password OCI HOST 'ip:port/oracle_service_name';
语句使用说明:
dblink_name:DBLink 的名称,长度不超过 128 个字符。user:远端 Oracle 数据库的用户名。oracle:连接 Oracle 数据库时,该值始终为 oracle。remote_password:远端 Oracle 数据库用户的登录密码。密码中如果有@#!等除数字、字母以外的其他特殊字符时,需要使用双引号将密码括起来避免报语法出错。OCI:表示指定访问的远端数据库的类型为 Oracle。如果不指定该参数,则默认访问的远端数据库类型为 OceanBase。ip:指定远端 Oracle 数据库实例的 IP 地址。说明
除了 IP 地址外,OceanBase 数据库还支持域名地址。例如,
example.com:port。您可以根据实际环境,使用相应的域名地址来连接远端的数据库。port:指定远端 Oracle 数据库实例的端口号。oracle_service_name:远端 Oracle 数据库服务的名称。
创建连接到远端 Oracle 数据库的 DBLink 的示例如下:
obclient> CREATE DATABASE LINK orcl_dblink CONNECT TO orcl_user@oracle IDENTIFIED BY ****** OCI HOST 'xx.xx.xx.xx:1521/ORCL';
Query OK, 1 row affected
相关文档
更多 DBLink 相关的操作,请参见以下信息: