一般情况下,用数据泵(datapump) impdp 导入数据需要先 expdp 导出数据。

而结合数据库链接(dblink)可以实现无需 expdp 导出,直接 impdp 从源数据库导入数据到目标数据库。

看看步骤:

1. 配置好指向源数据库的连接标识符

(Oracle19c) 在$ORACLE_HOME/network/admin/tnsnames.ora 文件中编辑:

比如这样:

测试是否能 ping 通:

显示 ok 说明没有问题。

注意:源数据库及其监听一定要处于开启状态(废话)。

2. 创建一个dblink


create public database link DB11G_link connect to system identified by pwd using 'DB11G';

不要随意使用 public 参数,有风险。 不要随意使用 system 用户,这个用户有管理整个数据库的权限,权限仅次于 sys 用户,权限越大风险越大。 同时指定 public 参数和 system 用户是很危险的做法,我这里只是学习环境,图个方便。

3. 创建一个目录

创建:

虽然在这种直接导入过程中不会用到 dmp 文件,但是会生成一个导入日志,

我们需要给这个日志指定一个目录,记得授权。


create directory dir_dmp as '/home/oracle/DIR_DMP';
grant read,write,execute on directory dir_dmp to public;

可以不创建

认识一个参数:nologfile

在 impdp 导入时可以不指定 directory 参数,不过需要用到另一个参数:nologfile

指定这个参数时就不会产生日志文件。

不太建议这么做,数据量大时我们需要通过日志查看导入过程是否有错误发生,以便处理错误情况。

开始导入

先看看数据

源端(DB11G)上的 user1 有一张表 t1,有五条数据。

目标端(EMREP)scott 用户下没有 t1 表。

导入

认识一个 impdp 参数: network_link

用这个参数指定我们之前创建的数据库链接

impdp system/pwd tables=USER1.T1 remap_schema=USER1:SCOTT directory=dir_dmp network_link=DB11G_link

导入完成

查看

目标端数据库(EMREP)上的 scott 用户:

完美!

嗯↗嗯~ 赛高尼 high 铁鸭子哒~

注意事项

1. 源端(要被导入的数据库)数据库实例及其监听一定要处于开启状态(废话)。

2. 创建 dblink 时不要随意使用 public 参数,以及不要随意指定权限太大的用户,有安全隐患。

3. 可以指定 nologfile,但是不建议。

4. 导入或导出时如果要用普通用户的话需要有相应role:

导入:DATAPUMP_IMP_FULL_DATABASE

导出:DATAPUMP_EXP_FULL_DATABASE

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