首页 文章

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

提问于
浏览
0

在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'身份登录,然后'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/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身份登录时运行整个操作,但我不确定这会改变什么 .

2 回答

  • 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 )将其更改为Oracle所有,但请检查 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 ,这样就无需以后手动更改所有权 .

  • 1

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

    因此,执行以下(以root身份)并再试一次:

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

相关问题