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

来源:互联网 发布:nginx 1.10.2 编辑:程序博客网 时间:2024/03/29 02:07

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

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

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

create database link db_link2connect to sde identified by xxxusing '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=172.18.1.30)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME =orcl)))';

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

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

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

create or replace synonym SYN_table  for same.table;

(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)

0 0
原创粉丝点击