日期:2014-05-17  浏览次数:21129 次

用bat批处理导入dmp文件问题
最近公司做项目,需要在oracle数据库中建一个表空间和几个用户,然后导入一个dmp的表,为了省事,小弟做了做了个bat的批处理文件,执行一个create.bat文件,完成建立表空间、建用户等操作;执行imp.bat向库中导入数据。
  第一个create.bat建表空间和用户没有任何问题,可以正确完成,可是在执行imp.bat导入数据的时候却遇到了问题,


imp.bat只有一条命令

imp aa/"***" fromuser=aa touser=aa file='e:\aa.dmp' log='e:\aa.log'

执行imp.bat后结果
******************************************************
E:\>imp aa/"123$\aa.dmp' log='aa.log'

E:\>imp aa/"123$\aa.dmp' log='aa.log'

E:\>imp aa/"123$\aa.dmp' log='aa.log'

E:\>imp aa/"123$\aa.dmp' log='aa.log'

E:\>imp aa/"123$\aa.dmp' log='aa.log'

E:\>imp aa/"123$\aa.dmp' log='aa.log'

E:\>imp smjzk/"123$\clientFinal.dmp' log='a.log'
终止批处理操作吗(Y/N)? ^C
******************************************************

imp命令不能执行,但是直接使用imp命令导入的时候可以正确导入,可是写入bat文件就不能执行。



————————————————————————
ps:在发帖的是否想到了问题的原因,因为我的imp.bat文件放在e:\,但是imp.exe的路径确实$oracle_home/bin,
所以执行imp.bat时会出错。

  把imp.bat放到$oracle_home/bin目录下,执行后可以正确调用imp.exe但是,出现了其他的问题,
  
在命令提示符下执行 imp aa/"**" fromuser=aa touser=aa file='e:\aa.dmp' log='e:\aa.log'
可以正确导入数据,,但是批处理执行时会报错,

1。用户名、密码错误 ------重新输入后正确,但是批处理文件中的用户名、密码没有错误。 何解????

2。导入dmp文件错误,
IMP-00002: 无法打开 EXPDAT.DMP 进行读取,

输入后正确,
导入文件: EXPDAT.DMP> e:\aa.dmp 。
何解???

3.IMP-00031: 必须指定 FULL=Y 或提供 FROMUSER/TOUSER 或 TABLES 参数
指定参数full=y,后正确。 
为什么在命令提示符下输入不需要此参数??????

——————————————









------解决方案--------------------
批处理中应该在 / 前加转义符

imp aa^/"**" fromuser=aa touser=aa file="e:\aa.dmp" log="e:\aa.log"


------解决方案--------------------
bat文件内容:

e:\oracle\product\10.2.0\db_1\bin\imp aa/*** fromuser=aa touser=aa file=e:\aa.dmp log=e:\aa.log
------解决方案--------------------

密码中有特殊字符 %,用 %% 表示。

直接这样就可以,不用 cd ...
%ORACLE_HOME%\bin\imp smjzk/"123$%%^" fromuser=smjzk touser=smjzk file="e:\clientFinal.dmp" log="a.log" full=y


------解决方案--------------------
楼主我自己测试了一下是可以的,命令和你的大同小异:exp test/123@test file='e:\d.dmp' owner=test log='e.log' 10G+windows xp