我想将表格数据从SQL server
转移到Informix
,反之亦然。
传输应该按计划进行,有时候当用户进行特定操作时。
我通过delete and insert transactions
执行此操作,并且在15 minute to 30 minute
之间通过网络需要很长时间。
如何在考虑performance
的情况下轻松完成此操作?
说我有
SQL Server中的 Vacation
表,希望将所有更新的数据传输到Informix中的Vacation
表。
和
Informix中的 Permission
表,并希望将所有更新的数据传输到SQL Server中的Permission
表。
答案 0 :(得分:2)
免责声明:我不是SQL Server DBA。但是,我已经成为Informix DBA十多年了,可以就其性能提出一些建议。
除了免责声明,听起来你已经有了一个功能性的应用程序,但性能是一个显示阻止,这是你主要寻求建议。
有一些技术信息可能对您有所帮助,但在他们缺席的情况下,我将对您的环境和应用做出以下假设。如果我在其中任何一个方面出错,请评论或编辑您的问题。
dbschema -d *dbname* -t *tablename*
将提供基本架构。如果您还没有尝试将数据导出到CSV,并且只要您没有执行此任何合规性问题,我建议您使用逗号分隔的文件加载数据。 (Informix通常处理管道分隔文件,因此您需要将SQL Server端的分隔符调整为管道|
或Informix导入端。在Informix端,这将是一个
LOAD FROM 'source_file_from_sql_server' DELIMITER '|' INSERT INTO vacation (field1, field2, ..)
对于可重用性,我建议将其放入存储过程中。只需将该load语句包装在BEGIN WORK;
和COMMIT WORK;
中,以保持事务的完整性。 Michał Niklas提出了一些跟踪变更的方法。如果在Informix中将数据传输到休假表与SQL Server中的权限表之间存在任何关联,我会建议另一个选项,即向vacation
表添加一个触发器,以便您编写所有新的值到登台表。
使用存储过程中的导入逻辑,您可以按需触发导入:
EXECUTE PROCEDURE vacation_import();
您还提到了安排导入的必要性,可以使用Informix的“ dbcron ”来完成导入。使用此功能,您还将创建一个定期执行{em>任务,并定期执行vacation_import()
。如果您之前未使用过此功能,则使用OAT会很有帮助。您还需要使用CSV文件进行一些内务管理。这可以通过system()
调用来解决,您可以从Informix中的存储过程进行调用。
答案 1 :(得分:1)
一些想法:
将was_transferred
列添加到源表,将其默认值设置为0
(您可以使用0/1
代替false/true
)。
从源表中选择was_transferred=0
的数据。
传输数据更新选定的源行后,将其was_transferred
设置为1
。
使用syncro_info
和date_start
等字段制作表格date_stop
。如果您发现有date_stop IS NULL
的记录,则表示您正在转发数据。这样可以防止您两次同步数据。