ORACLE同义词总结

发布 2021-05-22 17:28:28 阅读 2298

oracle同义词总结 2012-12-19 16:07:44

分类: linux

同义词概念。

oracle的同义词(synonyms)从字面上理解就是别名的意思,和视图的功能类似,就是一种映射关系。它可以节省大量的数据库空间,对不同用户的操作同一张表没有多少差别;它扩展了数据库的使用范围,能够在不同的数据库用户之间实现无缝交互;oracle数据库中提供了同义词管理的功能。同义词是数据库对象的一个别名,经常用于简化对象访问和提高对象访问的安全性。

在使用同义词时,oracle数据库将它翻译成对应方案对象的名字。与视图类似,同义词并不占用实际存储空间,只有在数据字典中保存了同义词的定义。在oracle数据库中的大部分数据库对象,如表、视图、物化视图、序列、函数、存储过程、包、同义词等等,数据库管理员都可以根据实际情况为他们定义同义词。

同义词分类。

oracle同义词有两种类型,分别是oracle公用同义词与oracle私有同义词。普通用户创建的同义词一般都是私有同义词,公有同义词一般由dba创建,普通用户如果希望创建同义词,则需要create public synonym这个系统权限。

1)oracle公用同义词:由一个特殊的用户组public所拥有。顾名思义,数据库中所有的用户都可以使用公用同义词。

公用同义词往往用来标示一些比较普通的数据库对象,这些对象往往大家都需要引用。

2)oracle私有同义词:它是跟公用同义词所对应,他是由创建他的用户所有。当然,这个同义词的创建者,可以通过授权控制其他用户是否有权使用属于自己的私有同义词。

同义词作用。

1) 多用户协同开发中,可以屏蔽对象的名字及其持有者。如果没有同义词,当操作其他用户的表时,必须通过user名。object名的形式,采用了oracle同义词之后就可以隐蔽掉user名,当然这里要注意的是:

public同义词只是为数据库对象定义了一个公共的别名,其他用户能否通过这个别名访问这个数据库对象,还要看是否已经为这个用户授权。

2) 为用户简化sql语句。上面的一条其实就是一种简化sql的体现,同时如果自己建的表的名字很长,可以为这个表创建一个oracle同义词来简化sql开发。

3)为分布式数据库的远程对象提供位置透明性。

4)oracle同义词在数据库链接中的作用。

数据库链接是一个命名的对象,说明一个数据库到另一个数据库的路径,通过其可以实现不同数据库之间的通信。

create database link 数据库链名 connect to user名 identified by 口令 using ‘oracle连接串’; 访问对象要通过 object名@数据库链名。同义词在数据库链中的作用就是提供位置透明性。

同义词权限管理。

与同义词相关的权限有create synonym、create any synonym、create public synonym权限。

1:用户在自己的模式下创建私有同义词,这个用户必须拥有create synonym权限,否则不能创建私有同义词。

如下所示,用户dm缺少create synonym权限,创建同义词时会报ora-01031错误。

sql> create synonym test for

create synonym test for

ora-01031: insufficient privileges

用sys账号给dm账号赋予create synonym的权限。

sql> grant create synonym to dm;

grant succeeded.

然后创建私有同义词。

sql> create synonym test for

synonym created

2:如果需要在其它模式下创建同义词,则必须具有create any synonym的权限。

看下面的例子。

用户dm想创建scott模式下的私有同义词。

sql> create synonym for

create synonym for

ora-01031: insufficient privileges

用sys账号给dm账号赋予create any synonym的权限。

sql> grant create any synonym to dm;

grant succeeded.

sql> create synonym for

synonym created

3:创建公有同义词则需要create public synonym系统权限。

创建同义词。

创建同义词的语法如下:

普通用法如下所示:

create [or replace] [public] synonym [ schema.] 同义词名称 for [ schema.] object [ dblink ];

-专有(私有)同义词。

