我正在尝试从Oracle 10g数据泵实用程序创建的转储文件中导入数据。我发出的命令是
impdp \“用户名/密码@DB as sysdba \”remap_schema = SRC_SCHEMA:TARGET_SCHEMA remap_tablespace = source_tablespace:target_tablespace DUMPFILE = db.dmp
我收到以下错误消息:
ORA - 39001: Invalid argument value
ORA - 39000: Bad dump file spcification
ORA - 39088: file name cannot contain a path specification
此错误的原因是什么?
答案 0 :(得分:8)
ORA-39088:文件名不能包含路径规范
原因:转储文件,日志文件或sql文件的名称包含路径规范 操作:使用目录对象的名称来指示文件的存储位置。
这表明您显示为DUMPFILE=db.dmp
的参数实际上类似于DUMPFILE=C:\some\dir\path\db.dmp
,这是不允许的。您必须使用数据库可识别的目录,并使用DIRECTORY
参数指定它。
正如@ruffin从该目录参数链接中注意到的,您可以将转储文件放在默认的DATA_PUMP_DIR
目录中,您可以从dba_directories
视图中找到该目录,或者如果您有权使用该目录对象,all_directories
视图。您要导入的用户必须已获得读取和写入权限才能使用它。您还需要能够将转储文件移动到操作系统目录中,因此权限也可能是一个问题。
如果您没有合适的目录对象,并且您具有数据库权限和操作系统访问权限,则需要创建一个并授予适当的权限。这需要由具有适当权限的人员完成,通常为SYS
:
create directory my_data_pump_dir as 'C:\some\dir\path';
grant read, write on directory my_data_pump_dir to <username>;
然后导入被修改为:
... DUMPFILE=db.dmp DIRECTORY=my_data_pump_dir
请注意,操作系统目录必须可供数据库服务器上的Oracle用户帐户(运行数据库进程的任何人,pmon
等)使用。除非本地目录以某种方式安装在远程服务器上,否则无法使用本地文件导入远程数据库。旧imp
命令是一个客户端应用程序,经常在服务器上运行但不必执行; impdp
是服务器端应用程序。