一、Oracle数据库
1、 expdp/impdp命令导出/导入数据库
- 导出一个用户下所有的表
SELECT * FROM dba_directories ---查找可以存放文件的路径
EXPDP USERID='sys/XXX@orcl as sysdba' schemas=emily directory=DATA_FILE_DIR dumpfile=emily20180226.dmp
logfile=emily20180226.log version=10.2.0.1.0 ---导出语句
IMPDP USERID='sys/oracle@orcl as sysdba' schemas=clfpg3 directory=DATA_FILE_DIR dumpfile=emily20180226.dmp
version=10.2.0.1.0 ---导入语句
impdp fao/fao_db directory=DATA_FILE_DIR dumpfile=fao20180226.dmp ---导入语句(简略版)
- 导出user用户的部分表:
expdp user/XXX@orcl dumpfile=expdp.dmp directory=DATA_FILE_DIR tables = ('tablename1','tablename2') logfile=expdp2018.log
---或者
expdp user/XXX@orcl dumpfile=expdp.dmp directory=DATA_FILE_DIR tables = tablename1,tablename2 logfile=expdp2018.log
- 按查询条件导出表:
expdp user/XXX@orcl dumpfile=expdp.dmp directory=DATA_FILE_DIR tables=tablename query='WHERE datatype=1'
- 从一个用户expdp导出再impdp导入到另一个用户:
---向新用户导入表
impdp user1/XXX directory=DATA_FILE_DIR dumpfile=expdp20180226.DMP REMAP_SCHEMA=user1:user2
---若USER2用户存在,则导入成功之后直接登录用户即可;
---若USER2用户不存在,则导入成功后需拥有dba权限的用户修改user2的密码方可登录
alter user user2 identified by XXX;
其中:用户名是sys,
密码是XXX,
数据库sid(实例名)是orcl,
schemas要导出的用户名是emily(用户可以是没有创建的,密码与导出时的用户明码一致),
logfile=emily20180226.log 导入、导出数据库的日志,
version=10.2.0.1.0 要导入到 10.2.0.1.0版本的Oracle数据库中去。
2、 exp/imp命令导出/导入数据库
- 导入/导出部分表
exp userid=user1/xxxx@orcl tables=(tablename1,tablename2) file=E:\database.dmp ---导出
imp user2/xxxx@orcl file=E:\database.dmp full=y ---导入
- 导入/导出一个用户下所有的表
exp userid=user1/xxxx@orcl file=E:\database.dmp ---导出
imp user2/xxxx@orcl file=E:\database.dmp full=y ---导入
- 远程导入/导出其他电脑上的表
exp userid=user1/xxxx@192.168.20.48/orcl file=E:\database.dmp ---导出
imp user2/xxxx@192.168.20.48/orcl file=E:\database.dmp full=y ---导入
说明:其中括号中内容可省略
exp 用户名/密码@(主机ip:端口号/)实例 ( tables=(tablename1,tablename2) ) file=dmp所在的路径
imp 用户名/密码@(主机ip:端口号/)实例 file=dmp所在的路径 full=y
说明:
1、oracle9i以后引入数据泵命令IMPDP/EXPDP;
2、Oracle11g通过exp导出的数据是无法通过imp导入到oracle10g中的,但通过expdp和impdp可以完成。
3、IMPDP/EMPDP是服务器端是命令,无法在客户端使用。
4、Oracle跨版本导入导出可参照跨版本操作
4、Oracle11g中exp命令是无法 导出数据库中的空表的,但可以通过EXPDP导出,若想使用exp命令导出Oracle11g数据库空表,则进行以下设置即可;
--设置Oracle11g使用exp命令导出空表语句
---1、第一步执行:
alter system set deferred_segment_creation=false;
---2、第二步执行:
select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0
---3、第三步执行第二步的结果