Oracle:认识Oracle同义词(synonyms)和链接(database links)

本文介绍Oracle数据库中如何创建数据库链接(databaselinks),实现不同数据库间的连接,并通过同义词简化对远程表的访问。包括同义词的创建、使用及权限管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

同义词一般来说是建立在database links的基础上的,所以我们先看看database links是什么。我相信不管Oracle数据库学到什么程度都知道不同的数据库或者不同的用户可以相互连接。 
首先是同数据库连接其他用户,因为在同一个数据库中就不需要建立连接了

create database link db_link1
    connect to sde identified by xxx
    using 'ora9is';
 
 
  • 1
  • 2
  • 3
其中create database link是创建语句 db_link1是链的名称(我们可以自定义) connect to  sde要连接的数据库的用户名    identified by xxx是用户的登录密码,using ora9is是'要使用的数据库名'。

 
 
  • 1
  • 2

如果想连接其他数据库就需要建立连接,也不麻烦,就和在tnsnames.ora配置连接差不多

当然,你可能需要在user用户中给当前用户(user2)授权: grant select/delete/update on user2

create database link db_link2
connect to sde identified by xxx
using '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=172.18.1.30)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME =orcl)))';
 
 
  • 1
  • 2
  • 3

这里和上面同数据库连接不同的就是将你要连接的数据库的配置从tnsnames.ora里找出来复制过去就可以了。bnm=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=172.18.1.30)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME =orcl)))类似这样

(那样如果跨数据库的话,如果b是用db link连接到a!如果a已经有dba权限,那b相当与已经有执行这些的权限了!,用dblink的时候,相当于用那个用户操作数据库)

其实建立链接就是为了资源的复用,节省存储空间,使数据库的设计更加规范

链接一旦建立就可以用select * from 表名@链接。 
然后我们会想这样去查询一个表不美观也比较长,那么同义词就出场了,顾名思义同义词就是别名的意思

create or replace synonym SYN_table
  for same.table;
 
 
  • 1
  • 2

(same就是同数据库同一用户的一张表,same.table就是调用该用户的一张表,这种情况很少用,一般都是远程访问数据表情况比较常用) 
在本地数据库就可以通过select * from SYN_table来访问sde的table了。

此外如果要创建一个远程的数据库上的某张表的同义词,需要先创建一个Database Link(数据库连接)来扩展访问,然后在使用如下语句创建数据库同义词:create synonym table_name for table_name@DB_Link; DB_Link就是上面创建的链接名

1)公用Oracle同义词:由一个特殊的用户组Public所拥有。顾名思义,数据库中所有的用户都可以使用公用同义词。公用同义词往往用来标示一些比较普通的数据库对象,这些对象往往大家都需要引用。 
2)私有Oracle同义词:它是跟公用同义词所对应,他是由创建他的用户所有。当然,这个同义词的创建者,可以通过授权控制其他用户是否有权使用属于自己的私有同义词。

Oracle同义词共有两种类型,分别是公用Oracle同义词与私有Oracle同义词,普通用户创建的同义词一般都是私有同义词,公有同义词一般由DBA创建,普通用户如果希望创建同义词,则需要CREATE PUBLIC SYNONYM这个系统权限。 
1.SYSTEM(DBA)执行: 
GRANT CREATE ANY SYNONYM TO ORCL_OWNER (sysytem授权给orcl_ower创建所有同义词的权限)

2.ORCL_OWNER用户执行: 
CREATE SYNONYM "ORCL_QUERY"."T_TABNAME" FOR "ORCL_OWNER"."T_TABNAME" (orcl_ower创建私有同义词)

CREATE SYNONYM "ORCL_QUERY"."T_TABNAME" FOR "ORCL_OWNER"."T_TABNAME" (orcl_ower创建公共同义词,这个不需要授权,同一数据库所有用户都可以使用,但需要第一步的创建授权) 
3.ORCL_OWNER用户执行: 
GRANT SELECT ON ORCL_OWNER.T_TABNAME TO ORCL_QUERY (orcl_ower将自己私有同义词权限授给ORCL_QUERY)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值