create synonym sysn_test for test;

-公共同义词。

create public synonym public_test for test;

如果要创建一个远程的数据库上的某张表的同义词,需要先创建一个database link(数据库连接)来扩展访问,然后再使用如下语句创建数据库同义词:create synonym table_name for table_name@db_link;

公共同义词是和用户的schema无关的,但是公共的意思并不是所有的用户都可以访问它,必须被授权后才能进行;私有同义词是schema的对象。

查看同义词。

sql> select * from dba_synonyms where synonym_name in ( sysn_test','public_test');

owner synonym_name table_owner table_name db_link

public public_test etl test

etl sysn_test etl test

sql> select * from user_synonyms

使用同义词。

select * from sysn_test;

使用同义词可以保证当数据库的位置或对象名称发生改变时,应用程序的**保持稳定不变,仅需要改变同义词;

当使用一个没有指定schema的同义词是,首先在用户自己的schema中寻找,然后再公共同义词中寻找。

删除同义词。

drop [ public ] synonym [ schema. ]同义词名称 [ force ];

drop synonym sysn_test;

drop public synonym public_test;--当同义词的原对象被删除是,同义词并不会被删除。

编译同义词。

alter synonym t compile; -当同义词的原对象被重新建立时,同义词需要重新编译。

对原对象进行ddl操作后,同义词的状态会变成invalid;当再次引用这个同义词时,同义词会自动编译,状态会变成valid,无需人工干预,当然前提是不改变原对象的名称。

sql> select * from t;

idname

sql> select * from test;

idname

sql> alter table test add sex number(1);

table altered

sql> select object_name, status from all_objects where object_name='t';

object_namestatus

tinvalid

问题锦集。1:公用同义词与私有同义词能否同名呢?如果可以,访问同义词时,是共有同义词还是私有同义词优先?

可以,如果存在公用同义词和私有同义词同名的情况,在访问同义词是,访问的是私有同义词的指向的对象。

2:为啥oe用户创建的公用同义词,hr用户不能访问呢?

因为hr没有访问oe模式下对象的权限,如果oe模式给hr用户赋予了select对象等权限,那么hr用户即可访问。

3:对象、私有同义词、公共同义词是否可以存在三者同名的情况?

在用户kerry下,创建表test

sql>create table test

as select * from user_objects where 1= 0;

创建私有同义词test

sql> create synonym test for

create synonym test for

ora-00955: name is already used by an existing object

注意:对象(表)与私有同义词不能同名,否则会报ora-00955错误。

创建公共同义词test,如下所示,公共同义词可以对象同名。

sql> create public synonym test for

synonym created

访问test时,如下所示:它是表test的内容,而不是公共同义词的内容。

同义词总结

同义词语辨析总结 smile 的意思是 微笑 强调 笑 的时候不发出声音。例如 she smiled at me.她向我微笑。动词 i was welcomed with a smile.我受到了笑脸相迎。名词 laugh 的意思是 大笑 强调 笑 的时候发出声音。例如 he laughed at ...

同义词和同义词辨析

同义词。意义相同或相近的一组词。意义相同的叫等义词,意义相近的叫近义词。一 等义词。概念义 附属义完全相同,在任何语境中都能够替换,也叫绝对同义词,如 单车 自行车青霉素 盘尼西林电机 马达六弦琴 吉他立刻 马上 概念义相同,附属义有一些细微的差别 西红柿 番茄母音 元音剪刀 剪子玉米 包谷 棒子公...

同义词和同义词辨析

同义词。意义相同或相近的一组词。意义相同的叫等义词,意义相近的叫近义词。一 等义词。概念义 附属义完全相同,在任何语境中都能够替换,也叫绝对同义词,如 单车 自行车。青霉素 盘尼西林立刻 马上。电机 马达。六弦琴 吉他。概念义相同,附属义有一些细微的差别 西红柿 番茄。母音 元音。公尺 米。剪刀 剪...