【转】ORACLE近义词总结ITeye - 众发娱乐

【转】ORACLE近义词总结ITeye

2019年03月25日12时01分05秒 | 作者: 涵衍 | 标签: 近义词,方针,数据库 | 浏览: 406

 

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

 

创立近义词

创立近义词的语法如下:

一般用法如下所示:

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;
 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:方针、私有近义词、公共近义词是否能够存在三者同名的状况?

在用户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 

定论:存在同名方针和公共近义词时,数据库优先选择方针作为方针,存在同名私有方针和公共方针时,数据库优先选择私有近义词作为方针

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表众发娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章

阅读排行

  • 1

    【转】ORACLE近义词总结ITeye

    近义词,方针,数据库
  • 2
  • 3

    Mysql表结构、数据仿制ITeye

    仿制,结构,数据
  • 4
  • 5

    Hadoop 第一个实例ITeye

    一个,文件,输出
  • 6
  • 7

    IMPITeye

    一个,体系,数据
  • 8
  • 9
  • 10