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

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

我想将表数据从 SQL server 传输到 Informix,反之亦然。

传输应该按计划运行,有时在用户执行特定操作时运行。

我通过删除和插入事务来执行此操作,并且通过网络需要花费很长时间15分钟到30分钟

考虑到性能,如何以简单的方式完成此操作?


说我有

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

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


最佳答案

免责声明:我不是 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* 将给出基本模式。

如果您尚未尝试将数据导出到 CSV,并且只要您这样做没有任何合规性问题,我建议您从逗号分隔的文件加载数据。 (Informix 通常处理以管道分隔的文件,因此您需要将 SQL Server 端的分隔符调整为管道 | 或 Informix 导入端)。在 Informix 端,这将是

LOAD FROM 'source_file_from_sql_server' DELIMITER '|' INSERT INTO vacation (field1, field2, ..)

为了可重用性,我建议将其放入存储过程中。只需将该加载语句包装在 BEGIN WORK;COMMIT WORK; 中即可保持事务完整性。 Michał Niklas提出了一些跟踪更改的方法。如果将数据传输到 Informix 中的假期表和 SQL Server 中的权限表之间存在任何关联,我会建议另一个选项,即向 vacation 表添加一个触发器,以便您将所有新值写入临时表。

使用存储过程中的导入逻辑,您可以按需触发导入:

EXECUTE PROCEDURE vacation_import();

您还提到需要安排导入,这可以通过 Informix 的“ dbcron ”来完成。使用此功能,您将创建一个定期执行vacation_import()的计划任务。如果您之前没有使用过此功能,请使用OAT会有帮助的。您还需要对 CSV 文件进行一些整理工作。这可以通过 system() 调用来解决,您可以通过 Informix 中的存储过程进行该调用。

关于asp.net - 如何将数据从 SQL Server 传输到 Informix,反之亦然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32208938/

相关文章:

python - 提高 Python 嵌套 for 循环的性能

ssis - 在 SQL Server 2012 上运行 DTS 包

SSIS:如何以编程方式引用子包?

c# - 调用服务时出现 EndpointNotFoundException

asp.net - 将 ASPX 中 RadioButtonList 的 ListItem 值设置为常量

python - 在 Python : x**. 5 或 math.sqrt(x) 中哪个更快?

sql-server - ETL包的执行时间-脚本

vb 代码中的 MySQL 命令不起作用

javascript - 使用 JQuery for ASP.NET 自动完成

python - 加速 scipy.integrate.quad()?