放牛的

放牛的日子,是人生初恋的诗...

0%

Oracle的DBLink和同义词SYNONYM

1. Oracle的DBLink是什么?

有多台Oracle服务器,A服务器的用户a,想访问B服务器的用户b的数据,就在A服务器上a用户下面建一个DBLink,指向B服务器的b用户。

创建DBLink的语法:

1
2
3
CREATE DATABASE LINK B_b 
CONNECT TO b IDENTIFIED BY password_of_b
USING 'host_of_B:1521/SID_of_B';

建好DBLink后,a用户如何访问B用户的表T呢?

我们知道a用户访问同服务器下另外一个用户x的表T,可以使用「x.T」;
与之类似,访问DBLink「B_b」的表T,可以使用「T@B_b」。

1
2
select *
from T@B_b

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
2
3
4
5
6
7
8
9
10
11
CREATE DATABASE LINK XKCA_DHSZ 
CONNECT TO db_dhsz_dev IDENTIFIED BY db_dhsz_dev
USING '10.199.132.7:1521/nsxygl';


CREATE OR REPLACE SYNONYM "XKCA1"."DHSZ_FP_ZZSFP_QB" FOR "DHSZ_FP_ZZSFP_QB"@"XKCA_DHSZ";


select *
from DHSZ_FP_ZZSFP_QB

4. 简单的总结

  • DBLink是Schema级别的,跨服务访问的概念
  • 同义词SYNONYM是对象(如 表)级别的,跨用户(可以通过DBLink跨服务)访问的概念