一、准备工作
-
在备份目的路径建立备份文件夹
例如:d:\bak -
用sys用户在oracle中创建逻辑目录
create directory oracleBak_dir as ‘d:\bak’;
-
查看数据库中的逻辑目录
select * from dba_directories;
-
授权用户有对逻辑目录的读写权限
grant read,write on directory oracleBak_dir to someone;
二、导出
- 导出用户
expdp scott/tiger@orcl schemas=scott dumpfile=expdp.dmp directory=oracleBak_dir logfile=east.log parallel=40 job_name=jobName cluster=n ;
- 导出表
expdp scott/tiger@orcl tables=emp,dept dumpfile=expdp.dmp directory=oracleBak_dir logfile=east.log parallel=40 job_name=jobName cluster=n ;
- 按查询条件导
expdp scott/tiger@orcl directory=oracleBak_dir dumpfile=expdp.dmp tables=emp query=’where deptno=20’;
- 按表空间导
expdp system/manager@orcl directory=oracleBak_dir dumpfile=tablespace.dmp tablespaces=temp,example;
- 导整个数据库
expdp system/manager@orcl directory=oracleBak_dir dumpfile=full.dmp full=y;
三、导入数据
- 导入用户(从用户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
- 导入表(从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;
- 导入表空间
impdp system/manager@orcl directory=oracleBak_dir dumpfile=tablespace.dmp tablespaces=example;
- 导入数据库
impdp system/manager@orcl directory=oracleBak_dir dumpfile=full.dmp full=y logfile=import_temp.log;;
- 追加数据
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: 导入数据乱码
- 查询原数据导出的数据库编码
select userenv('language') from dual;
# 或
select * from nls_database_parameters where parameter ='NLS_CHARACTERSET';
- 设置Oracle客户端编码,保证导入时编码和之前导出的文件编码一致
临时修改
export NLS_LANG="SIMPLIFIED CHINESE_CHINA".AL32UTF8
或在/home/oracle/.bash_profile
加入配置永久性修改
export NLS_LANG="SIMPLIFIED CHINESE_CHINA".AL32UTF8
Q.E.D.