如何从CBASE通过BBASE访问ABASE数据库?
问题场景
现有ABASE、BBASE、CBASE三个数据库,当前访问逻辑如下:
- BBASE访问ABASE的语句:
SELECT * FROM TABLE@ABASE_LINK - CBASE访问BBASE的语句:
SELECT * FROM BBASE.table
尝试在CBASE中直接执行SELECT * FROM BBASE.TABLE@ABASE_LINK访问ABASE时,触发错误:
ORA-02019: connection description for remote database not found
02019. 00000 - "connection description for remote database not found"
*Cause: The referenced database link did not exist.
*Action: Create the database link before running the SQL statement.
Error at Line: 1 Column: 21
解决方案
方法1:在CBASE中直接创建指向ABASE的数据库链接
数据库链接是当前数据库的本地对象,无法跨库引用其他数据库的链接标识。因此可以直接在CBASE中创建连接ABASE的链接,之后即可直接访问:
-- 在CBASE中创建指向ABASE的数据库链接 CREATE DATABASE LINK ABASE_LINK CONNECT TO 你的ABASE用户名 IDENTIFIED BY 你的ABASE密码 USING 'ABASE的数据库连接字符串'; -- 直接访问ABASE的表 SELECT * FROM TABLE@ABASE_LINK;
方法2:通过BBASE的同义词/视图间接访问
如果不想在CBASE中直接创建链接,可以在BBASE中对ABASE的表创建同义词或视图,让CBASE通过BBASE间接访问:
-- 在BBASE中创建指向ABASE表的同义词 CREATE SYNONYM ABASE_TABLE FOR TABLE@ABASE_LINK; -- 或者创建视图(如需过滤字段更适用) CREATE VIEW ABASE_TABLE_VIEW AS SELECT * FROM TABLE@ABASE_LINK;
之后在CBASE中即可通过BBASE访问ABASE的数据:
-- 访问同义词 SELECT * FROM BBASE.ABASE_TABLE; -- 或者访问视图 SELECT * FROM BBASE.ABASE_TABLE_VIEW;
内容的提问来源于stack exchange,提问作者JurajC
相关产品推荐
相关产品推荐

