博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle使用expdp/impdp导出导入数据
阅读量:5915 次
发布时间:2019-06-19

本文共 2355 字,大约阅读时间需要 7 分钟。

这里假设已存在数据库用户,并是计划通过该用户导入导出该用户表空间上的数据。(我们这里假定用户名称为ls)

 

1.创建逻辑目录(数据库命令,sqlplus中执行)

Oracle不能直接指定系统目录让他去读写文件,只能先将系统目录映射成Oracle中的逻辑目录其才能读写。

先以sysdb登录,将系统/oracle/dump目录映射成Oracle的逻辑目录impexp;然后赋给导入导出用户在该目录的读写权限

create directory impexp as '/oracle/dump'; grant read,write on directory impexp to ls;

 另外后边的参logfile是用于记录导入导出的日志文件,文件名随意;schemas应该是导出的用户名。

 

2.expdp导出数据(非数据库命令,在主机命令行而非sqlplus中执行)

expdp ls/lsdb123#@lsdb directory=impexp dumpfile= lsdb.dmp logfile=lsdb.log  schemas= ls

 

3.impdp导入数据(非数据库命令,在主机命令行而非sqlplus中执行)

impdp ls/lsdb123# directory=impexp dumpfile= lsdb.dmp logfile= lsdb.log  schemas= ls

 如果要导到的用户与导出dumpfile的用户名不一样则要使用remap_schema代替schemas,将旧用户名指向新用户名:

impdp user_new/pass_new directory=impexp dumpfile=lsdb.dmp loggfile=lsdb.log remap_schema=user_old:user_new

如果要导到的表空间名称不一样,则要使用remap_tablespace将旧表空间名指向新表空间名:

impdp ls/lsdb123# directory=impexp dumpfile=lsdb.dmp loggfile=lsdb.log schemas=ls remap_tablespace=tablespace_old:tablespace_new

如果要导到的用户名和表空间名与原来导出时的都不一样,那么要同时使用remap_schema和remap_tablespace:

impdp user_new/pass_new directory=impexp dumpfile=lsdb.dmp logfile=lsdb.log remap_schema=user_old:user_new  remap_tablespace=tablespace_old:tablespace_new

如果导出的dmp文件中有多个表空间,那么remap_tablespace写多个:

impdp ls/lsdb123# directory=impexp dumpfile=lsdb.dmp loggfile=lsdb.log schemas=ls remap_tablespace='(tablespace_old1:tablespace_new1,tablespace_old2:tablespace_new2)'

如果原先已有数据,想使用覆盖导入使用table_exists_action=replace:

impdp ls/lsdb123# directory=impexp dumpfile= lsdb.dmp logfile= lsdb.log  schemas= ls table_exists_action=replace

如果expdp限制了单个文件大小使用%U导出多个文件(比如6个),则导入:

impdp lsdb/lsdb123# directory=impexp dumpfile=lsdb_%U.dmp logfile= lsdb.log  schemas= lsdb  parallel=6

 

4.导错处理

导入报错后一般是删除用户及其所有对象然后重导

drop user lsdb cascade;     --删除lsdb用户及其所有对象select sid,serial# from v$session where username='lsdb';   --如果用户存在活动会话则drop会失败所以先查找到用户会话alter system kill session'sid_num,serial#_num';  --杀除用户会话

 

imp导入:

imp lsdb/lsdb123#@lsdb fromuser=lsdb touser=lsdb file=/oracle/backup/lsdb.dmp log=/oracle/backup/lsdb.log

格式:imp 数据库用户/用户密码@数据库实例 fromuser=导出时的用户 touser=导入到的用户 file=导出的dmp文件当前所在目录 log=导入日志文件要存放的位置

报错:IMP-00013: only a DBA can Import a file Exported by another DBA

原因:用于导入数据的lsdb用户没有dba权限

处理:使用sys等dba用户导入或赋权:grant imp_full_database to lsdb

 

执行脚本文件(类似mysql的source)

sqlplus user/pass@servicenamestart /path/to/sql_script.sqlSQL>@ /path/to/sql_script.sql

 

参考:

转载地址:http://aogpx.baihongyu.com/

你可能感兴趣的文章
linux 常用命令总结
查看>>
表空间管理
查看>>
TensorFlow 简介
查看>>
oracle11g 高可用性DataGuard配置
查看>>
SVN 缺少更新报告的关闭标签
查看>>
Mysql查询连续数据
查看>>
acctmod-bugzilla.sh
查看>>
LigerUI - 树表格的数据来自Server
查看>>
mysql获取7天前数据,日期比较
查看>>
virtualbox 在windows7上安装
查看>>
iOS Http请求异步请求
查看>>
char、varchar 如何设置索引的长度?
查看>>
git日常使用
查看>>
初体验Jenkins安装并进行Maven项目自动化部署
查看>>
GNOME 3.2 发布
查看>>
实现sso 的两种方案
查看>>
【汇编】C++ 函数调用之——有参无返回调用(传引用)
查看>>
【汇编】C++递归调用实现
查看>>
maven 项目,通过maven编译 解决出现JSP NullPointerException
查看>>
log4j2之简化封装,告别静态成员变量
查看>>