如何将数据从SQL Server传输到Informix,反之亦然

时间:2015-08-25 16:09:26

标签: asp.net performance ssis sql-server-2012 informix

我想将表格数据从SQL server转移到Informix,反之亦然。

传输应该按计划进行,有时候当用户进行特定操作时。

我通过delete and insert transactions执行此操作,并且在15 minute to 30 minute之间通过网络需要很长时间。

如何在考虑performance的情况下轻松完成此操作?

说我有

SQL Server中的

Vacation表,希望将所有更新的数据传输到Informix中的Vacation表。

Informix中的

Permission表,并希望将所有更新的数据传输到SQL Server中的Permission表。

2 个答案:

答案 0 :(得分:2)

免责声明:我不是SQL Server DBA。但是,我已经成为Informix DBA十多年了,可以就其性能提出一些建议。

除了免责声明,听起来你已经有了一个功能性的应用程序,但性能是一个显示阻止,这是你主要寻求建议。

有一些技术信息可能对您有所帮助,但在他们缺席的情况下,我将对您的环境和应用做出以下假设。如果我在其中任何一个方面出错,请评论或编辑您的问题。

  1. 数据库服务器版本。从标签看,您似乎正在使用SQL Server 2012.但是,我无法确定Informix服务器和版本。我假设您至少运行IDS 11.50或更高版本。
  2. 当前如何交换数据。您是否直接从.NET应用程序连接到Informix?我会假设SQL Server就是这种情况,并且也会为您的Informix连接做出相同的假设。
  3. 表结构。我假设你对表有适当的索引。在Informix方面,dbschema -d *dbname* -t *tablename*将提供基本架构。
  4. 如果您还没有尝试将数据导出到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)

一些想法:

  1. was_transferred列添加到源表,将其默认值设置为0(您可以使用0/1代替false/true)。

  2. 从源表中选择was_transferred=0的数据。

  3. 传输数据更新选定的源行后,将其was_transferred设置为1

  4. 使用syncro_infodate_start等字段制作表格date_stop。如果您发现有date_stop IS NULL的记录,则表示您正在转发数据。这样可以防止您两次同步数据。