现在的位置: 首页 > 综合 > 正文

Database Link详解

2014年10月21日 ⁄ 综合 ⁄ 共 3610字 ⁄ 字号 评论关闭

一.创建Database Link

       1) 权限:创建数据库链接的帐号必须有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系统权限,用来登录到远程数据库的帐号必须有CREATE SESSION权限。这两种权限都包含在CONNECT角色中(CREATE
PUBLIC DATABASE LINK权限在DBA中)。一个公用数据库链接对于数据库中的所有用户都是可用的,而一个私有链接仅对创建它的用户可用。由一个用户给另外一个用户授权私 有数据库链接是不可能的,一个数据库链接要么是公用的,要么是私有的。

       2) 创建:已经配置本地服务

             create [public] database link link_name connect to scott identified by  tiger using 'BEJING'
            数据库连接字符串'BEJING'是当前客户端数据库中TNSNAMES.ORA文件里定义的别名名称.   可以用NET8 EASY CONFIG或者直接修改TNSNAMES.ORA里定义.

       3) 创建:直接建立链接

                   create database link line_name 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是差不多的,我个人感觉还是第二种方法比较好,这样不受本地服务   的影响。

       4) 创建全局dblink

        假如创建全局dblink,则必须使用systm或sys用户的权限,在database前加public。

          创建PUBLIC DATABASE LINK,不用指定用户和密码 在工具pl/sql工具目录Database Links看不到此dblink,可以访问远程所有用户的数据

          create  PUBLIC DATABASE LINK test_link USING 'BEJING';

       5) 创建私有dblink

          再在各个用户下创建私有DATABASE LINK(同PUBLIC DATABASE LINK名称相同),指定用户和密码.这种情况下,只能访问此用户的数据

        create DATABASE LINK test_link CONNECT TO scott IDENTIFIED BY tiger;

         实际上相当于: 

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

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

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

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

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

       7) 全局名称
              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

              修改GLOBAL_NAME的方法:

              1.在远程数据库的init.ora文件中将global_names设为false。

                     或者

              2.用sys用户执行如下语句:ALTER SYSTEM SET GLOBAL_NAME=TRUE/FALSE;

              修改后重新启动数据库设置才能生效。

       8) 创建同义词:

       对于经常使用的数据库链接,可以建立一个本地的同义词,方便使用:

       CREATE SYNONYM dual_syn FOR dual@test_link;

     9) 创建远程视图:

         CREATE VIEW view_dual AS SELECT * FROM dual@test_link where…;

      现在本视图可与本地数据库中的任何其它视图一样对待,也可以授权给其它用户访问此视图,但该 用户必须有访问数据库链接的权限。

       10) 其他:

          公有dblink使用public修饰关键字。在create和drop的时候都需要使用public关键字。

          公有dblink对所有人开放,在该dblink之上创建的同义词也会随之对所有人开放。(测试并确认,不过测试是在一个实例多个用户之间进行)

         私有dblink只有创建者可以访问,其上的同义词不能被其他用户访问。需为用户创建视图,并将视图授权给所需用户后,用户才可访问该视图。

         另外,不能将带有dblink的同义词直接授权给用户。否则报错,其等价于:

              grant select on table1@user1 to user2                           *

              ERROR at line 1:

       ORA-02021: DDL operations are not allowed on a remote database

二、dblink查询:

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

三、dblink删除:

    DROP PUBLIC DATABASE LINK test_link;

四、dblink使用:

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

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

    例:查询数据库中dual表数据   select * from dual@test_link;

抱歉!评论已关闭.