斯潘8
斯潘4
尝试使用启用的外键写入Oracle表时遇到错误。
由于FME写入Oracle的方式,可能会有不同的会话写入工作区中的表。如果除了带有外键的表之外,还向外键表插入新值,则会发生这种情况。因为提交的顺序不正确,所以可能会收到运行转换的错误。
人们会认为,了解Oracle最简单的方法是使用高级参数(Oracle编写器指令)禁用所涉及的外键。”转换前要执行的SQL语句“在FME中的Oracle编写器上,然后用启用外键”转换后要执行的SQL语句“。但是,这也有一些问题,因为当这些语句运行时,FME似乎不会执行提交,我们仍然会收到来自Oracle的错误——即。“资源忙,使用nowait获取”.
注释:正在进行工作以改进FME如何写入Oracle。
我们的一个客户想出了这个主意来规避这个问题。正如他所说,这并不理想,但它确实起到了作用。一种可能的解决方案是使用WorkspaceRunner并分离另一个工作区。第一个工作区将使用pre-sql语句禁用外键。使用WorkspaceRunner调用工作区进行插入。被调用的工作区将成功完成,并在完成时提交事务。一旦回到第一个工作区,FME就完成了转换,并将使用PostSQL语句启用外键。我们的Oracle数据库完整性很好,我们的FME用户也很高兴。
此解决方案将允许您维护写入Oracle的性能—这一点非常重要,具有大量功能。
另一种解决方案是在FME工作区的高级参数下使用Oracle编写器指令。它叫做“每个事务要写入的功能“。
问题的根本原因与没有在事务上发送到Oracle数据库的提交指令有关。默认情况下,该值设置为1000,并且一旦达到该值,FME将只发出提交。如果我们将这个指令设置为1,我们将为每个特性发出一个提交。这将完全解决最初的问题,但是这种方法将对性能产生影响,特别是对于大量熟悉Oracle的功能,任何人都能理解。
要考虑的另一个Oracle编写器指令是“每批量写入的功能“。默认设置为200。这意味着FME将一次向Oracle发送200个功能,等待响应并将消息返回给FME,即插入成功,FME将继续。有必要将其设置为1,并再次实现对Oracle写入性能的进一步影响。
如前所述,我们正在努力改善这一领域。一旦我们有了更好的方法,我们将确保更新本文并传递信息。
?2019安全亚搏在线软件公司|合法的