oracle数据库全量导出与导入

背景环境

生产数据库A:linux环境

测试数据库B:windows环境

需求:从生产库A全量导出oracle数据库,包含存储过程等,然后导入到测试数据库B中,以更新测试数据库。

导出

  • 在生产环境中,使用管理员账号登陆

  • 切换到数据库用户,登录sqlplus并创建目录

    1
    2
    3
    4
    5
    su - orall
    export ORACLE_SID=hzdev
    sqlplus "/as sysdba"
    create directory dumpdir as '\tmp';
    quit
  • 导出数据库dump文件(shell环境,非sqlplus)

    1
    2
    3
    4
    5
    expdp srmis/srmis directory=dumpdir dumpfile=20190520.dump full=y parallel=10 logfile=20190520.log

    Dump file set for SRMIS.SYS_EXPORT_FULL_01 is:
    /tmp/20190520.dump
    Job "SRMIS"."SYS_EXPORT_FULL_01" successfully completed at 12:16:49

导入

  • 将导出的dump文件上传到测试环境

  • 在测试环境,登录sqlplus并创建目录

    1
    2
    3
    4
    5
    6
    7
    8
    9
    C:\Users\Administrator>sqlplus "/as sysdba"
    SQL*Plus: Release 11.2.0.3.0 Production on 星期一 5月 20 11:54:07 2019
    Copyright (c) 1982, 2011, Oracle. All rights reserved.
    连接到:
    Oracle Database 11g Release 11.2.0.3.0 - 64bit Production
    SQL> create or replace directory dumpdir as 'D:\新建文件夹';
    目录已创建。
    SQL> quit
    从 Oracle Database 11g Release 11.2.0.3.0 - 64bit Production 断开
  • 导入数据库dump文件(shell环境,非sqlplus)

    1
    2
    3
    C:\Users\Administrator>impdp srmis/srmis directory=dumpdir dumpfile=20190520.dump full=y table_exists_action=replace logfile=20190520.log

    作业 "SRMIS"."SYS_IMPORT_FULL_01" 已经完成, 但是有 7304 个错误 (于 12:41:19 完成)

扩展说明

  • 关于导入时table_exists_action参数,用于选择如何处理重复数据,有四个选项:
    • skip:忽略跳过
    • append:在原有数据上增加
    • replace:先drop表后在创建,最后完成数据插入
    • truncate:截断表后并插入
  • 导入时由于有些数据异常或者队列已存在,会有错误出现,需根据实际情况判断是否需要修正。