最近公司做项目,需要在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,后正确。 
为什么在命令提示符下输入不需要此参数??????——————————————

解决方案 »

  1.   

    不用bat文件
    直接在cmd命令行里面输入导入指令
     参考
      

  2.   

    批处理中应该在 / 前加转义符imp aa^/"**" fromuser=aa touser=aa file="e:\aa.dmp" log="e:\aa.log"
      

  3.   

    楼主是什么系统?如果是windows的话只要能在cmd中执行的命令,直接放在bat里是没问题的。
      

  4.   

    不用bat文件
    直接在cmd命令行里面输入导入指令
     参考
    -------pgameli-----
    -------------------
    不用bat可以,命令没有任何问题。
    但是我为了偷懒写了bat,其中包括建表空间、建用户等很多操作(原谅我的懒惰),我现在建表空间写了一个bat,可以用;然后我在建表空间的bat里面调用导入数据的bat。
      

  5.   

    系统是windows xp的,数据库版本是10.2.0,imp命令在cmd里边能执行,但是放到bat里边确实无法执行,
    以为是环境变量的问题,但是理论上不应该是这个问题啊。向bat里边加了一条 “cd e:\oracle\product\10.2.0\db_1\bin”后,居然能调用imp了,但是提示imp的用户名、密码错误,dmp文件无法读取。根据命令提示输入用户名、密码、dmp文件路径后就可以导入了,并且能生成导入日志,很奇怪啊
      

  6.   

    bat文件内容:e:\oracle\product\10.2.0\db_1\bin\imp aa/*** fromuser=aa touser=aa file=e:\aa.dmp log=e:\aa.log
      

  7.   

    这个貌似没有作用,我试了一下,不可以的。不过现在问题越来越诡异了, 我在bat里边加上cd e:\oracle\product\10.2.0\db_1\bin 以后,刚开始能够运行,但是后来又出现了相同的问题,可是我在另外一个bat里边调用它确能正确执行。为了测试,我把bat内容改成了这样
    cd e:\oracle\product\10.2.0\db_1\bin && pause && imp smjzk/"123$%^" fromuser=smjzk touser=smjzk file="e:\clientFinal.dmp" log="a.log" full=y
    pause结果跟以前一样,连第一条命令 cd cd e:\oracle\product\10.2.0\db_1\bin也执行不了,**********************************
    H:\test\imp>cd e:\oracle\product\10.2.0\db_1\bin   && pause   && imp smjzk/"123$
    \clientFinal.dmp" log="a.log" full=y
    请按任意键继续. . .H:\test\imp>cd e:\oracle\product\10.2.0\db_1\bin   && pause   && imp smjzk/"123$
    \clientFinal.dmp" log="a.log" full=y
    请按任意键继续. . .H:\test\imp>cd e:\oracle\product\10.2.0\db_1\bin   && pause   && imp smjzk/"123$
    \clientFinal.dmp" log="a.log" full=y
    请按任意键继续. . .H:\test\imp>cd e:\oracle\product\10.2.0\db_1\bin   && pause   && imp smjzk/"123$
    \clientFinal.dmp" log="a.log" full=y
    请按任意键继续. . .**********************超级郁闷啊
      

  8.   

    imp tiger/tiger@orcl  fromuser=lssreport touser=lssreport file=EXPDAT.DMP 
      

  9.   


    这样可以正确调用imp命令,可是用户名密码跟dmp文件还是不正确,还需要手工填。谢谢vc555,帮忙改了脚本,我的cd命令好像很多余啊,哈哈
      

  10.   


    密码中有特殊字符 %,用 %% 表示。直接这样就可以,不用 cd ...
    %ORACLE_HOME%\bin\imp smjzk/"123$%%^" fromuser=smjzk touser=smjzk file="e:\clientFinal.dmp" log="a.log" full=y
      

  11.   

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

  12.   

    我也碰到了这个问题,很诡异...win7 64位 操作系统不知道 跟环境变量有没有关系