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数据泵导出导入时,需在服务端的机器上执行命令,但是经测试,在客户端也可以成功;





posted @ 2015-05-21 17:06  Stepheng  阅读(178)  评论(0)    收藏  举报