我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Oracle同义词是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Oracle同义词是什么

这篇文章主要介绍“Oracle同义词是什么”,在日常操作中,相信很多人在Oracle同义词是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Oracle同义词是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

同义词概念

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权限。

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

如下所示,用户DM缺少CREATE SYNONYM权限,创建同义词时会报ORA-01031错误

SQL> CREATE SYNONYM TEST FOR DM.TM_WGG_ATM_GTW_MON;   CREATE SYNONYM TEST FOR DM.TM_WGG_ATM_GTW_MON   ORA-01031: insufficient privileges

用sys账号给DM账号赋予CREATE SYNONYM的权限

SQL> GRANT CREATE SYNONYM TO DM;  Grant succeeded.

然后创建私有同义词

SQL> CREATE SYNONYM TEST FOR DM.TM_WGG_ATM_GTW_MON;   Synonym created

2.如果需要在其它模式下创建同义词,则必须具有CREATE ANY SYNONYM的权限。

看下面的例子,用户DM想创建SCOTT模式下的私有同义词

SQL> CREATE SYNONYM SCOTT.EM FOR SOCTT.EMP;   CREATE SYNONYM SCOTT.EM FOR SOCTT.EMP   ORA-01031: insufficient privileges

用sys账号给DM账号赋予CREATE ANY SYNONYM的权限

SQL> GRANT CREATE ANY SYNONYM TO DM;   Grant succeeded.   SQL> CREATE SYNONYM SCOTT.EM FOR SOCTT.EMP;   Synonym created

3.创建公有同义词则需要CREATE PUBLIC SYNONYM系统权限。

创建同义词

创建同义词的语法如下:

Oracle同义词是什么

普通用法如下所示:

SQL> GRANT CREATE ANY SYNONYM TO DM;   Grant succeeded.   SQL> CREATE SYNONYM SCOTT.EM FOR SOCTT.EMP;   Synonym created

如果要创建一个远程的数据库上的某张表的同义词,需要先创建一个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;            ID NAME ----------- ----------------------------------------------------------------   SQL> SELECT * FROM TEST;            ID NAME ----------- ----------------------------------------------------------------   SQL> ALTER TABLE TEST ADD SEX NUMBER(1);   Table altered  SQL> SELECT OBJECT_NAME, STATUS  FROM ALL_OBJECTS WHERE OBJECT_NAME='T';   OBJECT_NAME                    STATUS ------------------------------ ------- T                              INVALID

问题锦集

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

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

2.为啥OE用户创建的公用同义词,HR用户不能访问呢?

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

3.对象、私有同义词、公共同义词是否可以存在三者同名的情况?ORACLE中同义词和表的优先顺序浅析是怎么样的呢?

在用户kerry下,创建表TEST

SQL>CREATE TABLE TEST  AS SELECT * FROM USER_OBJECTS WHERE 1= 0;

创建私有同义词TEST

SQL> CREATE SYNONYM TEST FOR REF.REF_WGG_STUDENT;   CREATE SYNONYM TEST FOR REF.REF_WGG_STUDENT   ORA-00955: name is already used by an existing object

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

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

SQL> CREATE PUBLIC  SYNONYM TEST FOR REF.REF_WGG_STUDENT;   Synonym created

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

SQL> SELECT * FROM TEST;   OBJECT_NAME     SUBOBJECT_NAME    OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE         CREATED     LAST_DDL_TIME TIMESTAMP           STATUS  TEMPORARY GENERATED SECONDARY

删除表TEST后,此时数据库访问的是公共同义词

SQL> DROP TABLE TEST PURGE;   Table dropped   SQL> SELECT * FROM TEST;            ID NAME ----------- --------------------------------           1 12   SQL>

结论:存在同名对象和公共同义词时,数据库优先选择对象作为目标,存在同名私有同义词和公共同义词时,数据库优先选择私有同义词作为目标。

到此,关于“Oracle同义词是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Oracle同义词是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Oracle同义词的作用是什么

Oracle的同义词是用来提供对数据库中表或视图的另一个名称的对象。它的作用是使用户能够以不同的名称引用相同的表或视图,从而提供更灵活和方便的访问方式。同义词可以简化SQL查询语句、保护数据库对象的安全性、提高数据库的可移植性和减少对数据库
Oracle同义词的作用是什么
2024-04-09
2024-04-02

