zoukankan      html  css  js  c++  java
  • [原创] 【DBLINK】创建和使用Oracle DBLINK跨数据库访问数据

    当用户要跨本地数据库,访问另外一个数据库表中的数据时,本地数据库中必须创建了远程数据库的dblink,通过dblink本地数据库可以像访问本地数据库一样访问远程数据库表中的数据。下面讲介绍如何在本地数据库中创建dblink. 1,创建dblink一般有两种方式,不过在创建dblink之前用户必须有创建dblink的权限。想知道有关dblink的权限,以sys用户登录到本地数据库: sys@ORCL> select * from user_sys_privs t where t.privilege likeupper('%link%');

     

    USERNAME                       PRIVILEGE                                ADM

    ---------------------------------------------------------------------- ---

    SYS                            DROP PUBLICDATABASE LINK                NO

    SYS                            CREATE DATABASELINK                     NO

    SYS                            CREATE PUBLICDATABASE LINK              NO   可以看出在数据库中dblink有三种权限CREATE DATABASE LINK(所创建的dblink只能是创建者能使用,别的用户使用不了),CREATE PUBLICDATABASE LINK(public表示所创建的dblink所有用户都可以使用),DROP PUBLIC DATABASE LINK。

    2,在sys用户下,把CREATE PUBLIC DATABASE LINK,DROP PUBLICDATABASE LINK权限授予给你的用户 sys@TEST> grant CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK to hr;

    Grant succeeded.

    3, 然后以hr用户登录本地数据库   1).创建dblink的第一种方式,是在本地数据库tnsnames.ora文件中配置了要远程访问的数据库。  hr@TEST> create public database link to_orclconnect to hr identified by hr using 'orcl';

    Database link created.   其中to_orcl是你创建的dblink名字, orcl是远程数据库的实例名,hr/hr是登录到远程数据库的用户/密码。然后在本地数据库中通过dblink访问远程数据库'orcl'中hr.employees表,sql语句如下所示   hr@TEST> select * from hr.employees@to_orcl;

      2).创建dblink的第二种方式,是在本地数据库tnsnames.ora文件中没有配置要访问的远程数据库, hr@TEST> create database link to_test connect to scott identified by tigerusing '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.226)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)))';

     

    Database link created.

      第二种是把第一种配置在tnsnames.ora文件中的信息,直接放在创建dblink语句后面。

     

    hr@TEST> select * from scott.emp@to_test;

     

     

    第一种情况tnsnames.ora文件中信息如下: orcl =

    (DESCRIPTION =

       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.226)(PORT = 1521))

       (CONNECT_DATA =

         (SERVER = DEDICATED)

         (SERVICE_NAME = orcl)

        )

      )

     

    4,

    查询方法:

    1)、执行select * from dba_db_links;语句。

    2)、在PL/SQL中,在左边浏览器中点击database links就可以看到数据库链路了。

    创建Create database link语句:create publicdatabase link 链路名 connect to 用户identified by 口令 using '连接字符串';

     

     

     

    附录:oracle11g之前版本数据库内创建到oracle11g的dblink的密码问题解决方案

    hr@TEST> create database link to_testconnect to scott identified by tiger using'(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.226)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)))';

    Database link created.

     

    hr@TEST> select * fromscott.emp@to_test;

    select * from scott.emp@to_test

                           *

    ERROR at line 1:

    ORA-01017: invalid username/password; logondenied

    ORA-02063: preceding line from TO_TEST

     

     

    hr@TEST> drop database link to_test;

    Database link dropped.

     

    hr@TEST> create database link to_testconnect to "scott" identified by "tiger" using '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.226)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=orcl)))';

    Database link created.

     

    hr@TEST> select * fromscott.emp@to_test;

     

        EMPNO ENAME               JOB                       MGR HIREDATE            SAL       COMM    DEPTNO

    ---------- -------------------------------------- ---------- ------------ ---------- ---------- ----------

         7369 SMITH               CLERK                    790217-DEC-80           800                    20

         7499 ALLEN               SALESMAN                 769820-FEB-81          1600        300        30

         7521 WARD                SALESMAN                 769822-FEB-81          1250        500        30

         7566 JONES                MANAGER                  7839 02-APR-81          2975                    20

         7654 MARTIN              SALESMAN                 769828-SEP-81          1250       1400        30

         7698 BLAKE               MANAGER                  783901-MAY-81          2850                    30

         7782 CLARK               MANAGER                  783909-JUN-81          2450                    10

         7788 SCOTT               ANALYST                  756619-APR-87          3630                    20

         7839 KING                PRESIDENT                    17-NOV-81          5000                    10

         7844 TURNER              SALESMAN                 769808-SEP-81          1500          0        30

         7876 ADAMS                CLERK                    7788 23-MAY-87          1100                    20

         7900 JAMES               CLERK                    769803-DEC-81           950                    30

         7902 FORD                ANALYST                  756603-DEC-81          3000                    20

         7934 MILLER              CLERK                    778223-JAN-82          1300                    10

     

    14 rows selected.

  • 相关阅读:
    关于CoreData的使用
    【转】向iOS开发者介绍C++(-)
    Storyboard里面的几种Segue区别及视图的切换:push,modal,popover,replace和custom
    【转】Object-C 多线程中锁的使用-NSLock
    写了半天的返回
    oracle 锁表问题
    LINQ的基本认识
    Oracle客户端配置
    REVERSE
    vchar2和nvchar2
  • 原文地址:https://www.cnblogs.com/LiaoHao/p/3268730.html
Copyright © 2011-2022 走看看