我们已经使用对dbms_datapump的调用编写了自己的导出函数。在某些系统中,由于所选目录的文件权限不足,导出失败。但是,使用expdp执行对同一个目录的导出是可行的。
我在为这种不同的行为寻找一个解释。expdp会话是否在与数据库服务器不同的OS用户下运行?那会是谁呢?
编辑:我们已经看到了使用在用户会话中运行的utl_file和在预定作业中运行的文件写入之间的相同的区别。
发布于 2018-04-23 13:46:13
那么,是的,有可能发生这种奇怪的事情。
在你的一条评论中,你写了“两者都在数据库中作为作业运行”。这不是正确的术语。这两个会话都是数据库中的会话,两个会话都有一个与会话相对应的Linux进程:所谓的影子进程。还有更复杂的配置,但我假设这个配置。
那你的两个芝麻有什么区别?创建连接到数据库和影子进程的方式。
对于使用tns-connectstring的sqldeveloper,该工具与侦听器和侦听器进程联系,运行oracle二进制文件来创建进程(影子进程)。如果使用本地连接直接在服务器上运行expdp工具,则expdp工具将运行Oracle二进制文件来创建进程。
在其他情况下,您可以得到这样的结果,例如使用RAC-数据库。两个节点上的数据库目录指向具有不同权限的本地目录。
但是,如果没有更详细的信息,就没有必要对此进行进一步调查。
在这两种情况下都使用tns连接,这样就可以以相同的方式创建影子进程。
发布于 2017-05-10 13:19:34
当涉及到数据的实际导出时,expdp和DBMS_DATAPUMP是相同的。“‘expdp”只是一个二进制文件,它启动存储过程并执行一些终端操作。
试图写入文件系统的用户总是数据库软件正在运行的用户,例如,在大多数情况下,它可能是“oracle”。这是不会改变的。
我建议您反复检查expdp命令行参数和参数文件内容是否与DBMS_DATAPUMP参数相同。
另外(我知道这听起来很粗鲁,但真的),请仔细检查一下你是否真的在同一个数据库上运行.如果在expdp命令行中有TNS条目,那么您确定它们会指向您认为的位置吗?
https://dba.stackexchange.com/questions/173179
复制相似问题