Oracle impdp抛出ORA-39088错误

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)

这个错误的原因是什么?

Ale*_*ole 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>;
Run Code Online (Sandbox Code Playgroud)

然后导入被修改为:

... DUMPFILE=db.dmp DIRECTORY=my_data_pump_dir
Run Code Online (Sandbox Code Playgroud)

请注意,操作系统目录必须可供pmon数据库服务器上的Oracle用户帐户(运行数据库进程的任何人)使用.除非本地目录以某种方式安装在远程服务器上,否则无法使用本地文件导入远程数据库.旧imp命令是一个客户端应用程序,经常在服务器上运行,但没有必要; impdp是服务器端应用程序.