全部产品

引用远程数据库中的对象

更新时间:2020-03-26 10:15:16

要引用除本地数据库以外的其他数据库中的对象,需要在对象名称后加上指向该数据库的数据库链接的名称。数据库链接是一个 Schema 对象,它使 OceanBase 连接到远程数据库以访问里面的对象。

创建数据库链接

可以使用语句 CREATE DATABASE LINK 创建数据库链接,使用该语句时需要指定以下数据库链接的信息,OceanBase 将下述信息存储在数据字典中:

  • 租户名、用户名和密码。
  • 网络地址、端口号。

创建链接限制

  1. 只支持创建 OceanBase 中的 Oracle 模式租户连接到另一个 Oracle 模式租户的数据库链接,OceanBase 目前不支持创建连接到外部 Oracle 数据库的数据库链接。
  2. 一个租户可以反复创建、删除数据库链接,但最多只能同时存在 15 个数据库链接。

数据库连接串格式

  1. user_name@tenant_name IDENTIFIED BY password HOST 'ip:port'
  • user_name:用户名。
  • tenant_name:租户名。
  • password:密码。
  • ip:网络地址。
  • port:端口号。

以下是创建数据库链接的示例:

  1. CREATE DATABASE LINK my_link CONNECT TO
  2. root@oracle IDENTIFIED BY abcdef HOST '192.168.0.0:1521';

引用数据库链接

当您发出包含数据库链接的 SQL 语句时,需要使用存储在数据字典中的完整数据库链接名。

OceanBase 在连接远程数据库时,将使用数据库连接字符串访问远程数据库。使用数据库字符串、用户名和密码后连接成功,则 OceanBase 使用文档 引用 Schema 对象 中的规则来访问远程数据库上的指定对象,但请注意相关限制:

  1. 只能执行只读语句。
  2. 只能访问表对象,不支持访问其它对象,如视图、序列等。
  3. 访问表对象时必须显式指定数据库名,如:test.t1@my_link
  4. 不支持部分计划和算子:
    • 不能在远程数据库执行 RESCAN 操作。
    • 不能在远程数据库执行 NESTED LOOP JOINSEMI JOINANTI JOINSUBPLAN FILTER 等算子。
    • 如遇以上问题请尝试运行 EXPLAIN PLAN 语句查看原始计划和发送到远端集群执行的 SQL 语句,并通过使用 Hint 调整计划。