1. Oracle的DBLink是什么?
有多台Oracle服务器,A服务器的用户a,想访问B服务器的用户b的数据,就在A服务器上a用户下面建一个DBLink,指向B服务器的b用户。
创建DBLink的语法:
1 | CREATE DATABASE LINK B_b |
建好DBLink后,a用户如何访问B用户的表T呢?
我们知道a用户访问同服务器下另外一个用户x的表T,可以使用「x.T」;
与之类似,访问DBLink「B_b」的表T,可以使用「T@B_b」。
1 | select * |
2. 同义词 SYNONYM 又是什么呢?
一个Oracle服务上,有多个用户(Schema),a用户想访问b用户下的表T,我们当然可以使用「b.T」来访问,但这样老是要带上b的用户名,不是很方便,有没有更方便的办法呢?
有啊,办法就是同义词:则在a用户下,建一个同义词,指向b用户的表B。
创建同义词SYNONYM的语法:
1 | create synonym "a".T for "b"."T" |
3. 例子:DBLink 与 同义词结合使用
在服务器 192.168.110.54 上的XKCA1这个用户下,想访问 10.199.132.7 这台服务器上 db_dhsz_dev 用户下的 DHSZ_FP_ZZSFP_QB 表。
我们需要先建 DBLink,让XKCA1这个用户,可以访问 db_dhsz_dev 用户的数据;
再建个同义词,让DHSZ_FP_ZZSFP_QB表看起来像是 XKCA1这个用户自己的表。
1 | CREATE DATABASE LINK XKCA_DHSZ |
4. 简单的总结
- DBLink是Schema级别的,跨服务访问的概念
- 同义词SYNONYM是对象(如 表)级别的,跨用户(可以通过DBLink跨服务)访问的概念