zoukankan      html  css  js  c++  java
  • oracle link的创建过程

    下面做一个测试,在测试中,创建数据库链接的库为XJ(WINDOWS 2003 ORACLE 10g 10.2.0.1),被链接的库为DMDB(LINUX AS5 ORACLE 10g 10.2.0.1 RAC)
    第一部分:如何创建dblink
    dblink的创建有两种方式:
    1、在本地数据库tnsnames.ora文件中配置要访问的目标数据库信息
    create [public] database link test_link2
    connect to scott identified by tiger using 'test_link2';
    其中第一个test_link2是将要创建的dblink的名字,
    第二个test_link2是tnsnames.ora文件中配置的目标数据库DMDB的连接信息:
    test_link2 =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.123)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = mai)
        )
      )
    scott/tiger是登录到远程数据库的用户名和密码,然后当在本地数据库使用test_link2的dblink访问远程数据库的时候,会使用scott的身份来访问
    第二部分:dblink相关的权限
    SYS@test > select * from user_sys_privs where privilege like upper('%link%');
    USERNAME                       PRIVILEGE                                ADM
    ------------------------------ ---------------------------------------- ---
    SYS                            CREATE DATABASE LINK                     NO
    SYS                            DROP PUBLIC DATABASE LINK                NO
    SYS                            CREATE PUBLIC DATABASE LINK              NO
    权限解释:
    CREATE DATABASE LINK(所创建的DBlink只能是创建者自己使用,别的用户都使用不了)
    CREATE PUBLIC DATABASE LINK(public表示所创建的dblink所有用户都可以使用)
    DROP PUBLIC DATABASE LINK(删除Public dblink的权限)

    第三部分:dblink的使用
    假如说,我要比较两个库的用户的差异,那么我现在可以这么做:
    select username from dba_users@to_mai
    minus
    select username from dba_users;
    这样就可以得到在目标数据库中有的用户,而在当前用户中没有的用户列表了
    另外一个:如果你乐意,你可以用triggers+dblink实现一个简单的数据同步,不过不建议使用,玩玩就行了。

    第四部分:dblink的相关视图
    dblink的常用视图有如下几个:
    dba_db_links,查看系统中所有的dblink
    v$dblink,用来查看当前数据库中有哪些打开的dblink

    当GLOBAL_NAMES参数设置为TRUE时,使用DATABASE LINK时,DATABASE LINK的名称必须与被连接库的GLOBAL_NAME一致。
    首先查看DMDB的相关配置:
    SQL> show parameter global_names
    NAME         TYPE        VALUE
    ------------------------------------ ----------- ---------
    global_names     boolean     TRUE

    SQL> create database link test_link2 connect to test identified by test using 'D
    MDB';
    数据库链接已创建。
    SQL> select * from dual@test_link2;
    select * from dual@test_link2
                       *
    第 1 行出现错误:
    ORA-02085: 数据库链接 TEST_LINK2 连接到 DMDB
    而再次将XJ库的global_names设为FALSE,则数据库链接又可用了。
    SQL> alter system set global_names=false;
    系统已更改。
    SQL> select * from dual@test_link2;
    D
    -
    X
    可以看到,链接仍然可以用。
    如果在DMDB库上创建链接到XJ库上,可以观察到同样的结果。
    可以得出一个结论:global_names参数设置为FALSE,影响的是创建数据库链接的那个库对数据库链接的使用。也就是说,如果一个库(实例)的global_names参数设值为TRUE,则该库连接其他库的数据库链接,其名称必须要与被连接的库的global_name相同

  • 相关阅读:
    Memcached 笔记与总结(5)Memcached 的普通哈希分布和一致性哈希分布
    大数据价值挖掘:聚焦商业模式探索
    微博商业数据挖掘方法
    微博商业数据挖掘方法
    如何用大数据探索市场营销实践
    如何用大数据探索市场营销实践
    数据挖掘基本任务
    数据挖掘基本任务
    医疗大数据分析深入浅出
    医疗大数据分析深入浅出
  • 原文地址:https://www.cnblogs.com/yhason/p/3735319.html
Copyright © 2011-2022 走看看