2013-08-01 24 views
0

在堆栈溢出的帮助下,我已经能够从我的本地机器导出数据库的转储文件。我使用的命令如下:从Oracle 11g导入.dmp文件到10g返回错误“无法打开日志文件”

host expdp tkcsowner/[email protected] 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'登录,然后'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用户,以普通用户身份登录,并且再次执行了所有操作。 D'哦。

最后,随着所有的东西到位,现在是时候导入.dmp和.log。好哇!

impdp tkcsowner/[email protected] schemas=tkcsowner dumpfile=TNRG.dmp logfile=tnrg.log 

瞧,它要求输入用户名和密码。是否因为tkcsowners在10g数据库中不存在?无论如何,我为两者都提供了“系统”。它继续,但警告铃已经在我脑海中掀起。

突然:

  • 连接到:Oracle数据库10g Express Edition的发布10.2.0.1.0 - 生产
  • ORA-39002:无效的操作
  • ORA-39070:无法打开日志文件。
  • ORA-29283:无效的文件操作
  • ORA-06512:在 “SYS.UTL_FILE”,线路475
  • ORA-29283:无效的文件操作

在这一点,我不确定如何继续。我通过命令行进入了目录,并且ls -l了内容,显示.dmp和.log都有三个rwx,用于root用户。我还没有尝试的是以root身份登录时运行整个操作,但我不确定这会如何改变任何内容。

+0

你需要让用户运行的实例你的日志写入该目录的所有者。 – haki

+0

对不起,我没有明白;我没有写日志(我认为),它已经在目录中。如果你的意思是以root用户身份(服务器上唯一的其他用户)这样做,那么“su - ”是否已经这样做?再次,对不起,我不是Linux专家。 –

+0

导出日志与导入过程无关;你还没有需要复制该日志。该错误正在与导入过程的新日志相关联。但是当你创建目录对象时,你真的把它设置为''usr/lib/oracle/...'而不是'/ usr/lib/oracle/...'吗?缺少主导斜线会使路径无效并可能导致此类错误。 –

回答

1

您的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: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 

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

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

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

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

+0

非常感谢。答案和解释。有效。 –

1

IMPDP命令从Oracle以外(在你的情况可能与)发起的,但主要是由Oracle服务器进程执行。尤其是,转储和日志文件可以直接由Oracle服务器进程访问(而不是通过启动命令)。因此,需要设置文件保护,以便用户可以访问它们。

所以执行以下命令(根),然后再试一次:

chown -R oracle:oinstall /usr/lib/oracle/xe/app/oracle/admin/XE/dpdump 
相关问题