精华内容
下载资源
问答
  • Oracle——04同义词数据库链接 Oracle的同义词(synonyms)从字面上理解就是别名的意思,和试图的功能类似,就是一种映射关系。本文介绍如何创建同义词语句,删除同义词以及查看同义词语句。 oracle的同义词...
    Oracle——04同义词与数据库链接
    Oracle的同义词(synonyms)从字面上理解就是别名的意思,和试图的功能类似,就是一种映射关系。本文介绍如何创建同义词语句,删除同义词以及查看同义词语句。

    oracle的同义词总结:
    从字面上理解就是别名的意思,和试图的功能类似。就是一种映射关系。

    1.创建同义词语句:
    create public synonym table_name for user.table_name;

    其中第一个user_table和第二个user_table可以不一样。
      此外如果要创建一个远程的数据库上的某张表的同义词,需要先创建一个Database Link(数据库连接)来扩展访问,然后在使用如下语句创建数据库同义词:create synonym table_name for table_name@DB_Link;
      当然,你可能需要在user用户中给当前用户(user2)授权: grant select/delete/update on user2

    2.删除同义词:
    drop public synonym table_name;

    3.查看所有同义词:
    select * from dba_synonyms

    同义词拥有如下好处:节省大量的数据库空间,对不同用户的操作同一张表没有多少差别;扩展的数据库的使用范围,能够在不同的数据库用户之间实现无缝交互;同义词可以创建在不同一个数据库服务器上,通过网络实现连接。

    Oracle数据库中提供了同义词管理的功能。Oracle同义词是数据库方案对象的一个别名,经常用于简化对象访问和提高对象访问的安全性。

    AD:
    在Oracle中对用户的管理是使用权限的方式来管理的,也就是说,如果我们想使用数据库,我们就必须得有权限,但是如果是别人将权限授予了我们,我们也是能对数据库进行操作的,但是我们必须要已授权的表的名称前键入该表所有者的名称,所以这就是比较麻烦的,遇到这种情况,我们该怎么办呢?创建个Oracle同义词吧!这样我们就可以直接使用同义词来使用表了。

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

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

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

    4.Oracle同义词的作用
      同义词拥有如下好处:
           节省大量的数据库空间,对不同用户的操作同一张表没有多少差别;
           扩展的数据库的使用范围,能够在不同的数据库用户之间实现无缝交互;
           同义词可以创建在不同一个数据库服务器上,通过网络实现连接

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

    5.Oracle同义词在数据库链中的作用
    数据库链是一个命名的对象,说明一个数据库到另一个数据库的路径,通过其可以实现不同数据库之间的通信。

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


    using后面指定的是链接字符串,也就是远程数据库的网络服务名,这个服务名保存在TNSNAMES.ORA文件中,在该文件中定义了协议、主机名、端口和数据库名。
     
    注意:创建数据库链接的帐号必须有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系统权限,用来登录到远程数据库的帐号必须有CREATE SESSION权限。这两种权限都包含在CONNECT角色中(CREATE PUBLIC DATABASE LINK权限在DBA中)。
     
    一个公用数据库链接对于数据库中的所有用户都是可用的,而一个私有链接仅对创建它的用户可用,是不可授权的。由一个用户给另外一个用户授权私有数据库链接是不可能的,一个数据库链接要么是公用的,要么是私有的。
     
    创建数据库链接时,还可以使用缺省登录方式,即不指定远程数据库的用户名和密码:
    create public database link zrhs_link using ‘zrhs’;
    在不指定用户名和口令的情况下,ORACLE使用当前的用户名和口令登录到远程数据库
     
     
    如果没有配置TNSNAMES.ORA,第二种创建db link的方法:
     create database link test connect to scott identified by tiger using
     '(DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.112)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVICE_NAME = orcl)
        )'
     
     
    查询创建好的db link:
    select * from sys.link$;
     
    一直以为只有private db link可以查到密码,原来public 的dblink 也可以看到密码。
    只是需要用sys用户登录查询。 
    查询dblink的user 密码,用sys 登陆
    select * from SYS.link$;
    select * from SYS.link$ l, SYS.user$ u
     
     WHERE l.owner# IN (SELECT kzsrorol
                          FROM x$kzsro) AND l.owner# = u.user#;
     
    如果是private 的dblink,就可以用owner登录,查询 user_db_links
    select * from user_db_links;
     
    db link创建好之后,访问对象
    访问对象要通过 object名@数据库链名。 
     
    4.同义词的删除
    drop [public] synonym 同义词名称
    要想删除私有同义词就 省略 public 关键字
    要想删除公共同义词就要 包括public 关键字
    例如:
    drop synonym emp; --删除名为emp 的私有同义词
    drop public synonym public_emp; --删除名为public_emp的公有同义词


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

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

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

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

    假设oracle有以下两个用户: admin , visitor
    我们在admin下建立了 testtable 这个表,并且对visitor用户赋权
    然后我们用visitor登陆 : 查询这个表的时候我们一定需要这样写
    select * from admin.testtable
    如果直接写 select * from testtable oracle会报错说表不存在
    但是我们可以在visitor里建立[私有同义词] 让 testtable = admin.testtable
    这样在visitor下就可以直接输入 select * from testtable进行查询
    但是如果用户很多的情况下会觉得很麻烦,因为每个用户都需要加[私有同义词] testtable=admin.testtable
    所以就出现了 [公有同义词]
    直接在admin用户下建立公有同义词 testtable = testtable
    这样做好后,所有的用户都可以直接使用
    select * from testtable 进行访问而并不需要加前缀,也不用再加[私有同义词]了

    项目中例子:
    oracle 用户 infsa 下 有表 a,把权限赋给infss用户

    在infsa下执行
    grant all on a to infss ;
    create public synonym inf for a;

    同义词作用
    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>
    结论:存在同名对象和公共同义词时,数据库优先选择对象作为目标,存在同名私有对象和公共对象时,数据库优先选择私有同义词作为目标


    Oracle同义词数据库链接synonymdatabase link 
    一、背景
    有两个sid:Asid,Bsid,在Asid下有两个用户Auser1,Auser2,在Bsid下有一个用户Buser1。其中Auser2和Buser1建立了dblink。现希望通过登录Buser1访问Auser1上的三张表table1,table2,table3信息和函数function1。

    二、步骤
    ①登录Auser1对Auser2授权(若需要删除则加上delete)
    grant insert,select,update on table1 to Auser2;
    grant insert,select,update on table2 to Auser2;
    grant insert,select,update on table3 to Auser2;
    grant execute on function1 to Auser2;

    ②登录Auser2建立同义词
    create synonym table1 for Auser1.table1;
    create synonym table2 for Auser1.table1;
    create synonym table3 for Auser1.table1;
    create synonym function1 for Auser1.function1;

    ③登录Buser1查找db_link名(例如查出来的db_link名为mydblink1)
    select username,db_link from user_db_links

    ④建立Buser1的同义词
    create synonym table1 for Auser2.table1@mydblink1;
    create synonym table2 for Auser2.table2@mydblink1;
    create synonym table3 for Auser2.table3@mydblink1;
    create synonym function1 for Auser2.function1@mydblink1;

    ⑤测试
    此时登录Buser1通过select * from table1就可以访问table1了。

    三、注意点
    也可以建立procedure的同义词,但是这样执行的过程中不允许commit。如果要提交的话请在如JDBC中commit()。


    oracle dblink用法总结
    oracle中的database link是定义一个数据库到另一个数据库的路径的对象,database link允许你查询远程表和执行远程程序。在任何分布式环境里,dblink都是必要的,另外注意database link是单向的连接。在创建database link的时候,oracle在数据字典中存储了相关的database link的信息,在使用database link的时候,oracle再通过oracle net用户预先定义好的连接信息访问相应的远程数据库来完成相应的工作。

    1、在建立database link之前需要注意:
    (1)确认从local database到remote database的网络连接是否正常,tnsping要能成功。
    (2)确认在remote database上面有相应的访问权限。

    2、oracle database link可分为下面三类:
    (1)private:创建的是用户级别的dblink,只有创建该dblink的用户才可以使用这个dblink来访问远程的数据库,同时也只有该用户可以删除这个dblink。
    (2)public:创建的是数据库级别的dblink,本地数据库中所有的用户数据库访问权限的用户或者pl/sql程序都能使用这个dblink。
    (3)global:创建的是网络级别的dblink,这是对于oracle network而言的。

    3、创建dblink需要的权限:
    如果你新建了一个用户,那么你必须为它授予以下权限才可以创建dblink:create database link、create public database link、create session。

    4、创建dblink:
    -- 如果不指定public,默认的是private,host后面可以是ip地址,也可以是解析过的域名
    CREATE PUBLIC DATABASE LINK db_link_test02 CONNECT TO rms IDENTIFIED BY rms
      USING '(DESCRIPTION= 
              (ADDRESS_LIST = 
                    (ADDRESS=(PROTOCOL=tcp)(HOST=mom_uat_new)(PORT=1521)))
              (CONNECT_DATA=
                  (SERVICE_NAME=ormst1)
                  )
             )';
    5、查看dblink:

    查看dblink,可以从dba_objects、dba_db_links这两张表去查:
    SELECT *
      FROM dba_objects do
     WHERE do.object_type = 'DATABASE LINK';

    SELECT *
      FROM dba_db_links ddl;
    除了上面两张表,还有all_db_links、user_db_links。

    6、使用dblink:
    -- 最简单的用法
    SELECT *
      FROM table_name@database_link;

    -- 不想让别人知道database link名字的时候,可以使用同义词包装一下

    CREATE synonym table_name FOR table_name@database_link;
    SELECT *
      FROM table_name;

    -- 也可以建立一个视图来封装
    CREATE view table_name_v AS
      SELECT *
        FROM table_name@database_link;

    7、删除dblink:
    -- 删除public类型的dblink
    DROP PUBLIC DATABASE LINK dblink_name;

    -- 删除private类型的dblink,只有创建者自己能删
    DROP DATABASE LINK dblink_name;
     

    1、同义词:
    在分布式数据库环境中,为了识别一个数据库对象,必须规定主机名、服务器名、对象的拥有者和对象名。这无疑增加了访问者的访问难度。为了给不同的用户使用数据库对象时提供一个简单的、唯一标识数据库对象的名称,可以为数据库对象创建同义词。

    举例说明:假设我们在数据库database中有一个用户user拥有表table,那么当数据库database中的其他用户需要访问table表的时候需要使用user.table的方式访问,这就要求我们在访问table表的时候必须知道table表的拥有者是谁。为了避免这种现象我们可以建立一个同义词synonym指向user.table表,那么以后任何用户都可以直接使用synonym访问user的table表了。

    同义词可以指向的对象有表、视图、过程、函数、包和序列。
    同义词有公共同义词和私有同义词两种。公共同义词是数据库中所有用户共享,而私有同义词是只有自己可以使用。

    使用SQL创建同义词:
     Sql代码
    create [public] synonym [schema.]synonymName for [schema.]object[@dblink]  
    --public表示创建一个公共同义词,默认是私有的。@dblink表示创建的是远程数据库的同义词,dblink是远程数据库链接的名称。  
     

    使用SQL删除同义词:
     Sql代码
    drop [public] synonym [schema.]synonymName  
    --public表示删除一个公用同义词,如果不指定则默认是删除私有同义词,当对应的私有同义词不存在时则报错。  
     


    2、数据库链接:
    作为一个分布式数据库系统,Oracle提供了使用远程数据库的功能。如果表在远程数据库中,为了指定远程数据库中一个对象的访问路径,必须创建一个数据库链接,使本地用户通过这个数据库链接登录到远程数据库上使用它的数据。数据库链接也有公有和私有两种,私有则只有创建者可以访问,默认是私有的。
     
    创建数据库链接:
     Sql代码
            create [public] database link dababaseLinkName [connect to user identified by password] using connectString.  
    --当创建一个数据库链接时,必须指定与数据库相链接的用户名、用户口令以及与远程数据库相连的服务器名字。如果不指定用户,则Oracle 

    --将使用本地用户名和口令来建立与远程数据库的链接。假设:我现在以admin/admin登录到了本地的Oracle数据库中,那么如果在我创建数据库  
    --链接的时候没有指定user和password,Oracle将使用本地的用户名和口令admin/admin进行登录建立数据库链接。  
    --connectString是类似于这种形式“127.0.0.1:1521/Orcl”,就是主机ip:端口号/数据库服务名。其中端口号默认是1521,主机ip默认是本地的。  
    --所以当建立本地的数据库链接时connectString可以写成‘ORCL’,即数据库服务名。  
    --创建数据库链接的例子:create public database link localLink connect to username identified by password using '127.0.0.1:1521/ORCL';  
     
     
    使用远程数据库链接:
    创建了远程数据库链接以后,我们就可以使用它了。假设我们现在创建了一个到远程数据库ORCL的数据库链接orclLink,在ORCL的当前用户中有一个表t_module, 用户scott有一个表emp,那么我们就可以利用如下方式访问t_module中的数据了:
     
    Sql代码
    select * from t_module@orclLink  
     
    但是当我们需要访问scott的emp表的时候则需要加入schema,访问方式如下:
     
    Sql代码
    select * from scott.emp@myLink  
     
    我们也可以为t_module建立远程的同义词:
     
    Sql代码
    create synonym moduleSyn for t_module@orclLink  
     
    为其他用户表如scott的emp表建立同义词的时候则需要加入schema,如:
     
    Sql代码
    create synonym scottEmp for scott.emp@orclLink  
     
    建立了远程的同义词后,我们就可以使用如下访问方式了:
     
    Sql代码
    select * from moduleSyn;  
    select * from scottEmp;  
     

    删除数据库链接:
     
    Sql代码
    drop [public] database link databaseLinkName
    展开全文
  • 视图就是一个查询的结果,可能包含一张表或者多张表的信息,创建...同义词有私有同义词和公有同义词,公有同义词可被所有的数据库用户访问,私有同义词只能在其模式(所属用户)内访问,且不能与当前模式的对象同名。

    ORACLE下的视图和同义词

    1.视图

    视图就是一个查询的结果,可能包含一张表或者多张表的信息,创建视图其目的在于,便于查看表中的信息。视图只是在逻辑上存在。

    1.1创建/修改视图

    创建视图一定要有CREATE VIEW权限,基本语法为:

    creare view 视图名 AS
    SQL语句
    with read only --是否只读
    with check option --是否执行约束检查

    -- 创建视图

    CREATE VIEW view_name AS SELECT * FROM dept WHERE deptno<20;

    -- 修改视图

    CREATE OR REPLACE VIEW view_name AS SELECT * FROM dept WHERE deptno<20;

    -- 去除视图的相关约束
    ALTER VIEW emp DROP CONSTRAINT ...

    1.2使用视图

    查看视图

    -- 查看所有视图
    SELECT * FROM user_views;

    1.3 删除视图

    DROP VIEW 视图名

    2.同义词

    同义词是现有对象的一个别名,用于简化sql语句、隐藏对象的名称和所有者、提供对对象的公共访问。同义词有私有同义词和公有同义词,公有同义词可被所有的数据库用户访问,私有同义词只能在其模式(所属用户)内访问,且不能与当前模式的对象同名。举个例子:

    -- 查看所有表

    select * from table

    --- 查看当前用户下的表

    select * from tab

    此处的tab就是一个同义词

    2.1 创建/修改同义词

    创建同义词必须具有CREATE [PUBLIC] SYNONYM权限

    CREATE SYNONYM 同义词名 FOR 视图名;

    --- 创建私有同义词

    create synonym syn_emp for emp;

    --- 查看同义词

    select * from syn_emp;

    --- 创建共有同义词

    create public synonym syn_dept for dept;

    -- 用户没有访问基表的权限,如果为基表创建了共有同义词,那么依然看不到表信息

    创建或替换现有同义词

    create or replace synonym emp_syn for scott.emp;

    2.2删除同义词

    --- 删除共有同义词

    drop public synonym syn_dept;

    --- 删除私有同义词

    drop synonym syn_dept;

    2.3 使用同义词
    多用于查询操作中,类似别名,多用于分布式数据库中

    SELECT * FROM 同义词;

    展开全文
  • 1:导出语句 连接数据库应用 执行下列脚本 expdp PORTAL/PORTAL dumpfile=PORTAL20141023.dmplogfile=PORTAL.log schemas=PORTAL 2:查看dump 默认导出目录 用FTP提取 ...2、Create 同义词 cr...
    1:导出语句
     连接数据库应用 执行下列脚本
    expdp PORTAL/PORTAL dumpfile=PORTAL20141023.dmp logfile=PORTAL.log  schemas=PORTAL
    2:查看dump 默认导出目录 用FTP提取
    select * from all_directories; 
     
     
     
    2、Create 同义词
    create or replace synonym SYN_EMERGENCY_INFO
     
     
     
     3、表空间使用情况查看
    SELECT D.TABLESPACE_NAME "表空间名字", D.STATUS "状态",
    (A.BYTES / 1024 / 1024) as "总共多少M",
    ((A.BYTES - DECODE(F.BYTES, NULL, 0 , F.BYTES)) / 1024 / 1024) as "已经用了多少M",
    (DECODE(F.BYTES, NULL, 0 , F.BYTES) / 1024 / 1024) as "剩余多少M",
    ((A.BYTES - DECODE(F.BYTES, NULL, 0 , F.BYTES)) / 1024 / 1024)/(A.BYTES / 1024 / 1024 ) as "利用率",
    DECODE(sign (((A.BYTES - DECODE(F.BYTES, NULL, 0 , F.BYTES)) / 1024 / 1024)/(A.BYTES / 1024 / 1024)- 0.9),1 ,'剩余不到10%,请考虑扩表空间' ,'正常') as "温馨提示"
    FROM SYS.DBA_TABLESPACES D, SYS.SM$TS_AVAIL A, SYS.SM$TS_FREE F
    WHERE D.TABLESPACE_NAME = A.TABLESPACE_NAME
    AND F.TABLESPACE_NAME (+) = D.TABLESPACE_NAME

    转载于:https://www.cnblogs.com/chengxy/p/4071604.html

    展开全文
  • oracle数据库对象---同义词(synonym)

    千次阅读 2017-01-10 18:02:44
    oracle数据库对象—同义词简析同义词是现有对象的一个别名,分为私有同义词和公用同义词,如一个表的表名过长或访问其他用户的表需要加上用户名作为前缀,可以用别名来解决。 part_1:查看scott用户是否具有创建同义...

    oracle数据库对象—同义词简析

    同义词是现有对象的一个别名,分为私有同义词和公用同义词,如一个表的表名过长或访问其他用户的表需要加上用户名作为前缀,可以用别名来解决。
    part_1:查看scott用户是否具有创建同义词的权限

    --scott用户输入如下语句,查询自己的权限
    select * from session_privs where privilege like '%SYNONYM%';

    这里写图片描述
    查询结果为空,说明scott用户无权创建同义词;

    part_2:通过sys用户,为scott授予创建同义词的权限:

    --sys用户输入授权指令
    grant create any synonym to scott;

    part_3:查看授权是否成功:

    --scott用户输入如下语句,查询自己的权限
    select * from session_privs where privilege like '%SYNONYM%';

    授权成功
    scott用户已经具有创建任何同义词的权限.

    part_4:现在scott用户可以为salgrade表创建一个别名:sg

    create synonym sg for salgrade;

    part_5:测试别名创建是否生效;

    select * from sg;

    这里写图片描述

    part_6:通过sys,创建一个新的用户mike并为其赋予连接和查询scott.emp表的权限

    --sys用户下依次输入下列指令
    create user mike identified by 3713;--创建用户mike
    
    grant connect to mike;--授权连接
    
    grant select on scott.emp to mike;--授权查表

    part_7:登录mike用户,并输入查表指令测试是否授权成功

    select * from scott.emp;

    这里写图片描述

    part_8:由于mike要写scott.emp表名,这样就比较冗长,所以下面通过scott用户创建公共同义词emp,这样mike就可以直接输入emp而不用带上scott.前缀了;

    --step_1
    --sys用户下输入下面指令,为scott授权创建公共同义词
    grant create public synonym to scott;
    --step_2:scott查询是否授权成功
    select * from session_privs where privilege like '%SYNONYM%';

    这里写图片描述

    --step_3:
    --scott登录的情况下输入创建公共同义词语句
    create public synonym emp for scott.emp;

    part_9:现在mike就可以直接查询同义词emp而不用再写scott.emp了

    --切换到mike用户,输入查询指令
    select * from emp;

    这里写图片描述

    20170111-10:10

    展开全文
  • 回顾简单的数据库权限等命令; 解锁用户和锁定用户 alter user scott account lock/unlock; //system下查看系统中的用户 select * dba_users; //创建用户名和密码 create user wj identified by wj; ...
  • 同义词就是为方便跨数据库访问或跨用户访问对象;  b.隐藏对象所属的用户; 2.视图(重点);  2.1 是什么?  查看数据结果集的窗口;  2.2 什么作用  a.隐藏数据的结构 :一般,键保留表 user_index...
  • 同义词

    2020-06-28 17:52:07
    Scott用户创建同义词,报权限问题,由于一般用户默认的resource里不含创同义词的权限,数据库会认为dba想刻意的隐藏一个对象,所以没权限。 赋予权限后,创建私有同义词sy1成功。 查看私有同义词sy1和查看表emp...
  • 数据库模式对象:   TABLE 表 用于存储数据的基本结构 VIEW 视图 以不同的侧面反映表的数据,是一种逻辑上的表 INDEX...用于在插入时自动填充表的字段 SYNONYM 同义词 为简化和便于记忆,给对象起的别名
  • oracle同义词

    2016-10-31 15:02:00
    本文介绍如何创建同义词语句,删除同义词以及查看同义词语句。 Oracle的同义词总结:从字面上理解就是别名的意思,和试图的功能类似。就是一种映射关系。 Oracle自我理解就是一个web项目想同时访问两个数据库,在...
  • 1、视图 dm中视图分为普通视图和物化视图。其中普通视图不占磁盘空间。 1.1、创建语法 SQL> create view () as select () from () where ();...1.2、视图查看 SQL> select view_name,text ...
  • 图解Oracle同义词

    千次阅读 2016-09-01 17:50:44
    Oracle的同义词(synonyms)从字面上理解就是别名的意思,和视图的功能类似,就是一种映射关系。它可以节省大量的数据库空间,对不同用户的操作同一张表没有...查看同义词;从sys用户; 创建公共同义词;为表dept;
  • 在Oracle中对用户的管理是使用权限的方式来管理的,也就是说,如果我们想使用数据库,我们就必须得有权限,但是如果是别人将权限授予了我们,我们也是能对数据库进行操作的,但是...Oracle数据库中提供了同义词管...
  • ----对象数据字典: ---1查看相关字典的源字典: select * from dict; ---2查看所有对象objects: sys@PROD>...
  • Oracle之同义词

    2020-09-28 22:34:22
    同义词 数据库对象(表、视图、索引……) 起别名(默认私有) hr : employees; 查看其它用户的表,报错“表或视图不存在”:可能是权限不足 授权: grant XXX to 用户名; grant select on hr. employees to scott; ...
  • 进入Enterprise Manager Console 授予权限 数据库-方案-选择源对象-表-选择...数据库-方案-选择源对象-表-选择一张表点右键-创建同义词 填写名称,名称为同义词名称(同表名),方案为要赋予同义词的用户名...
  • Oracle的同义词(synonyms)从字面上理解就是别名的意思,和视图的功能类似,就是一种映射关系. 在Oracle中对用户的管理是使用权限的方式来管理的,也就是说,如果我们想使用数据库,我们就必须得有权限...
  • oracle权限和同义词 笔记

    千次阅读 2012-09-25 01:06:46
    工作上碰到了同义词和权限的东西,放在这做个总结: 1.查看当前用户所拥有的系统权限 select * from session_privs;  2.查看数据库内的所有角色 select * from dba_roles; 4.查看当前用户所...
  • 这两天在公司做项目,负责了数据下发相关的工作,需要把其他数据库的数据到我们数据库中进行展示,其中需要用到dblink和Synonyms(同义词),现将创建的过程记录下来。 创建dblink 1.查看所有dblink --可以查看有哪些...
  • 我研究这个问题是从设置字符集开始的,当时发现oracle服务器端报错时的提示有时候显示乱码(显示‘?’),而有时候有比较正常。于是在网上发现好几种查看数据库字符集的方式 1>...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 179
精华内容 71
关键字:

查看数据库同义词