这是一个非常好的问题,因为两者都常用于跨数据库访问,但本质完全不同。
我可以这样概括:
DB Link 是“连接通道”,同义词(Synonym)是“别名/快捷方式”。
下面从多个维度详细对比。
| 维度 | DB Link(数据库链接) | 同义词(Synonym) |
|---|---|---|
| 本质 | 一个数据库连接对象 | 一个对象别名 |
| 作用 | 建立到另一个数据库的通信通道 | 为本地或远程对象提供一个“本地名字” |
| 是否跨库 | ✅ 必须跨数据库 | ❌ 不一定(可本地也可远程) |
| 是否真正存储数据 | ❌ 不存储数据 | ❌ 不存储数据 |
| 是否依赖 DB Link | 自身就是 DB Link | ✅ 远程同义词通常依赖 DB Link |
DB Link(Database Link) 用来让一个数据库实例访问另一个数据库实例中的对象。
CREATE DATABASE LINK remote_db
CONNECT TO scott IDENTIFIED BY tiger
USING 'remote_service';
使用方式:
SELECT * FROM emp@remote_db;
✅ 特点:
@dblink同义词 是数据库对象的别名,用来简化访问。
CREATE SYNONYM emp FOR hr.employees;
CREATE SYNONYM remote_emp FOR emp@remote_db;
使用方式:
SELECT * FROM remote_emp;
✅ 特点:
✅ 同义词可以建立在 DB Link 之上,但 DB Link 不依赖同义词
常见组合用法:
应用
↓
同义词(remote_emp)
↓
DB Link(remote_db)
↓
远程数据库
❌ 误区 1:同义词能跨库
✅ 正解:同义词本身不跨库,远程同义词依赖 DB Link
❌ 误区 2:DB Link 是视图
✅ 正解:DB Link 是连接定义,不是数据对象
❌ 误区 3:有同义词就不需要 DB Link
✅ 如果访问远程对象,仍然需要 DB Link
DB Link 解决“怎么连到别的数据库”,同义词解决“怎么更方便地访问对象”。
如果你愿意,我也可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。