Oracle同义词创建及其作用

1 同义词的概念
Oracle数据库中提供了同义词管理的功能。同义词是数据库方案对象的一个别名,经常用于简化对象访问和提高对象访问的安全性。在使用同义词时,Oracle数据库将它翻译成对应方案对象的名字。与视图类似,同义词并不占用实际存储空间,只有在数据字典中保存了同义词的定义。在Oracle数据库中的大部分数据库对象,如表、视图、同义词、序列、存储过程、包等等,数据库管理员都可以根据实际情况为他们定义同义词。
同义词,顾名思义就是两个词的意思一样,可以互相替换.那它的作用有哪些呢:一个最明显的目的就是简化sql。如果某个数据库对象的名字太长了,可以创建一个短一点的同义词。就相当于是缩写呗。另外一个目的是隐藏一些对象的信息。比如查找另一个schema中的某个表,需要在表名前加schema名做为前缀,若创建一个同义词就可以隐藏schema信息。

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

3 Oracle同义词创建及删除
创建公有Oracle同义词的语法:Create [public] synonym 同义词名称 for [username.]objectName。Drop [public] synonym 删除同义词名称。举个创建私有同义词的例子。
私有同义词只有创建它的用户自己可以用,如果其他schema要用必须得加创建者schema为前缀,这和其他对象是一样的。
创建私有同义词:create synonym arwen for user.table_of_arwen
这样使用select * from user.arwen或select * from user.table_of_arwen是一样的
删除私有同义词:DROP SYNOYM arwen
创建共有同义词:create public synonym arwen for user.table_of_arwen
这样使用select * from arwen即可
注意事项:如果其他schema没有权限查找表table_of_arwen则也不能使用它的同义词去查找的

4 Oracle同义词的作用
(1) 多用户协同开发中,可以屏蔽对象的名字及其持有者。如果没有同义词,当操作其他用户的表时,必须通过user名.object名的形式,采用了Oracle同义词之后就可以隐蔽掉
user名,当然这里要注意的是:public同义词只是为数据库对象定义了一个公共的别名,其他用户能否通过这个别名访问这个数据库对象,还要看是否已经为这个用户授权。
(2) 为用户简化sql语句。上面的一条其实就是一种简化sql的体现,同时如果自己建的表的名字很长,可以为这个表创建一个Oracle同义词来简化sql开发。
(3)为分布式数据库的远程对象提供位置透明性。

5 关于错误:同义词转换不再有效
当创建同义词时不会检查同义词代表的对象是否存在,都会成功创建.比如CREATE PUBLIC SYNONYM arwen FOR no_table_exist。若不存在一个表叫no_table_exist或者其他数据库对象叫这名。则SELECT * FROM arwen时就会有错误提示:同义词转换不再有效.当然如果本来有那表后面删除了也会有同样的错误。

原帖地址:
http://blog.csdn.net/li_xiao_ming/article/details/8191295
http://database.51cto.com/art/201004/196062.htm

时间: 2024-12-31 19:57:52

Oracle同义词创建及其作用的相关文章

ORACLE同义词总结

同义词概念   Oracle的同义词(synonyms) 从字面上理解就是别名的意思,和视图的功能类似,就是一种映射关系.它可以节省大量的数据库空间,对不同用户的操作同一张表没有多少差别;它扩展了数据库 的使用范围,能够在不同的数据库用户之间实现无缝交互;Oracle数据库中提供了同义词管理的功能.同义词是数据库对象的一个别名,经常用于简化对象访 问和提高对象访问的安全性.在使用同义词时,Oracle数据库将它翻译成对应方案对象的名字.与视图类似,同义词并不占用实际存储空间,只有在数据字典 中保

Oracle 手动创建数据库步骤详解_oracle

