斯潘8
斯潘4
是否有任何方法可以将所有编写器放入一个事务中,以便只在工作区没有其他工作要完成时提交更改?,即在FME之外的故障时对数据库执行回滚?
关于这件事的更多细节:
我有一个工作区,其中有一个输入文件和多个数据库编写器,用于更新单独的表(Oracle非空间表)。我绝对要确保所有的功能都是书面的,或者根本没有失败。如何做到这一点?
因为目前的情况如下:
工作区失败,出现数据库或网络错误
有些表是更新的(那些先到的),而有些表不是。
我们尝试使用SQL执行器作为第一步,要执行“设置事务读写”,希望对所有数据库编写器都有一个提交,或者作为工作区的最后一个步骤之一。
当工作区使用终结器变压器发生故障时,这会起作用,但是,当转换失败而出现数据库错误时(例如“table does not exist”或其他),则其行为仍与上述相同,某些表已更新(已提交更改),而有些则未更新。
谢谢!
是否有任何方法可以将所有编写器放入一个事务中,以便只在工作区没有其他工作要完成时提交更改?
除了回滚问题,您是否在读写器手册中研究了不同的Oracle参数?特别是,我在考虑每批量写入的特性和每事务写入的特性。
如果将每次批量写入的功能设置为高数值,FME将把数据缓存在内存中,并作为一个大块发送给Oracle。确保它与每个事务写入的功能相同,并将其设置为一个大的数字。然后,只有当数据正确时,才会将其发送到Oracle并提交。
这两个参数都是编写器参数(不是功能类型参数),因此,如果只有一个“编写器”向多个“功能类型”(表)写入,那么它们可能会有所帮助。只有当你真的有多个“作家”时,他们才会有所帮助。
我最初的观察是,你使用的是多个作者——假设我们使用“作者”这个词的方式相同。
不能有一个写入多个表的写入程序?我不知道大卫的局限性(你有公共关系号码大卫吗?)但是我认为一个具有多个表的单个编写器比多个编写器更有可能回滚所有内容,每写一张表。
当使用FME中的事务编写多个表时,这是一个已知的限制。我认为国家外汇管理局正在制亚搏在线定替代策略来改进它,但我不知道他们的时间表是什么。
如果一致性对你很重要,我强烈建议您首先将数据写入临时临时的登台模式,验证它的一致性,如果一切正常,则将其传输到生产模式中。这不仅非常强大,但在进行批量导入时,也更符合数据库最佳实践。
最后一次传输必须在单个原子事务中完成,例如可以使用SQLExecutor内的匿名块来完成。
示例(请注意,您必须不在此设置fme_sql_分隔符):
开始保存点开始传输;插入到…;--第一次DML更新….;--第二个DML开始…结束;--其他工作更新……;--最终的dmlexception,当其他人回滚到启动事务时;提高;结束;
?2019安全亚搏在线软件公司|合法的