gpt4 book ai didi

oracle - 将 .dmp 文件从 Oracle 11g 导入到 10g 返回错误 'Unable to open log file'

转载 作者:太空宇宙 更新时间:2023-11-04 09:44:24 24 4
gpt4 key购买 nike

在 Stack Overflow 的帮助下,我已经能够从本地计算机导出数据库的转储文件。我使用的命令如下:

host expdp tkcsowner/tkcsowner@xe version=10.2 schemas=tkcsowner dumpfile=tnrg.dmp logfile=tnrg.log

现在,我的本地机器有操作系统 Windows 7,32 位。几乎没有服务器。它有 Oracle 11g。我想把它转移到另一台机器上,测试服务器,运行 Linux。它有 Oracle 10g。

我绝不是 Linux/Unix 专家,但我确实有一些以前处理此类问题的人留给我的说明。

首先,我通过“su -”将权限更改为 root 用户 - 没有问题。

以“sqlplus/nolog”身份登录,然后“以 dba 身份连接 sys/sys@xe”- 也没有问题。

我创建了一个逻辑转储目录(不确定是否需要这一步,但我还是做了):

create or replace directory dumpdir as 'usr/lib/oracle/xe/app/oracle/admin/XE/dpdump';

完成,没问题。

所以我认为 TNRG.dmp 和 tnrg.log 应该在该目录中。不幸的是,由于某种原因,它无法被复制。拒绝访问。我想我应该注销,以 root 身份登录,然后从那里复制内容。它起作用了,但为了安全起见,我退出了 root,以我的普通用户身份重新登录,然后再次执行了上述所有操作。哦。

最后,所有的东西都准备好了,现在是导入 .dmp 和 .log 的时候了。万岁!

impdp tkcsowner/tkcsowner@xe schemas=tkcsowner dumpfile=TNRG.dmp logfile=tnrg.log

你瞧,它要求输入用户名和密码。是不是10g数据库上没有tkcsowners?无论如何,我为两者都输入了“系统”。它继续,但警钟已经在我脑海中响起。

突然间:

  • 已连接到:Oracle 数据库 10g 快捷版 10.2.0.1.0 版 - 生产
  • ORA-39002: 无效操作
  • ORA-39070: 无法打开日志文件。
  • ORA-29283: 无效的文件操作
  • ORA-06512:在“SYS.UTL_FILE”,第 475 行
  • ORA-29283: 无效的文件操作

此时,我不确定如何继续。我通过命令行进入目录,然后 ls -l'ed 内容,显示 .dmp 和 .log 都有三个 rwx,用于 root。我尚未尝试的是在以 root 身份登录时运行整个操作,但我不确定这将如何改变任何事情。

最佳答案

dumpdir 数据库目录对象指向的目录需要是一个有效的现有目录 - 至少在你使用它时,它不会在你创建对象时检查或提示 -并且它需要对运行 Oracle 的用户可读和可写,通常是 oracle

您最初创建的目录是 'usr/lib/oracle/... 而不是 '/usr/lib/oracle/...,但即便如此更正了 oracle 帐户可能无法使用的目录。由于您将目录创建为 root,它可能仍由 root:root 拥有并且权限为 700(如果您执行 ls -ld/usr/lib/oracle/xe/app/oracle/admin/XE/dpdump 将显示为 drwx------).

您需要使用正确的所有者和组将其更改为由 Oracle 拥有 - 这可能是 oracle:dbaoracle:oinstall,但检查所有者XE 目录。然后更改目录的所有权和您复制到其中的文件:

chown -R oracle:dba /usr/lib/oracle/xe/app/oracle/admin/XE/dpdump

并将目录权限设置为合适的级别;如果您不希望其他人创建或修改文件,但您不介意他们看到那里的内容,那么可以这样:

chmod 755 /usr/lib/oracle/xe/app/oracle/admin/XE/dpdump

如果您希望能够以您自己的身份(不是 rootoracle)复制您的 .dmp 文件,而您不是在 dba 组中,然后将其设置为 777。您说您复制的文件是 777,这有点奇怪,因为它们不可执行,并且目前可以被任何人删除;再次使它们可读:

chmod 644 /usr/lib/oracle/xe/app/oracle/admin/XE/dpdump/*

虽然您不需要来自其他系统的导出日志,只需要转储文件本身。 impdplogfile 参数将创建导入过程的日志;由于您使用了相同的文件名,它将覆盖您复制的导出日志。这可能并不重要,因为您仍然拥有原件,但将来需要注意一些事情。不过,这确实意味着现有日志文件必须可由 oracle 写入。

您还需要确保 Oracle 所有者对整个目录树具有适当的访问权限,但他们似乎已经拥有 XE,所以我认为这不是问题。您实际上不需要以 root 身份执行任何这些操作。如果您没有 oracle 密码,您仍然可以从 rootsu 到该帐户,这样以后就无需手动更改所有权。

关于oracle - 将 .dmp 文件从 Oracle 11g 导入到 10g 返回错误 'Unable to open log file',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17987936/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com