下面先给大家列出oracle手动创建数据库步骤如下所示: 1.编写初始化参数文件 2.设置操作系统环境变量 3.创建实例 4.以管理员身份连接数据库 5.启动实例 6.create database 创建数据库 7.运行数据字典脚本 8.Oracle的网络配置 (客户端连接到服务端) 初始化参数文件 从%ORACLE_HOME%\admin\sample\pfile从复制initsmpl.ora文件,并黏贴到$ORACLE_HOME%\database目录下,改名为init<sid>假设改为i

[ASP.NET]对Oracle数据库创建表/判断数据表是否已存在

asp.net|oracle|创建|数据|数据库 对Oracle数据库创建表: Dim myConnectionString As String Dim myConnection As OleDbConnection Dim myCommand As OleDbCommand Dim myCreateSQL As String myConnectionString = "Provider='OraOLEDB.Oracle.1';User ID=[User ID];Data Source=[Dat

命令行中使用oracle命令创建数据库和表空间

本文详细介绍命令行中使用oracle命令创建数据库和表空间 1.使用超级用户登录sqlplus. 2.创建表空间: SQL> create tablespace test 2 datafile 'D:\oracle\oradata\test\test.dbf' 3 size 100M autoextend on next 10M maxsize unlimited extent management local; 3.创建用户和密码: SQL> create user Username ide

Oracle 如何创建和使用全文索引_oracle

不使用Oracle text功能,也有很多方法可以在Oracle数据库中搜索文本.可以使用标准的INSTR函数和LIKE操作符实现. SELECT *FROM mytext WHERE INSTR (thetext, 'Oracle') > 0; SELECT * FROM mytext WHERE thetext LIKE '%Oracle%'; 有很多时候,使用instr和like是很理想的, 特别是搜索仅跨越很小的表的时候.然而通过这些文本定位的方法将导致全表扫描,对资源来说消耗比较昂贵,

Oracle数据创建虚拟列和复合触发器的方法_oracle

本文我们主要介绍Oracle数据库的虚拟列和复合触发器方面的相关知识,包括虚拟列和复合触发器的创建等,并给出了创建示例,接下来就让我们来一起了解这一过程吧. 一.虚拟列 Oralce 的虚拟列解决了以前很多需要使用触发器或者需要通过代码进行计算统计才能产生的数据信息.以前每次对其他的列进行统计,产生新列的时候都是采用在select 语句中通过统计计算增加新列的方法,执行效率很低,而且由于使查询SQL语句变得冗长.复杂很容易出错.严重的降低了开发效率和程序的执行效率.Oralce虚拟列的引入解决了

Oracle中创建全文索引支持的类型

Oracle中创建全文索引支持的类型 只能在类型:VARCHAR2, CLOB, BLOB, CHAR, BFILE, XMLType, and URIType上创建: 不能在类型:NCLOB,NVARCHAR2,NCHAR,DATE,NUMBER,TIMESTAMP上创建  

Oracle数据仓库创建教程

Oracle数据仓库创建教程.如何创建一个数据仓库,创建实例,以为毕业设计要求,最近开始Oracle的数仓建模实践,详细记录了图形界面下的 Oracle database 12C 数据仓库创建过程. 本教程在Linux环境和Windows环境均可成功创建. 注意:不论是Linux下还是Windows下,前提是你已经正确安装了Oracle database 12C. 共14步,每步至少一个图形介绍,力求详细.只要一步步安装就可以了. 0.0 打开 Database Configuration As

ORACLE 12C创建用户之ORA-65096

ORACLE 12C创建用户之ORA-65096   2016年2月25日,一北京北方人瑞教育咨询公司的同事遇到以.sql文件导入数据时遇到ORA-65096报错,如下图所示:      出现上图导入报错,原因初步定为创建数据库用户AJAO的方法不正确,经过查询发现DBA_USERS视图中已有C###AJAO用户,AJAO用户并不存在,所以在.sql导入时报ORA65096:错误原因是用户想在PDBORCL中创建AJAO用户,却未设置会话container到PDB,而在CDB中创建公有用户因无法