导出和导入不要用相同的日志文件,导入的时候另外创建一个 .log 文件来做导入记录
导出和导入不要用相同的日志文件,导入的时候另外创建一个 .log 文件来做导入记录
导出和导入不要用相同的日志文件,导入的时候另外创建一个 .log 文件来做导入记录

导入导出前

一、准备工作

导入导出前看看是否做好以下的主备工作
1、查询导入导出的文件路径。

-- cmd输入
sqlplus /nolog
conn /as sysdba
select * from dba_directories;

有的电脑没分配权限,conn /as sysdba 会不可用,百度有解决方案

2、创建文件名,分配给用户授权后进行导入导出
一般用system就不用分配给用户了


cmd和可视化工具都可以用以下语句
create [or replace] directory 虚拟文件夹名 as '路径';
例子
create directory dir as 'G:\dumpback';
grant read,write on directory dir to testuser;


二、数据泵导出和导入

**导入导出都是在cmd下就可以,不用连接数据库**
注意:
想要从高版本导出,再导入低版本需要在导出的时候指定版本号。
例子:指定版本号导出,常用在11g导出,导入到10g时,指定10g的版本。

expdp username/password@orcl directory=虚拟文件名 dumpfile=expdp.dmp logfile=expdplog.log version=10.2.0.3.0   

1、单用户(指定用户)

末尾不要加;
导入用户如果没创建,会自动创建用户(密码取的是导出用户时的被导出用户的密码)
比如:这里导入的时候没有指定导出:导入用户,那么系统会自动创建导出用户,密码为导出用户的密码


--用户/密码 表示有directory 权限的用户
--导出用户:你想导出的用户名
--diretory:导出文件的虚拟路径
expdp 登录用户/密码@orcl schemas=导出用户 directory=虚拟文件夹 dumpfile=自定义.dmp logfile=自定义.log
impdp 登录用户/密码@orcl remap_schema=导出用户:导入用户 directory=虚拟文件夹 dumpfile=导出文件名.dmp logfile=导出文件名.log 


2、多用户

expdp system/sys123@orcl directory=虚拟文件夹名
schemas=(用户1,用户2,用户3,用户4,用户5) dumpfile=文件名.dmp logfile=文件名.log

impdp system/sys123@orcl directory=虚拟文件夹名
schemas=(用户1,用户2,用户3,用户4,用户5) table_exists_action=replace dumpfile=M文件名.DMP logfile=文件名.log

3、指定表

使用:table_exists_action=replace 表示替换指定表的数据(覆盖)(见参考资料1)
https://docs.oracle.com/database/121/SUTIL/GUID-C9664F8C-19C5-4177-AC20-5682AEABA07F.htm#SUTIL936
在这里插入图片描述


导出指定表
expdp 用户/密码@orcl tables=(用户.表名,用户.表名) directory=虚拟文件夹 dumpfile=自定义.dmp logfile=自定义.log
这个导出语句有问题,详情看三、错误提示
expdp 用户/密码@orcl schemas=导出用户 tables=(表名,表名) directory=虚拟文件夹 dumpfile=文件名.dmp logfile=文件名.log 
修改为:
expdp 用户/密码@orcl tables=(用户名.表名, 用户名.表名) directory=虚拟文件夹 dumpfile=文件名.dmp logfile=文件名.log 


impdp 用户/密码@orcl directory=虚拟文件夹名 dumpfile=导出文件名.dmp logfile=导出文件名.log tables=(表名,表名) 
impdp 用户/密码@orcl tables=(表名,表明) remap_schema=导出用户:导入用户 directory=虚拟文件夹名 dumpfile=导出文件名.dmp logfile=自定义.log table_exists_action=replace

例子:导出test001用户Corp表的pk_corp为001的数据
数据库有test和test001两个用户,这里使用test作为登录用户,导出test001的数据也是可以的,只要有文件的读写权限

expdp test/1@orcl directory=dumpbak dumpfile=expdp.dmp Tables=test001.Corp query=('"WHERE pk_corp=001"')

4、全部数据

不适合有表空间文件介质损坏的时候使用,此时无效果,不要浪费时间
数据泵

// 导出全部数据
expdp system/sys123 dumpfile=文件名.dmp logfile=文件名.log full=y directory=虚拟文件夹名
// 导入全部数据
impdp system/sys123 dumpfile=文件名.dmp logfile=文件名.log full=y directory=虚拟文件夹名

传统方法

--导出整个库(必须具有DBA权限)
exp test/1@orcl file=e:/full.dmp full=y
imp test/1@orcl file=e:/full.dmp full=y

5、表空间

--导出表空间
expdp system/sys123@orcl tablespaces=导出表空间名 directory=虚拟文件夹名
dumpfile=文件名.dmp logfile=文件名.log
--导入表空间
impdp system/sys123@orcl remap_tablespace=导出表空间名:导入表空间名 directory=虚拟文件夹名
dumpfile=文件名.dmp logfile=文件名.log 


三、错误提示

这里schemas和tables会冲突的
原因schemas:指定导出用户;tables:指定导出表。
两个一起用肯定冲突,如果想指定某个用户的表可以用”用户名.表名“的方式
如:tables=test.student, test.teacher
多个表之间使用","隔开

expdp lzsh/1@orcl schemas=lzsh directory=dir 
dumpfile=lzsh20210412.dmp logfile=lzsh20210412.log tables=(bd_defdoclist,bd_defdoc)
错误提示:已请求多个作业模式,schema和tables。

参考资料

1.【CSDN】https://blog.csdn.net/huang_xw/article/details/7182577

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