Oracle同义词查看的方法是什么

Oracle同义词可以通过以下方法查看:使用Oracle SQL Developer工具:在SQL Developer中连接数据库,展开数据库连接,然后展开“同义词”节点,即可查看数据库中的同义词列表。使用SQL查询语句:可以通过查询数据字
Oracle同义词查看的方法是什么
2024-04-09

oracle怎么查询同义词

在Oracle数据库中,可以使用以下两种方式查询同义词:1. 使用系统视图 ALL_SYNONYMS可以使用 ALL_SYNONYMS 视图查询数据库中的同义词信息。该视图包含了当前用户有权限访问的所有同义词的信息,可以通过查询该视图来获取
2023-08-25

oracle创建同义词并授权的方法是什么

要在Oracle中创建同义词并授权,您可以按照以下步骤进行操作:1. 使用sys或具有相应权限的管理员用户登录到Oracle数据库。2. 创建同义词:```sqlCREATE SYNONYM synonym_name FOR schema_
2023-08-28

oracle数据库同义词查询的方法是什么

在Oracle数据库中,可以使用以下方法查询同义词:1. 使用DESCRIBE命令:可以通过DESCRIBE命令来查看同义词的定义。例如,使用以下命令可以查看名为"synonym_name"的同义词的定义:DESCRIBE synonym_
2023-08-28

怎么导出Oracle中的同义词

本篇内容主要讲解“怎么导出Oracle中的同义词”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么导出Oracle中的同义词”吧!--导出所有的同义词SELECT CREATE OR REPLA
2023-06-05

oracle同义词怎么添加字段

要在Oracle中为表添加字段,可以使用ALTER TABLE语句。以下是添加字段的语法:ALTER TABLE table_nameADD column_name data_type;示例:ALTER TABLE employeesADD
2023-08-28

oracle怎么创建同义词并授权

要在Oracle中创建同义词并授权给其他用户,您可以按照以下步骤进行操作:连接到Oracle数据库:sqlplus username/password@database创建同义词:CREATE SYNONYM synonym_name
oracle怎么创建同义词并授权
2024-04-09

oracle创建同义词的用途有哪些

Oracle创建同义词的用途有以下几个方面:简化对象访问:使用同义词可以简化对数据库对象的访问,避免长而复杂的对象名。例如,可以使用同义词将表名 EMPLOYEES 简化为 EMP,增加代码的可读性和可维护性。隐藏对象位置:可以使用同义词
oracle创建同义词的用途有哪些
2024-04-09

oracle创建同义词后找不到怎么解决

如果在Oracle数据库中创建了同义词,但是在使用时找不到同义词,可能会有以下几种原因和解决方法:同义词名称错误:确保正确指定了同义词的名称,并且在使用时指定了正确的同义词名称。同义词所属的用户错误:在使用同义词时,需要指定同义词所属的用户
oracle创建同义词后找不到怎么解决
2024-04-09

Oracle学习(五) --- 视图、序列、同义词、索引

1、视图1.1、什么是视图视图就是一个虚拟表,实体表的映射。什么时候使用视图在开发中,有一些表结构是不希望过多的人去接触,就把实体表映射为一个视图。(表结构简化)在项目过程中,程序员主要关注编码的性能、业务分析这方面。对于一些复杂的SQL语句,设计人员会提前把
Oracle学习(五) --- 视图、序列、同义词、索引
2019-06-02

ORACLE重编译同义词(synonym)遇到ORA-01031总结

我们在编译INVALID的同义词(synonym)的时候,可能在某些版本会遇到一些特殊权限问题,具体来说是遇到ORA-01031错误。下面构造这样一个例子:     如下所示,scott用户下面创建了一个公共同义词emp(下面测试环境为Oracle 10.2.
ORACLE重编译同义词(synonym)遇到ORA-01031总结
2015-04-23

使用 MySQL CHAR_LENGTH() 函数的目的是什么?哪个函数是它的同义词?

MySQL CHAR_LENGTH() 用于检索指定字符串的长度。该函数只是简单地计算字符数,而忽略字符是单字节还是多字节。 MySQL CHARACTER_LENGTH() 函数是它的同义词。这些函数的语法如下 -CHAR_LENGTH
2023-10-22

编程热搜

目录