0

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

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

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

我绝不是 Linux / Unix 专家,但我确实有一些前任处理过的人留给我的指示。

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

以 'sqlplus /nolog' 身份登录,然后以 'connect sys/sys@xe as dba' 身份登录 - 也没有问题。

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

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 身份登录时运行整个操作,但我不确定这会如何改变任何事情。

4

2 回答 2

1

您的dumpdir数据库目录对象指向的目录必须是一个有效的现有目录——至少在您使用它时,它不会在您创建对象时检查或抱怨——并且它需要用户可读和可写Oracle 在其下运行,通常是oracle.

您的初始目录创建'usr/lib/oracle/...不是,但即使更正了该目录,该帐户'/usr/lib/oracle/...也可能无法使用该目录。oracle由于您将目录创建为root,它可能仍由root:root700 拥有并具有权限(如果您这样做ls -ld /usr/lib/oracle/xe/app/oracle/admin/XE/dpdump将显示为drwx------)。

您需要使用正确的所有者和组将其更改为由 Oracle 拥有 - 这可能是oracle:dbaor oracle: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

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

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

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

您还需要确保 Oracle 所有者对整个目录树具有适当的访问权限,但他们似乎已经拥有XE,所以我认为这不是问题。你不应该真的需要这样做,因为root. 如果您没有oracle密码,则无论如何都可以su访问该帐户root,这消除了以后手动更改所有权的需要。

于 2013-08-01T09:11:04.143 回答
1

impdp命令从 Oracle 外部启动(在您的情况下可能使用root),但主要由 Oracle 服务器进程执行特别是,转储和日志文件由 Oracle 服务器进程直接访问(而不是由启动命令)。因此,需要设置文件保护,以便oracle用户可以访问它们。

因此,执行以下命令(以 root 身份)并重试:

chown -R oracle:oinstall /usr/lib/oracle/xe/app/oracle/admin/XE/dpdump
于 2013-08-01T09:12:17.673 回答