use*_*008 4 oracle import impdp
我正在尝试从Oracle 10g数据泵实用程序创建的转储文件中导入数据.我发出的命令是
impdp \"username/password @ 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
Run Code Online (Sandbox Code Playgroud)
这个错误的原因是什么?
从文档:
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>;
Run Code Online (Sandbox Code Playgroud)
然后导入被修改为:
... DUMPFILE=db.dmp DIRECTORY=my_data_pump_dir
Run Code Online (Sandbox Code Playgroud)
请注意,操作系统目录必须可供pmon
数据库服务器上的Oracle用户帐户(运行数据库进程的任何人)使用.除非本地目录以某种方式安装在远程服务器上,否则无法使用本地文件导入远程数据库.旧imp
命令是一个客户端应用程序,经常在服务器上运行,但没有必要; impdp
是服务器端应用程序.