SyncNavigator是一款功能强大的数据库同步软件,适用于SQL SERVER, MySQL,具有自动/定时同步数据、无人值守、故障自动恢复、同构/异构数据库同步、断点续传和增量同步等功能,支持Windows xp以上所有操作系统,适用于大容量数据库快速同步。
安装包下载地址:https://www.syncnavigator.cn/Setup.zip
帮助文档地址:https://www.syncnavigator.cn/Help_zh-CN.chm
Web文档地址:https://www.syncnavigator.cn/chm/index.htm
数据库A有表Table_A,想把Table_A内容同步到数据库B的表Table_B,除了用循环逐条Insert之外,是否有批量写入的方式?比如:
ado_A_query 和 ado_B_table通过不同的connection分别连接到数据库A和B,执行下面的语句:
ado_A_query.SQL.Text := 'Select * From Table_A'
ado_A_query.Open;
ado_B_table.TableName := 'Table_B'; //Table_B是空表,字段定义与Table_A完全一致
ado_B_table.Active := True;
ado_B_table.RecordSet := ado_A_query.RecordSet;
ado_B_query.UpdateBatch(arall);
UpdateBatch只有在记录修改过之后才会提交回数据库吧,记录你读取后实际并没有被修改过。
其实逐条insert就可以,只要包裹在一个事务中就行了,性能比默认的一条insert一个事务还是高很多的。
数据库自身一般都带有Bulk write的功能,但是ADO中未必能用的了这些功能。可以试试不用delphi程序来实现数据库同步,直接用数据库的sql脚本来做。
用Delphi来实现数据表同步是一种效率很差的方法,建议用sql server management studio提供的数据导入功能来代替。
Sql Server还提供了Integration Service, 这是一个功能更强大、但也更复杂、适用于不同类型数据库之间的数据导入导出功能。