到目前为止,我的Server中有两个数据库,每个数据库包含一个表。
我有两个数据库如下:
1) Db1 (MySQL)
2) Db2 (甲骨文)
现在,我要做的是用来自db1的Db1的数据填充Server的数据库表,如下所示:
Insert into Table1 select * from Table1从Table1(Mysql Db1)选择*-来自Mysql数据库的数据 插入到Table1(Sql server Db1) -从Mysql数据库插入考虑相同模式的数据
我不想使用don批量复制,因为我不想逐块插入数据。我希望将所有数据插入到1 go中,因为我的操作不限于在数据库中插入记录。因此,用户必须坐着等待一个长的,比如第一个数以百万计的数据,在数据库中逐块插入,然后再等待我的进一步操作,这也是长时间运行的操作。
因此,如果我加快了这个过程,那么我的第二个操作也可以加快,因为所有记录都在我的一个本地sql服务器实例中。
这可以在C#应用程序中实现吗?
更新:我研究了链接服务器,因为@GorDon 建议我可以使用链接服务器来实现这个场景,但根据我的研究,我似乎无法通过代码创建链接服务器。
我想在ado.net的帮助下这样做。
这正是我想要做的:
假设我有两个不同的客户端RDBMS,其中有两个数据库和客户端中的一些表。
所以数据库是这样的:
Sql Server :
Db1
Order
Id Amount
1 100
2 200
3 300
4 400
Mysql or Oracle :
Db1:
Order
Id Amount
1 1000
2 2000
3 3000
4 400现在,我想比较源( Server)和目标数据库(MySQL或Oracle)之间的数量列。
我将用来连接这两个不同的RDBMS数据库表来比较数量列。
在C#中,我可以做的是像在我的datatable (内存中)中逐块获取记录,然后借助代码比较这些记录,但是这需要花费大量的时间来考虑数百万条记录。
所以我想做点更好的事。
因此,我想在两个数据库中的本地SQL server实例中提取这两个RDBMS记录,然后创建连接查询,基于Id连接这两个表,然后利用DBMS的处理能力,有效地比较这数百万条记录。
这样的查询有效地比较了数百万条记录:
select SqlServer.Id,Mysql.Id,SqlServer.Amount,Mysql.Amount from SqlServerDb.dbo.Order as SqlServer
Left join MysqlDb.dbo.Order as Mysql on SqlServer.Id=Mysql.Id
where SqlServer.Amount != Mysql.Amount当我的本地服务器实例中有两个不同的关系数据库数据时,上面的查询工作: SqlServerDb和MysqlDb,这将从数量不匹配的记录下面获取:
因此,我试图将这些记录从源( server )获取到MySQL,其数量列值不匹配。
预期输出:
Id Amount
1 1000
2 2000
3 3000那么有什么方法可以达到这种情况呢?
发布于 2017-12-16 19:49:30
在SELECT端,使用SELECT ... INTO OUTFILE ...创建一个.csv文件(制表符分隔)。
在INSERT方面,使用LOAD DATA INFILE ... (或任何目标机器语法)。
同时这样做可能比分块更容易编写代码,而且可能(或不)运行得更快。
发布于 2017-12-21 04:29:50
SqlBulkCopy可以接受DataTable或System.Data.IDataReader作为输入。
使用查询读取源DB,在源数据库或Oracle上设置ADO.Net DataReader,并将读取器传递给SqlBulkCopy的WriteToServer()方法。
这可以不受限制地复制几乎任意数量的行。我已经使用数据读取器方法复制了数亿行。
发布于 2017-12-18 13:29:55
在远程数据库中添加更改的日期如何?
那么,您可以获得自上次同步以来更改的所有行,并将它们进行比较?
https://stackoverflow.com/questions/47814248
复制相似问题