oracle的exp和imp、expdp、impdp
1.exp:
功能:
导出oracle用户所有信息,包括表、视图、存储过程等。
语句:
exp username/password@tns名 file=D:\exp_user.dmp log=D:\exp_user.log
解释:
username:要导出的oracle用户名;
password:username用户的密码;
tns名:username所在的库,在tnsnames.ora文件中的名字;
file:导出文件的路径;
log:导出日志;
示例:
要导出用户scott用户的内容,scott密码为PASSWORD,tns名为orcl,导出文件和日志均放在c盘根目录下:
打开cmd,直接运行一下语句:(前提是机子上至少安装有oracle客户端,且可以连接tns名为orcl的库):
exp scott/PASSWORD@orcl file=C:\scott.dmp log=C:\scott.log
截图:
以为到此就结束了;
但是会发现,scott的空表没有导出来!!!!!!!
原来是因为exp导出命令只针对分配了长度的表进行操作,而空表默认是没有extent长度的;
因此,在exp之前需要对用户scott下的表进行如下操作:
Select 'alter table '||table_name||' allocate extent;' from user_tables;
然后执行查出来的所有语句(即对所有的表都分配长度);
再次执行exp,导出了包括空表在内的所有表;
2.imp
功能:
导入oracle用户所有信息,包括表、视图、存储过程等。
语句:
Imp userid=dba权限用户/password@tns名 fromuser=源用户名 touser=目标用户名 file=D:\源文件.dmp
解释:
dba权限用户:目标库中具有dba权限的用户;
password:该dba用户的密码;
tns名:目标库在tnsnames.ora文件中的名字;
源用户名:源数据的用户;
目标用户名:目标用户的用户名;
file:文件来源路径;
备注:
目标用户和源用户的表空间和临时表空间要求名称一样!!!
示例:
要将之前导出的orcl库下scott用户下的数据导入到orcltest库下scotttest用户中去,文件来源是
C:\scott.dmp;
打开cmd,直接运行一下语句:(前提是机子上至少安装有oracle客户端,且可以连接tns名为orcltest的库):
Imp userid=system/password@orcltest fromuser=scott touser=scotttest file=
C:\scott.dmp
OK!!!
3.expdp
转载文章:http://www.cnblogs.com/lanzi/archive/2011/01/06/1927731.html
例子:导出user_1用户的信息,再导入到用户user_2
新建一个dump用到的目录:
CREATE DIRECTORY dir_u1 AS 'D:\Oracle_dir';
--------此目录是服务端机子的目录,需提前在服务端机子上创建一个目录 D:\Oracle_dir
将目录赋权限给用户user_1:
GRANT READ, WRITE ON DIRECTORY dir_u1 TO user_1;
导出用户user_1的信息:
expdp user_1/password@xuhuitest schemas=user_1 directory=dir_u1 dumpfile=expdp_user1.dmp logfile=expdp_user1.log
user_1导出的信息导入到用户user_2中:
impdp user_2/password@xuhuitest directory=dir_u1 dumpfile=expdp_user1.dmp REMAP_SCHEMA=user_1:user_2 logfile=impdp_user1_2.log
PS:
网上说expdp数据泵导出导入时,需在服务端的机器上执行命令,但是经测试,在客户端也可以成功;