首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle文件权限Expvs.dbms_datapump

Oracle文件权限Expvs.dbms_datapump
EN

Database Administration用户
提问于 2017-05-10 08:55:41
回答 2查看 1.4K关注 0票数 1

我们已经使用对dbms_datapump的调用编写了自己的导出函数。在某些系统中,由于所选目录的文件权限不足,导出失败。但是,使用expdp执行对同一个目录的导出是可行的。

我在为这种不同的行为寻找一个解释。expdp会话是否在与数据库服务器不同的OS用户下运行?那会是谁呢?

编辑:我们已经看到了使用在用户会话中运行的utl_file和在预定作业中运行的文件写入之间的相同的区别。

EN

回答 2

Database Administration用户

发布于 2018-04-23 13:46:13

  1. 我假设数据库运行在Linux操作系统上。
  2. 我假设您使用tns连接字符串(可能来自不同的机器)使用sqldeveloper之类的工具连接到数据库。
  3. 我假设您使用的不是tns连接字符串,而是设置ORACLE_SID并创建本地连接,从而从数据库服务器启动expdp。

那么,是的,有可能发生这种奇怪的事情。

在你的一条评论中,你写了“两者都在数据库中作为作业运行”。这不是正确的术语。这两个会话都是数据库中的会话,两个会话都有一个与会话相对应的Linux进程:所谓的影子进程。还有更复杂的配置,但我假设这个配置。

那你的两个芝麻有什么区别?创建连接到数据库和影子进程的方式。

对于使用tns-connectstring的sqldeveloper,该工具与侦听器和侦听器进程联系,运行oracle二进制文件来创建进程(影子进程)。如果使用本地连接直接在服务器上运行expdp工具,则expdp工具将运行Oracle二进制文件来创建进程。

在其他情况下,您可以得到这样的结果,例如使用RAC-数据库。两个节点上的数据库目录指向具有不同权限的本地目录。

但是,如果没有更详细的信息,就没有必要对此进行进一步调查。

在这两种情况下都使用tns连接,这样就可以以相同的方式创建影子进程。

票数 1
EN

Database Administration用户

发布于 2017-05-10 13:19:34

当涉及到数据的实际导出时,expdp和DBMS_DATAPUMP是相同的。“‘expdp”只是一个二进制文件,它启动存储过程并执行一些终端操作。

试图写入文件系统的用户总是数据库软件正在运行的用户,例如,在大多数情况下,它可能是“oracle”。这是不会改变的。

我建议您反复检查expdp命令行参数和参数文件内容是否与DBMS_DATAPUMP参数相同。

另外(我知道这听起来很粗鲁,但真的),请仔细检查一下你是否真的在同一个数据库上运行.如果在expdp命令行中有TNS条目,那么您确定它们会指向您认为的位置吗?

票数 0
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/173179

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档