[Oracle整理]synonym及其应用
说明:本内容是工作用到的知识点整理,来自工作中和网络。
代码于Oracle9上测试。
问题:执行DBScript时报ORA-00942O:表格或视图表不存在
导入*.dmp时,创建PROCEDURE、Trigger等报错:ORA-00942:表格或视图表不存在。
分析:因为Owner不存在报错
程序中大量使用了owner.talblename (user.emp)这种写法。而DB中Owner已经存在并且供其它系统使用,又不能重复建立Owner。
解决:预防
编写程序时,使用同义词,不使用owner.talblename (user.emp)这种写法。
什么是同义词
1) 同义词是数据库方案对象的一个别名,经常用于简化对象访问和提高对象访问的安全性。
2) 在使用同义词时,Oracle数据库将它翻译成对应方案对象的名字。
3) 同义词并不占用实际存储空间,只有在数据字典中保存了同义词的定义。
4) 把其它DB中的table映射过来,像本地table一样使用
同义词分类
公用Oracle同义词与私有Oracle同义词。
1)公用Oracle同义词:由一个特殊的用户组Public所拥有。顾名思义,数据库中所有的用户都可以使用公用同义词。公用同义词往往用来标示一些比较普通的数据库对象,这些对象往往大家都需要引用。
2) 私有Oracle同义词:它是跟公用同义词所对应,他是由创建他的用户所有。当然,这个同义词的创建者,可以通过授权控制其他用户是否有权使用属于自己的私有同义词。
Oracle同义词创建
Create [public] synonym 同义词名称 for [username.]objectName;
1)远程的数据库上的同义词。先创建一个Database Link(数据库连接)来扩展访问,然后在使用如下语句创建数据库同义词:create synonym table_name for table_name@DB_Link;
2)授权。在user用户中给当前用户(user2)授权: grant select/delete/update on user2
删除同义词
drop public synonym table_name;
查看所有同义词
select * from dba_synonyms
优点
1)可以连接其他的DB,把其它DB中的table映射过来,像本地table一样使用。
2)用起来简洁
3)安全性好
4)节省大量的数据库空间,对不同用户的操作同一张表没有多少差别
5)扩展的数据库的使用范围,能够在不同的数据库用户之间实现无缝交互
6)同义词可以创建在不同一个数据库服务器上,通过网络实现连接
注意
1)必须拥有CREATE ANY SYNONYM权限
2)即使在数据库对象不存在的情况下,也可以为预计要建立的数据库对象设置同义词。这个特性很好用,它可以帮助数据库开发团队或者应用程序开发团队进行更高的协作。如只要数据库管理员跟应用程序预先做好对象的命名与同义词的定义工作,那么即使数据库管理员还没有开发好某个数据库对象,前台应用程序开发人员也可以通过引用同义词的方式引用为建立的数据库对象。如此的话,就不会因为某一步工作没有完成而给其他人的工作带来什么负面影响。
学习资料
http://database.51cto.com/art/201005/197910.htm
http://database.51cto.com/art/201004/196069.htm