ORACLE如何使用DBLINK连接另一个数据库(两数据库关联操作)

一. 实现结果:在一个数据库中某个用户下编写一个存储过程,在存储过程中使用DBLINK连接另一个数据库,从此数据库中的一个用户下取数,然后插入当前的数据库中的一个表中。

 

二. 实现方法步骤:

    1. 创建存储过程

    2. 在存储过程中先创建database link

    3. 创建成功

    4. 从另一个数据库取出数据插入到当前数据库中

    5. 任务完成  

三. 创建DBLINK的方法:

create public database link dblink

       connect to totalplant identified by totalplant 

       using '(DESCRIPTION =

                (ADDRESS_LIST =

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

                )

                (CONNECT_DATA =

                  (SERVICE_NAME = prd.gdc)

                )

              )';
语法解释:create public database link DBLINK名字(自己随便起)

                  connect to 用户名 identified by 密码

                  using '(DESCRIPTION =

                            (ADDRESS_LIST =

                              (ADDRESS = (PROTOCOL = TCP)(HOST = 要连接的数据库所在服务器的IP地址)(PORT = 1521))

                            )

                            (CONNECT_DATA =

                              (SERVICE_NAME = 要连接的数据库的在本地的服务名(即要连接的数据库的SID))

                            )

                          )';

  2. 如果创建private的DBLINK

  create database link dblink

        connect to totalplant identified by totalplant 

        using '(DESCRIPTION =

                (ADDRESS_LIST =

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

                )

                (CONNECT_DATA =

                  (SERVICE_NAME = prd.gdc)

                )

              )';                        

四. 连接成功后从所连接的数据库中取数的方法:

     1. select * from tbl_ost_notebook@dblink;

     说明:只需在表名的后面加上"@DBLINK名字"即可。    

五. 在当前数据库下查看所有的DBLINK的方法:

     1. select * from dba_db_links;     

六. 删除当前数据库下的一个指定的DBLINK的方法:

     1. 如果创建的是一个public的DBLINK,删除时需要用

        drop public database link dblink;

     2. 如果创建的是一个private的DBLINK,删除时需要用

        drop database link dblink;

     说明:drop public database link DBLINK名字;     

七. 查看当前数据库的全局数据库名的方法:

     1. select * from global_name;   

八. 查看当前用户具有哪些针对DBLINK的权限的方法:

SELECT DISTINCT PRIVILEGE AS "Database Link Privileges"

        FROM ROLE_SYS_PRIVS

        WHERE PRIVILEGE IN ( 'CREATE SESSION','CREATE DATABASE LINK',

                             'CREATE PUBLIC DATABASE LINK');    

注意:数据库中的字段有clob类型,是不能移过来的:

  解决办法:

①创建临时表:这里临时表的表结构与目标表T_TEST相同,这种临时表不占用表空间,而且不同的SESSION之间互相看不到对方的数据.

Create global temporary table table_temp on commit delete rows as select * from T_TEST where 1=2; 

需要注意的问题: 
on commit delete rows会在commit提交的时候清空临时表数据;ON COMMIT PRESERVE ROWS则在会话结束的时候清空数据。 
②将远程表数据导入临时表

insert into table_temp select * from T_TEST@remote  

③将临时表数据导入目标表

insert into T_TEST select * from table_temp 

八. 参考资料:

           http://download-west.oracle.com/docs/cd/B19306_01/server.102/b14231/ds_admin.htm#i1008271

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值