Oracle中逻辑导出exp/导入Imp导入/导出是ORACLE幸存的最古老的两个命令行工具,通常认为exp\imp时一个很好的转储工具,特别是在小型数据库的转储,表空间的迁移,表的抽取等需求是使用起来简单、方便。但是不建议大数据量数据库使用exp\imp工具。
一、工具使用:
1.数据库导出:
在介绍工具使用之前,先说个注意事项,在Oracle11g之后新创建的表在没有插入数据时,是不会分配segment的,也就是说不会分配空间,而使用expdp导出时,这类空表就不会被导出,导致数据库结构不完整(此情况不包含原先有数据后来被清空的表)。因此为了不会遗漏数据,在导出时先对空表进行一次处理(手动分配空间):
1.通过user_tables查询那些表时没有数据的(注意:为了提高准确性,可以先对用户下的所有表进行一次表分析analysis table),然后通过下面语句直接生成手动分配segment的语句:
select 'alter table '||table_name||' allocate extent;' from user_tables where num_rows=0;
PS:当然以上语句会把原先有数据后被清空的表也查询出来,但为了一个一个排除麻烦,就直接再从新分配一次segment。
一般情况下不会导出全库,只是导出指定用户的数据。
(1)数据库服务器本地执行导出操作,oracle系统用户对dmp文件存放目录有读写权限:
[root@local ~]# su - oracle
[oracle@local ~]$ exp username/userpasswod file=/data/exp_dmp/full_username.dmp log=/data/exp_exp/full_username.log
file:存放导出的dmp文件的位置,与数据泵(expdp)不同,exp导出dmp文件需要指定全路径与dmp文件名。
log:与file类似,需要绝对路径。
(2)远程使用tns或者IP、端口号、实例名的一般链接方式远程链接数据库,导出文件会生成到本地,不会放到数据库服务上,但是要求本地PC或者远程的服务器有Oracle客户端,可以使用Oracle相关命令。
exp username/userpassword@192.168.1.10:1521/ORCL file=D:\exp_dmp\full_username.dmp log=D:\exp_dmp\full_username.log
注意:
1.导出时建议不要导出统计信息,在导入成功后手动手机统计信息。exp工具导出时指定不导出统计信息示例:
[oracle@local ~]$ exp username/userpasswod file=/data/exp_dmp/full_username.dmp log=/data/exp_exp/full_username.log statistics=none
2.导出时只导出库结构:
[oracle@local ~]$ exp username/userpasswod file=/data/exp_dmp/full_username.dmp log=/data/exp_exp/full_username.log statistics=none rows=n
2.数据库导入:
数据库导入时可以有两种方式:
一是dmp在数据库服务器本地磁盘,本地导入:
imp username/userpassword file=/data/full_username.dmp log=/data/full_username.log full=y
二是dmp文件在本地,没有在数据库服务器磁盘上,远程导入:
imp username/userpassword@192.168.1.10:1521/ORCL file=D:\exp_dmp\full_username.dmp log=D:\exp_dmp\full_username.log full=y
注意:导入时需要加参数 full=y!
二、特殊要求的数据导出、导入:
1.导出用户与导入用户不同(导出用户为zhang,导入用户时sun):
imp username/userpassword file=/data/full_username.dmp log=/data/full_username.log full=y fromuser=zhang touser=sun
2.导出时指定每个dmp文件大小:
imp username/userpassword file=/data/full_username.dmp log=/data/full_username.log filesize=2G full=y
3.导出时只导出表结构(元数据)或者表数据:
# 表结构(元数据)
imp username/userpassword file=/data/full_username_metadata.dmp log=/data/full_username_metadata.log rows=n
# 表数据
imp username/userpassword file=/data/full_username_metadata.dmp log=/data/full_username_metadata.log rows=y
其他可以参考exp与imp命令帮助文档进行操作。