zoukankan      html  css  js  c++  java
  • Oracle 同义词详解(synonym)

    Oracle 同义词详解(synonym)

    一、Oracle同义词概念

      Oracle 数据库中提供了同义词管理的功能。同义词是数据库方案对象的一个别名,经常用于简化对象访问和提高对象访问的安全性。在使用同义词时,Oracle数据库 将它翻译成对应方案对象的名字。与视图类似,同义词并不占用实际存储空间,只有在数据字典中保存了同义词的定义。在Oracle数据库中的大部分数据库对 象,如表、视图、同义词、序列、存储过程、包等等,数据库管理员都可以根据实际情况为他们定义同义词。

    二、Oracle同义词分类

      Oracle同义词有两种类型,分别是公用Oracle同义词与私有Oracle同义词。

      1)公用Oracle同义词:由一个特殊的用户组Public所拥有。顾名思义,数据库中所有的用户都可以使用公用同义词。公用同义词往往用来标示一些比较普通的数据库对象,这些对象往往大家都需要引用。

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

    三、Oracle同义词创建及删除

      创建公有Oracle同义词的语法:Create [public] synonym 同义词名称 for [username.]objectName;

      Drop [public] synonym 同义词名称

    四、Oracle同义词的作用

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

    五、Oracle同义词在数据库链中的作用

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

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

    六、Oracle同义词信息的查询

     

     

       同义词作为一种数据库对象,它的相关信息被存储在数据字典中。与同义词有关的数据字典有三个:user_sysnonyms、all_synonyms、dba_synonyms。

      其中在数据字典user_synonyme中记录了当前用户所拥有的同义词。这个表的个列定义及其意义如下所示:

    名 称是否为空? 类型意义  SYNONYM_NAME NOT NULL VARCHAR2(30) 同义词的名称  TABLE_OWNER VARCHAR2(30) 所指向的对象属主  TABLE_NAME NOT NULL VARCHAR2(30) 所指向的对象名称  DB_LINK VARCHAR2(128) 数据库链接 

      如果要查询当前用户创建了哪些同义词,它们各代表哪个用户的哪个对象,可以执行下面的SELECT语句进行查询:

     SQL> SELECT synonym_name,table_name,table_owner FROM user_synonyms; 

      在数据字典all_synonyms中记录了当前用户所能使用的所有同义词,包括私有同义词和公共同义词。

      在数据字典dba_synonyms中记录了数据库中所有的同义词,包括每个用户创建的私有同义词和DBA创建的公共同义词。这个视图只有DBA能够访问,它的结构除了包含数据字典user_synonyms的所有列外,还有一个列owner代表同义词的创建者。

       如果要在整个数据库范围内查询某个同义词的信息,可以对数据字典dba_synonyms进行查询。例如,要查询用户scott所创建的所有同义词,可以执行下面的SELECT语句:

     SQL> SELECT synonym_name, table_name, table_owner FROM dba_synonyms       WHERE owner='SCOTT'; 

      如果要查询用户scott的表dept具有哪些同义词,可以执行下面的SELECT语句:

     SQL> SELECT synonym_name,owner FROM dba_synonyms       WHERE table_owner='SCOTT' AND table_name='DEPT'; 

      如果要查询系统中所有的公共同义词,可以执行下面的SELECT语句:

     SQL> SELECT synonym_name, table_name, table_owner FROM dba_synonyms       WHERE owner='PUBLIC'; 

     

    做自己的太阳,成为别人的光!
  • 相关阅读:
    图的邻接链表实现(c)
    图的邻接矩阵实现(c)
    好文
    第13章 红黑树
    函数 setjmp, longjmp, sigsetjmp, siglongjmp
    域名解析
    wget www.baidu.com执行流程分析
    信号处理篇
    第11章 散列表
    第10章,基本数据结构(栈,队列)
  • 原文地址:https://www.cnblogs.com/botaoli/p/15541577.html
Copyright © 2011-2022 走看看