在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'身份登录,然后'连接sys / sys @ xe为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?无论如何,我为两者都加入了“系统”。它继续,但警告已经在我的脑海中出现了。
突然:
此时,我不知道该怎么办。我通过命令行进入目录,并且ls -l'ed内容,显示.dmp和.log都有三个rwx,用于root。我还没有尝试的是以root身份登录时运行整个操作,但我不确定这会如何改变。
答案 0 :(得分: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:dba
或oracle: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
文件(不是root
或oracle
)并且您不在dba
群组中,那么请777.你说你复制的文件是777,这有点奇怪,因为它们不可执行,现在可以被任何人删除;再次使它们只是可读:
chmod 644 /usr/lib/oracle/xe/app/oracle/admin/XE/dpdump/*
您不需要来自其他系统的导出日志,只需要转储文件本身。 logfile
的{{1}}参数将创建导入过程的日志;由于您使用了相同的文件名,因此它将覆盖您复制的导出日志。这可能无关紧要,因为你仍然拥有原版,但将来需要注意的事项。它确实意味着现有的日志文件必须由impdp
写入。
您还需要确保Oracle所有者对整个目录树具有适当的访问权限,但似乎他们已经拥有oracle
,所以我不认为这是一个问题。你不应该真的需要做XE
这样的任何事情。如果您没有root
密码,则无论如何都可以从oracle
su
加入该帐户,这样就无需在以后手动更改所有权。
答案 1 :(得分:1)
impdp 命令是从Oracle外部启动的(在您的情况下可能带有 root ),但主要由Oracle服务器进程执行。特别是,转储和日志文件可由Oracle服务器进程直接访问(而不是由启动命令)。因此,需要设置文件保护,以便 oracle 用户可以访问它们。
所以执行以下操作(以root身份)并再试一次:
chown -R oracle:oinstall /usr/lib/oracle/xe/app/oracle/admin/XE/dpdump