一、准备工作

  1. 在备份目的路径建立备份文件夹
    例如:d:\bak

  2. 用sys用户在oracle中创建逻辑目录

    create directory oracleBak_dir as ‘d:\bak’;
    
  3. 查看数据库中的逻辑目录

    select * from dba_directories;
    
  4. 授权用户有对逻辑目录的读写权限

    grant read,write on directory oracleBak_dir to someone;
    

二、导出

  1. 导出用户
expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp directory=oracleBak_dir logfile=east.log parallel=40 job_name=jobName cluster=n  ;
  1. 导出表
expdp scott/tiger@orcl tables=emp,dept dumpfile=expdp.dmp directory=oracleBak_dir logfile=east.log parallel=40 job_name=jobName cluster=n   ;
  1. 按查询条件导
expdp scott/tiger@orcl directory=oracleBak_dir dumpfile=expdp.dmp tables=emp query=’where deptno=20’;
  1. 按表空间导
expdp system/manager@orcl directory=oracleBak_dir dumpfile=tablespace.dmp tablespaces=temp,example;
  1. 导整个数据库
expdp system/manager@orcl directory=oracleBak_dir dumpfile=full.dmp full=y;

三、导入数据

  1. 导入用户(从用户scott导入到用户scott)
impdp scott/tiger@orcl directory=oracleBak_dir dumpfile=expdp.dmp schemas=scott;
# sysdba 多线程导入
impdp \"/as sysdba \" TRANSFORM=segment_attributes:n directory=dp_east dumpfile=east_%U.dmp logfile=east.log schemas=EAST parallel=4
  1. 导入表(从scott用户中把表dept和emp导入到system用户中)
# imp 导入方式
imp file=/opt/east-dump/schdule_20250526.dmp fromuser=BFBTEST touser=ZYFD_JKPT
impdp system/manager@orcl directory=oracleBak_dir dumpfile=expdp.dmp tables=scott.dept,scott.emp remap_schema=scott:system;
# 把 EAST 用户中的表 导入到 ZML 用户 的 ZML_EAST_DATA 表空间
impdp  directory=DATA_PUMP_DIR dumpfile=east.dmp  remap_schema=EAST:ZML   remap_tablespace=EAST_DATA:ZML_EAST_DATA;

  1. 导入表空间
impdp system/manager@orcl directory=oracleBak_dir dumpfile=tablespace.dmp tablespaces=example;
  1. 导入数据库
impdp system/manager@orcl directory=oracleBak_dir dumpfile=full.dmp full=y logfile=import_temp.log;;
  1. 追加数据
impdp system/manager@orcl directory=dump_dir dumpfile=expdp.dmp schemas=systemtable_exists_action

导入导出常见错误

常见问题1: 导入时提示Metadata 不可用

ORA-39006: internal error
ORA-39213: Metadata processing is not available

解决方案:

# 登录sqlplus
sqlplus / as sysdba
# 执行以下语句
exec dbms_metadata_util.load_stylesheets;

常见问题2: 导入数据乱码

  1. 查询原数据导出的数据库编码
select userenv('language') from dual;
# 或
select * from nls_database_parameters where parameter ='NLS_CHARACTERSET';

  1. 设置Oracle客户端编码,保证导入时编码和之前导出的文件编码一致

临时修改

export NLS_LANG="SIMPLIFIED CHINESE_CHINA".AL32UTF8

或在/home/oracle/.bash_profile加入配置永久性修改

export NLS_LANG="SIMPLIFIED CHINESE_CHINA".AL32UTF8

Q.E.D.


寻门而入,破门而出