oracle 数据迁移 impdp expdp

    之前做数据备份的时候用的都是exp 和 imp,但最近exp导了一个几十万数据的表就花了将近10分钟时间,简直不能忍。一直听说expdp的效率高,今天就来试一试。

    按照惯例,先贴几篇有用的文章,使用expdp导出数据dblink的操作

    最先需要明确场景,本地库A和远程数据库B,现在想要把B的数据迁移到A里面来。(如果是本地库中不同用户C和D,那么就无需dblink)。需要实现上述需求,需要分为以下几个步骤。

1.本地库A建立dblink连接远程数据库B

    dblink是方便本地用户无需登录B,而能获得B库中的表结构和数据,sql为

select * from sys_user@netlink

    其中netlink为本地库A创建的dblink。

    创建dblink的语句如下,注意dblink为public。

create  public database link netlink connect to rwtest identified by rwtest
   using'(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.3.65)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME =IOT)
)
)';

    如果觉得using里面的服务实例太长,可以用netmanger建立一个新的服务


      这样就可以简单写成

create  public database link netlink connect to rwtest identified by rwtest using 'orcl_rwtest';

2.创建directory

   expdp,impdp都需要用到directory,导出或者导入的dmp文件全放在directory中

select * from all_directories   --  查directory
create or replace directory DMPDIR as '/opt/exp_rwtest'
drop directory dmpdir

3.expdp 导出

    system/123456为本地库A的用户名密码,netlink连接到远程库B,导出表需要加上schema

expdp system/123456 network_link=netlink directory=dmpdir dumpfile=345.dmp tables=RWTEST.ALARM_INFO

    很遗憾我这里出错了,不知道什么原因。。。可能是数据库版本不一致,也可能是本机的oracle有问题。但导出本地库肯定是没问题的,也不需要network_link。如果有遇到类似问题的大佬麻烦告知下解决方法。


4.impdp 导入

   语句很简单,需要注意的是table_exists_action,默认是skip,表示如果导入库中有该表,则略过不导入。还有truncate,append,replace(先替换,后插入)等。

impdp system/123456  directory=dmpdir dumpfile=345.dmp tables=RWTEST.ALARM_INFO table_exists_action=append

    注意的是A库中也得有RWTEST用户才行,否则需要用REMAP_SCHEMA=RWTEST:ZYK 进行重新映射用户,还有remap_tablespace切换表空间等。    

impdp zyk/123456@IOT directory=dmpdir dumpfile=export_0426.dmp tables=RWTEST.OAUTH_USERS REMAP_SCHEMA=RWTEST:ZYK table_exists_action=append



猜你喜欢

转载自blog.csdn.net/qq_30905661/article/details/80093603