• Oracle批量创建同义词


    一、介绍

    Oracle的同义词(synonyms)从字面上理解就是别名的意思,和视图的功能类似,就是一种映射关系。它可以节省大量的数据库空间,对不同用户的操作同一张表没有多少差别;它扩展了数据库的使用范围,能够在不同的数据库用户之间实现无缝交互。

    很多时候,会有多个oracle账号访问一个账号下的表,比如:USER_A用户下面有很多表,相关的sql语句都是USER_A.Tablename等等等,这时候需要用USER_B用户去访问USER_A的表,但是sql语句还要保持USER_A.Tablename,就需要用到同义词了

    同义词分类:
    Oracle同义词有两种类型,分别是Oracle公用同义词与Oracle私有同义词。普通用户创建的同义词一般都是私有同义词,公有同义词一般由DBA创建,普通用户如果希望创建同义词,则需要CREATE PUBLIC SYNONYM这个系统权限。

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

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

    二、创建同义词

    语法:

    CREATE [OR REPLACE] [PUBLIC] SYNONYM [ schema.] 同义词名称 FOR [ schema.] object [ @dblink ];
    

    专有(私有)同义词

    CREATE SYNONYM SYSN_TEST FOR TEST;
    

    公共同义词

    CREATE PUBLIC SYNONYM PUBLIC_TEST FOR TEST;
    

    2.1首先需要sys用户授权USER_B创建同义词权限

    其中USER_B是需要创建同义词的用户

    GRANT CREATE SYNONYM TO USER_B;  
    

    这个时候还需要一个权限就是USER_B用户select USER_A用户table的权限,这个时候是在USER_A用户下赋值的

    grant select on tableA to user_temp;  
    

    2.2创建同义词

    create synonym USER_B.Tablename for USER_A.Tablename;
    

    2.3测试同义词

    使用USER_B用户oracle,有输出结果代表可以在USER_B用户下以USER_B的schema查看USER_A的表

    select count(*) from USER_B.Tablename;
    

    三、批量创建同义词

    很多时候,当前环境下的表有几百张甚至几千张,很多人说可以select * from dba_tables where owner='UPCENTER' 把表名查出来,用notpad拼成命令,批量执行,这里是行不通的,因为每条命令的行尾都不一样(表名不同)
    这时候可以先用notpad软件把USER_B用户select USER_A用户table的权限批量执行,然后再执行下面的命令,把输出结果执行以下即可:

    select 'create synonym USER_B.'||table_name||' for upcenter.'||table_name||';' from dba_tables where owner='USER_A'
    

    四、查看同义词和删除同义词

    4.1查看用户下的同义词

    SELECT * FROM DBA_SYNONYMS where OWNER = 'UPAPP';
    

    4.2删除同义词

    DROP SYNONYM SYSN_NAME;
    
    WilliamZheng©版权所有 转载请注明出处! 运维架构师群:833329925
  • 相关阅读:
    HTML5第二节
    HTML5在移动端开发的12大特性
    移动端开发遇到的坑
    html5 meta(移动端)介绍及使用
    CSS的margin塌陷(collapse)
    Block Demo
    设计模式之代理
    OC Block网上转载
    GCD之全局、主线程
    Spark SQL中 RDD 转换到 DataFrame
  • 原文地址:https://www.cnblogs.com/williamzheng/p/11733594.html
Copyright © 2020-2023  润新知