• Database Link详解


    --创建 CREATE public database link test_link CONNECT TO scott IDENTIFIED BY tiger using '(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = LEE) ) )'; --使用 select ename from emp@test_link; --删除 drop public database link TEST_LINK;

    
    
    
    
    

    一:dblink创建:

         

           1、已经配置本地服务

                 create public database

      link  toBeJing connect to scott
      identified by tiger using 'BEJING'


    数据库连接字符串'BEJING'是当前客户端数据库中TNSNAMES.ORA文件里定义的别名名称.可以用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA里定义.

     

            2、直接建立链接

                 create database link toBeJing

       connect to scott identified by tiger
       using '(DESCRIPTION =
       (ADDRESS_LIST =
       (ADDRESS = (PROTOCOL = TCP)(HOST = X.X.X.X )(PORT = 1521))
       )
       (CONNECT_DATA =
       (SERVICE_NAME = BJORCL)
       )
       )';


    host=数据库的ip地址,service_name=数据库的ssid。

      其实两种方法配置dblink是差不多的,我个人感觉还是第二种方法比较好,这样不受本地服务的影响。

    注意: 假如创建全局dblink,则必须使用systm或sys用户,在database前加public。

    1.先创建PUBLIC DATABASE LINK,不用指定用户和密码 

    scott@TEST>conn system/test
       Connected.
    system@TEST>CREATE PUBLIC DATABASE LINK orcl USING 'BEJING';
      Database link created.


      2.再在各个用户下创建私有DATABASE LINK(同PUBLIC DATABASE LINK名称相同),指定用户和密码
    system@TEST>conn scott/tiger
       Connected.
      
    scott@TEST>CREATE DATABASE LINK orcl CONNECT TO scott IDENTIFIED BY tiger;
       Database link created.

      实际上相当于: 

     CREATE DATABASE LINK orcl USING 'BEJING' CONNECT TO scott IDENTIFIED BY tiger;


    db link 有3种类型,我这里只讨论其中两种,connected user和fixed user。
    connected user,简单来说,连接方数据库以connected的用户来连接远程数据库。
    fixed user,简单来说,连接方数据库以fixed(指定的)用户来连接远程数据库。


    看看创建db link语法,你对这两种类型就比较清楚了。

    创建connected  user的db link语法:
    create databas link foo connect to scott identified by tiger using 'BEJING' ;

    创建fixed user的db link语法:
    create databas link foo using 'BEJING' ;


    db link 的命名和global_names有关,global_name是数据库全局名称,global_name在你所管理的数据库中要保证唯一。数据库名称是db_name。数据库名称一般都取得比较短,我的习惯一般取长度4个字符,重名概率高。

    所以,oracle模仿域名搞出一个global_name,global_name=db_name+db_domain。
    有了global_name,就可以实现数据库命名的全局唯一。例:ORCL.REGRESS.RDBMS.DEV.US.ORACLE.COM


    数据库全局名称可以用以下命令查出
           SELECT * FROM GLOBAL_NAME;


    如果global_names=true,那么db link的命名要和远程数据库的global_name相同;
    如果global_names=false,那么你可以随便命名db link。


    查询global_names是true还是false,在pl/sql中的命令窗口(不是sql窗口)执行:show parameter global_names

    二、dblink查询:

    查看所有的数据库链接,进入系统管理员SQL>操作符下,运行命令:   
      SQL>select owner,object_name from dba_objects where object_type='DATABASE LINK';


    三、dblink删除:

        DROP PUBLIC DATABASE LINK toBeJing

    四、dblink使用:

           SELECT……FROM表名@数据库链接名;

      查询、删除和插入数据和操作本地的数据库是一样的,只不过表名需要写成“表名@dblink服务器”而已。

    例:查询北京数据库中emp表数据   select * from emp@toBeJing;

    五、同义词配合:

           第四点中from emp@toBeJing可以创建同义词来替代:
           CREATE SYNONYM同义词名FOR 表名;


    CREATE SYNONYM同义词名FOR 表名@数据库链接名;

           如:create synonym bj_scott_emp for emp@toBeJing;

    于是就可以用bj_scott_emp来替代带@符号的分布式链接操作emp@toBeJing

     

          DB LINK是独立于创建用户(USER_DB_LINKS的USERNAME)起作用的,其他用户无法使用这个连接,无权限也不能删除它。

  • 相关阅读:
    bzoj 1053: [HAOI2007]反素数ant 搜索
    bzoj 1040: [ZJOI2008]骑士 環套樹DP
    对主席树的一些理解
    POJ 2777 Count Color【线段树】
    POJ 2420 A Star not a Tree?【爬山法】
    生物遗传学 整理人PYJ (恋_紫花地丁)
    POJ3321Apple Tree【dfs 树状数组】
    POJ1450:Gridland 【杂题】
    POJ 1088 滑雪【记忆化搜索】
    Poj3253:Fence Repair 【贪心 堆】
  • 原文地址:https://www.cnblogs.com/leischen/p/2446130.html
Copyright © 2020-2023  润新知