oracle通过dblink导表,oracle dblink用法总结和expdp和impdp利用dblink倒入导出到本地

oracle中的database link是定义一个数据库到另一个数据库的路径的对象,database link允许你查询远程表和执行远程程序。在任何分布式环境里,dblink都是必要的,另外注意database link是单向的连接。在创建database link的时候,oracle在数据字典中存储了相关的database link的信息,在使用database link的时候,oracle再通过oracle net用户预先定义好的连接信息访问相应的远程数据库来完成相应的工作。

1、在建立database link之前需要注意:

(1)确认从local database到remote database的网络连接是否正常,tnsping要能成功。

(2)确认在remote database上面有相应的访问权限。

2、oracle database link可分为下面三类:

(1)private:创建的是用户级别的dblink,只有创建该dblink的用户才可以使用这个dblink来访问远程的数据库,同时也只有该用户可以删除这个dblink。

(2)public:创建的是数据库级别的dblink,本地数据库中所有的用户数据库访问权限的用户或者pl/sql程序都能使用这个dblink。

(3)global:创建的是网络级别的dblink,这是对于oracle network而言的。

3、创建dblink需要的权限:

如果你新建了一个用户,那么你必须为它授予以下权限才可以创建dblink:create database link、create public database link、create session。

4、创建dblink:

点击(此处)折叠或打开

-- 如果不指定public,默认的是private,host后面可以是ip地址,也可以是解析过的域名

CREATE PUBLIC DATABASE LINK dl_OCPLYZ1 CONNECT TO lyz IDENTIFIED BY lyz

USING '(DESCRIPTION =

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

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = OCPLYZ1)

)

)';

或者我们可以这样写:

create public database link dl_OCPLYZ1 connect to lyz identified by lyz  using 'OCPLYZ1';

但是要再 tnsnames.ora 文件上加上这个:OCPLYZ1 ,这个格式最好要和上面的对应规整点。。。。否则有可能认不到。。

然后上面的  using 'OCPLYZ1' 这边就要和tnsnames.ora 名字一样了

e61402e61ee1c8534af34baa9d374825.png

5、查看dblink:

查看dblink,可以从dba_objects、dba_db_links这两张表去查:

点击(此处)折叠或打开

SELECT * FROM dba_objects do WHERE do.OBJECT_TYPE = 'DATABASE LINK';

SELECT * FROM dba_db_links ddl;

除了上面两张表,还有all_db_links、user_db_links。

6、使用dblink:

点击(此处)折叠或打开

-- 最简单的用法

SELECT * FROM table_name@database_link;

-- 不想让别人知道database link名字的时候,可以使用同义词包装一下

CREATE SYNONYM table_name for table_name@database_link;

SELECT * FROM table_name;

-- 也可以建立一个视图来封装

CREATE VIEW table_name_v AS SELECT * FROM table_name@database_link;

7、删除dblink:

点击(此处)折叠或打开

-- 删除public类型的dblink

DROP PUBLIC DATABASE LINK dblink_name;

-- 删除private类型的dblink,只有创建者自己能删

DROP DATABASE LINK dblink_name;

好,接下来讲 expdp 使用dblink 的用法:

如果我们要使用expdp ,然后要像实现exp一样,把这个dmp文件,给它倒到本地,那么我们应该怎么实现呢。。。。。。?

我们可以用连接 dblink的方法来导出:也就是说我们要用到两个库:

例子:我们可以从远程数据库倒入到本地数据库。。。。

1 我们首先要在本地数据库创建一个dblink

连接到:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

再本地数据库创建一个dblink :

SQL> create public database link dl_OCPLYZ1 connect to lyz identified by lyz  us

ing 'OCPLYZ1';

数据库链接已创建。

SQL>

'OCPLYZ1' 这边的 OCPLYZ1我已经再 tnsnames.ora 那边配好了:

e61402e61ee1c8534af34baa9d374825.png

我们可以简单的远程检查下数据库能不能通:查得到说明创建成功

点击(此处)折叠或打开

SQL> select count(1) from lyz.EMPLOYEES2@dl_OCPLYZ1;

COUNT(1)

----------

4

SQL>

2 接下来我们来进行导出操作。。。。

我们可以在 client 端或目标数据库执行。。。。

我们这边是直接在本地执行:

我们可以先查下本地ip 是多少:ipconfig:查得ip 172.17.146.3 ,但由于本地数据库是直接安装再win 7电脑上的,所以我本地就是目标数据库啦。。。。

倒出命令如下:这边说明下:这边的倒出是基于 表的倒出。。。。。

点击(此处)折叠或打开

expdp scott/tiger@172.17.146.3/orcl directory=DATA_PUMP_DIR dumpfile=exptable.dmp TABLES=lyz.TESTA network_link=dl_OCPLYZ1 LOGFILE=expdp_table.log;

解释如下:

这边的 expdp 倒出一定是要本地的数据库,也就是目标数据库的用户 和服务名expdp scott/tiger@172.17.146.3/orcl这边我 dblink 的用户是远程数据库,对应的用户是 lyznetwork_link=dl_OCPLYZ1由于我本地数据库和远程数据库的用户不一致,所以我们这边要加个前缀:lyz.xxt ,否则 数据库认不处你是来自哪里的表

TABLES=lyz.TESTA然后会如下错误:找不到scott.testa,

44919f7e146655e7f0b4089d5dd3821a.png

也就是说,如果不加 用户来源:lyz.testa 表,数据库应该是默认成你这个

TABLES=TESTA就是来自 scott表的,而scott表没有这个表,当然就报错了。。。我之前就是因为没写这个,所以一直报这个错,,,,

当然如果你目标库(本地数据库)有这个lyz 这个用户,我们也可以这样写:

点击(此处)折叠或打开

expdp lyz/lyz@172.17.146.3/orcl directory=DATA_PUMP_DIR dumpfile=exptable.dmp TABLES=TESTA network_link=dl_OCPLYZ1 LOGFILE=expdp_table.log;

这样也没问题:

9b7ffbc9ee853a5dbd213fc680459b89.png然后我们可以到本地看下结果: 这个 exptable.dmp 文件就是从 远程数据库倒下来的数据来。。。。。

9fd2f1f4f7a645a6a51de879d9ce3077.png

然后我们再倒入到库就可以了:这边要倒入的数据库为:oracl

由于上面的是基于表的导出,我们可以用下面这个命令:

impdpscott/tiger@orclDIRECTORY=DATA_PUMP_DIR DUMPFILE=exptable.dmp TABLES=lyz.TESTAREMAP_SCHEMA=lyz:scott table_exists_action=REPLACE

08748e664c551ebca940e567649c3a10.png

这边的意思是:impdp倒入到oracl库下的用户,倒入的路径为DATA_PUMP_DIR,倒入的dmp文件为:exptable.dmp,倒入的表为:TABLES=lyz.TESTA,REMAP_SCHEMA=lyz:scott:这边的意思是从lyz用户到scott用户,table_exists_action=REPLACE:这边的意思是:如果表存在,就直接替换掉。

或者是基于用户的倒入:去掉这个TABLES=lyz.TESTA,但是也是 lyz 用户到 scott用户

impdpscott/tiger@orclDIRECTORY=DATA_PUMP_DIR DUMPFILE=exptable.dmp   REMAP_SCHEMA=lyz:scott

table_exists_action=REPLACE

88da0bbfbc354ca724facf88fd35f4c0.png

好了,这个就是 利用 db_link 的expdp 、impdp的导出导入。。。。。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值