我有两个数据库:Sybase和MySQL。当这些记录插入Sybase或在某些计划的事件中导出时,我需要将记录导出到MySql。
我已经尝试使用output语句,但是不能在触发器或过程中使用。
有解决这个问题的建议吗?
最佳答案
(免责声明,我之前做过类似的事情,但是我绝不会认为答案低于最新技术水平-只是一种可能的方法
google围绕“跨数据库复制”或“跨rdbms复制”之类的内容进行查看,以了解谁之前完成了此操作。
)。
我首先要看看如果没有太多工作就无法获得ETL工具的评分。有免费的开放源代码,甚至Microsoft SSIS之类的东西也可以在非MS数据库上运行。
如果没有,我将其分为不同的步骤。
查找合适的Sybase输出命令,该命令从一个或多个表中导出行的子集。通过子集,我的意思是您需要能够添加WHERE子句,而不仅仅是进行全表转储。
使用适当的MySQL导入脚本/命令来加载从步骤1中获得的数据。您可能需要在2个之间来回循环,直到您手动进行操作为止。
编写Sybase触发器以将查找键插入到要导出的表中。您希望至少为每个插入的行存储表名和源Sybase表的键。使用诸如key1_char,key2_char之类的列名,而不是实际的列名,这样可以更轻松地根据需要扩展到其他源表。保持触发处理尽可能轻。怎么样更新呢?
在Sybase端编写一个计划的批处理,以针对步骤3中标记的行运行步骤1。
在Mysql上写一个计划的批处理,以通过#2导入#4的结果。或从#4开始。
另一种方法是根据需要执行#3标志位,但是用于驱动一个计划的批处理,该批处理从Sybase中选择数据并将其直接插入mysql。
您必须从Sybase的SELECT中拾取数据并将其手动绑定到mysql的INSERT。但是您可能会更好地控制所发生的事情,而不必处理2个批次。我认为这就是一个聪明的ETL已经可以代表您执行的操作。任何半巧的脚本语言(例如php,python或ruby)都应该易于处理。如果您具有代理/自动生成的键之类的功能,则尤其重要。
请记住,在两种情况下,您都必须删除已成功插入的要导出的行或将其标记为已完成。
关于mysql - Sybase至MySQL自动导出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29957045/