将数据从Oracle移动到SQL Server 2008

时间:2012-04-03 17:20:00

标签: oracle sql-server-2008 tsql

我在一台服务器上的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.

有没有人有任何简单的想法可以调整我现有的解决方案?

谢谢...

0 个答案:

没有答案