在lightdb 23.4版本开始,兼容了oracle中通过@dblink方式跨库访问oracle库中表的方式。以下为具体的实现方案:
*假设在oracle库中存在表youyus(t1 int, co1 number(2), co2 varchar(100), co3 varchar2(40))
注:以下用例中使用的ip/端口/用户/密码等信息仅为举例说明,并非实际连接信息。
1. 在lightdb对应的业务库中创建oracle_fdw插件(*注:在该服务器环境中需有oracle客户端程序)
lightdb@testdb=# create extension oracle_fdw ;
CREATE EXTENSION
2. 创建映射关系、外部表
1)
lightdb@testdb=# create server oradb foreign data wrapper oracle_fdw options (dbserver '//111.111.111.111:1521/test');
CREATE SERVER
其中oradb由自己命名,括号内为oracle库的连接信息。
2)
lightdb@testdb=# create user MAPPING FOR lightdb server oradb options (USER 'system', PASSWORD '111111');
CREATE USER MAPPING
其中oradb为1)中创建的server名字,括号内为oracle的用户和密码。
3)
lightdb@testdb=# create foreign table oradb_youyus(t1 int, co1 number(2), co2 varchar(100), co3 varchar(40)) server oradb options (schema 'SYSTEM', table 'YOUYUS');
CREATE FOREIGN TABLE
其中的foreign table表的命名规范为server_oracle.table,即 映射服务名_oracle库中的表名,上述例子中oradb为我们创建的映射服务,youyus为oracle库中的表,故此处foreign table表命名为oradb_youyus;foreign table表的表结构需要与oracle中需要访问的表结构相同(*注:特殊的,如果oracle库表中列类型为varchar2,此处lightdb中的foreign table表对应的列类型应为varchar,例如oracle varchar2(50)–>lightdb varchar(50);如果oracle库中列类型为date,此处lightdb中的foreign table表对应的列类型应为timestamp(0));括号中为oracle的schema和需要映射的表名,均需要大写。
4)经过上述三步骤准备工作,即可通过@dblink方式访问oracle中的表数据:
lightdb@testdb=# select * from youyus@oradb;
t1 | co1 | co2 | co3
—-+—–+—–+—–
1 | 2 | abc | def
(1 row)
其中youyus为oracle库中的表,oradb为我们创建的服务名字。