我正在使用数据泵对 4 个 .dmp 文件执行导入,并继续收到如下一组错误:
ORA-39002: invalid operation
ORA-39070: Unable to open the log file.
ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation
我是 Oracle 新手,找不到有用的解决方案。
尽管我使用的是 oracle 12c,但我正在按照here执行导入。
我在 Windows 命令中运行的命令如下所示:
impdp user/pass@db_name directory=DUMP_DIR dimpfile="file_name.dmp" schemas=schema_name content=all parallel=4
在 oracle 中创建 DUMP_DIR 并授予适当的权限。
我也用
运行了这个命令... logfile=file_name.log
添加在最后,但我不确定日志文件是否已创建或保存在哪里。
我发现了this - 这是完全相同的一组错误,但在导出和 Linux 上。答案的末尾有一句话“如果我们在 Windows 计算机上,那么我们需要确保侦听器和数据库都已使用完全相同的用户名启动。”这对于导入有用吗?如果是 - 到底是什么意思?
这里有一个很好的简短答案,基本上是“数据库无法写入日志文件位置。”
上面的链接建议进行一个简单的测试来解决该问题。
declare
f utl_file.file_type;
begin
f := utl_file.fopen ('DUMP_DIR', 'test.txt', 'w');
utl_file.put_line(f, 'test');
utl_file.fclose(f);
end;
/
如果失败,Oracle 根本无法写入该目录,可能是因为 Windows 文件权限的原因。检查 Oracle 服务以哪个 Windows 用户身份运行,并更改文件夹权限以允许他们写入访问权限。
如果有效,则这是
impdp 特有的问题。您可以尝试更改命令字符串 - 一种选择可能是将日志文件专门写入不同的 Oracle 目录,例如logfile=DATA_PUMP_DIR:file_name.log
。如果这些选项都不起作用,您还可以使用
NOLOGFILE=Y
完全禁用日志文件,但您必须监视控制台上的 impdp 输出,因为它不会保存在其他地方。
您的 Oracle 无法写入您指定的目录 (DUMP_DIR) 。 在 Windows 10 中,它的行为是不可预测的。解决方案
CREATE OR REPLACE DIRECTORY DUMP_DIR_2 AS 'C:\Users\Public\<name>
GRANT READ, WRITE ON DIRECTORY DUMP_DIR_2 TO schema_name;
我也遇到了同样的情况,在我的例子中,命令是(密码仅用于实例):
impdp 'sys/passExample as sysdba' directory=C:/oracle/oradata/EXEMPLODB dumpfile=preupd.bak
我将 preup.bak 放入 EXEMPLODB 文件夹中正确的是通过目录名称更改目录文件夹,正确的命令是:
impdp 'sys/passExample as sysdba' directory=EXT_DATA_FILES dumpfile=preupd.bak
EXT_DATA_FILES是目录名称,我通过查询找到的
select * from all_directories;
进入系统数据库。
expdp“'sys/pass@PEDX as sysdba'”转储文件=05042023.dmp LOGfile=05042023.log目录=导出模式=DEMO
我收到此错误消息:连接到:Oracle Database 19c 企业版版本 19.0.0.0.0 - 生产 ORA-39002: 无效操作 ORA-39070: 无法打开日志文件。 ORA-29283: 无效文件操作: 无法打开文件 [29435]
问题出在目录导出上,它是 ISCSI 驱动器,并且没有安装在我的 Linux 上。