将数据从Oracle移动到SQL Server 2008

将数据从Oracle移动到SQL Server 2008,oracle,sql-server-2008,tsql,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 Serve

我在一台服务器上的Oracle表中有数据,我希望每天将这些数据复制到另一台服务器上的SQL server 2008表中

我的解决方案运行良好,但有点麻烦,如下所示:

我在Oracle计算机上运行以下批处理文件

dumpdata --schema=mydb/mypassword --source-query="select * from MyTable" 
MyTable >> q:\output1.sql
dumpData来自cx_OracleTools包,q:是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 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数据库中更改的所有行

如果我能以某种方式将插入的文本文件转换为UPSERT See,那么我的问题就会得到解决


或者,我可以使用SSIS 2008

是否有人有任何简单的想法,我可以调整我现有的解决方案来工作


谢谢您……

或者,我可以使用SSIS 2008这是去谢谢你的路msmucker0527。由于我不是在寻找一个长期的解决方案,而且Oracle服务器有些不稳定,我宁愿尝试并调整我现有的解决方案,而不是在Oracle服务器上安装新的东西/重新启动Oracle服务器。我认为您不需要在Oracle服务器上安装任何东西来使用SSI,您可能需要在运行SSIS包的地方安装一些东西。如果SSIS不是一个选项,那么为什么在回答中将其列为on选项。这就是SISS的设计目的。为什么不批量插入第5步?谢谢msmucker0527。正如您所建议的,我一直在研究SSIS 2008,事实上,正如您所说,需要在SQL Server机器上安装Oracle客户端。然而,我问这个问题的所有原因,都是因为我认为可能有一个简单的调整,而不是投入大量时间让SSI工作。作为对责备的回应,我提到了它,只是为了表明我意识到了这种可能性。