我在一台服务器上的Oracle表中有数据,我想每天将它复制到另一台服务器上的SQL Server 2008中的表。
我的解决方案(效果很好,但是有点麻烦的解决方案)如下:
我在Oracle机器上运行以下批处理文件
dumpdata --schema=mydb/mypassword --source-query="select * from MyTable"
MyTable >> q:\output1.sql
dumpData
来自cx_OracleTools
包,q:是SQL Server计算机上的联网驱动器
然后我在SQL Server计算机上运行以下批处理文件
sqlcmd -i before.sql
ssr.exe 0 "to_date(" "convert(datetime," output1.sql
ssr.exe 0 "'YYYY-MM-DD HH24:MI:SS'" "101" output1.sql
ssr.exe 0 ");" "); /SSR_NL/ GO /SSR_NL/" output1.sql
sqlcmd -i output1.sql -o error.txt
第一行运行SQL,删除SQL Server数据库中表的行。 第二行,第三行和第四行将日期转换为SQL Server可以理解的格式。 第五行将行导入SQL Server数据库。
现在,dumpData例程(因为它创建了INSERT语句)创建了大量文件,因此我更改了dumpData以执行以下操作:
dumpdata --schema=mydb/mypassword --source-query="select * from MyTable
where to_char(update_date,'yyyy')='2012'" MyTable >> q:\output1.sql
现在我在表中有一个update_date字段,每当更新行时它都会更改。所以我想我只会复制那些在2012年发生变化的行(这是一个可管理的大小)并将它们导入SQL Server数据库。
但是,仅删除SQL Server数据库中2012年在SQL Server数据库中更改的那些行,然后执行导入是不够的。我需要删除SQL Server数据库中2012年在Oracle数据库中更改的所有行。
如果我能以某种方式将我的INSERTS文本文件转换为UPSERT(请参阅Solutions for INSERT OR UPDATE on SQL Server),那么我的问题就会得到解决。
或者,我可以使用SSIS 2008.
有没有人有任何简单的想法可以调整我现有的解决方案?
谢谢...