oracle 数据泵导出导用户,多用户,整个库,指定表的数据
传统导入导出数据泵导入导出查询语句查询系统用户的文件名select * from dba_directories;导入语句expdp 用户名/密码@orcl directory=文件名 dumpfile=导出文件名.dmp logfile=导出文件名.log tables=(表名,表名) version=版本错误expdp lzsh/1@orcl schemas=lzsh directory=di
导出和导入不要用相同的日志文件,导入的时候另外创建一个
.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
更多推荐
所有评论(0)