我有两个数据库:Sybase和MySQL。当这些插入Sybase或在某些预定事件中导出时,我需要将记录导出到MySql。 我已尝试使用输出语句,但这不能用于触发器或过程。 有什么建议可以解决这个问题吗?
答案 0 :(得分:0)
(免责声明,我以前做过类似的事情,但我决不会考虑现有技术的答案 - 只是一种可能的方法
谷歌围绕类似“跨数据库复制”的问题进行搜索。或者跨越rdbms复制'看看之前是谁做的。)。
我首先要看看你是否能够在没有太多工作的情况下获得ETL工具的分数。有免费的开源软件,甚至微软SSIS 可能在非MS数据库上工作。
如果没有,我会将其拆分为不同的步骤。
查找适当的Sybase输出命令,该命令从一个或多个表中导出行的子集。通过子集我的意思是你需要能够添加WHERE子句,而不仅仅是进行完整的表转储。
使用适当的MySQL导入脚本/命令加载从步骤#1中获取的数据。您可能需要在2之间来回循环,直到您手动操作。
编写Sybase触发器以将查找键插入到导出表中。您想要至少存储表名和&源Sybase表的每个插入行的键。使用像key1_char,key2_char这样的列名,而不是实际的列名,这样可以根据需要更容易地扩展到其他源表。 尽可能保持触发处理。更新btw怎么样?
在Sybase端编写计划批处理,为#3中标记的行运行步骤#1。
在Mysql上写一个预定批处理,通过#2导入#4的结果。或者从#4开始。
另一种方法是根据需要执行#3标记位,但用于驱动一个从Sybase中选择数据并直接将其插入mysql的预定批处理。
您必须从Sybase的SELECT中获取数据并将其手动绑定到mysql的INSERT。但是你可能会对正在进行的事情有更好的控制,你不必经常处理2批次。这就是我认为一个聪明的ETL已经代表你做的事情了。任何半聪明的脚本语言,如php,python或ruby都应该轻松处理它。如果您有代理/自动生成的密钥等特别重要。
请注意,在这两种情况下,您都必须删除已成功插入的导出行或将其标记为已完成。