关于Oracle与SQL Server中数据迁移的办法

最近遇到一个需求,需要把Oracle中一部分表的数据迁移到SQL Server数据库中。但是这些表的结构是有些差异的。

方法一,使用SQL Develper的数据导出工具,导出SQL insert语句,然后再手动修改其中的一些细节,最后在放到SQL Server中执行。因为前后的表结构是有差异的,我需要一条一条语句的去删掉一些字段,然后再删掉一些值,几条或者几十条数据还行,这40万条数据,太多了,这个方法行不通。

方法二,使用C#代码。我用C#写了一个Data Migration的控制台小程序,把Oracle表中的所有数据读取到DataTable中,然后取出需要的字段,拼接成SQL语句,在使用C#代码写入到SQL Server数据库中。虽然这个方法完全自动化,可是遇到了性能了问题,因为Oracle与SQL Server数据库都不是本地的,都是在数据库服务器上的,取数据的时候还可以,但是插入数据的时候,很慢。以前用一个SqlConnection,接收到一条SQL语句的时候,new一个SqlCommand去执行,总共new了40万个SqlCommand.考虑到性能,就想用一个SqlCommand,设置一个循环,循环40万次,每次更改其Text字符串,但是我发现并没有太大的性能上的改善。然后想把40万条insert语句放入到一个字符串中,一下子到数据库中去执行。但是这个办法,执行了command.ExecuteNonquery之后,因为数据库非常大,会长时间没有反应,而且程序会抛出timeout
exception的异常。

方法三,既然不能用程序插入,那么我就用C#程序把数据导出,拼接成sql语句放入到文本文件中。因为是自己拼接的,可控性强,就不用像方法一中那样去更改了。然后打开SQL Server Management Studio,连接到远程数据库,执行这个SQL脚本文件就可以了,这样比C#代码插入快多了。

关于Oracle与SQL Server中数据迁移的办法

时间: 2024-10-15 04:30:50

关于Oracle与SQL Server中数据迁移的办法的相关文章

Oracle 和SQL server中数据备份与恢复

Oracle 侧 创建一个表,将现有表数据导入其中. create Table  TB_NYU_TENDERTBL_BAK   as  select *  from  TB_NYU_TENDERTBL  where  1=1 删除原来表内容. DELETE  FROM TB_NYU_TENDERTBL 恢复表的内容 insert  into TB_NYU_TENDERTBL  select  * from  TB_NYU_TENDERTBL_BAK SQL server侧 select  * i

SQL Server GUID 数据迁移至MongoDB后怎样查看?

关键字:SQL Server NEWID():BSON:MongoDB UUID 1.遇到的问题和困惑 SQL Server中的NEWID数据存储到MongoDB中会是什么样子呢?发现不能简单的通过此数据查询了. 例如我们将SQL Server 数据库中的QQStatements2019表迁移至MongoDB 中,集合命名也为QQStatements2019. 在SQL Server中选择4个OrderId,数据作为演示实例,查看如下: 经过程序转换后,在mongodb的客户端工具nosqlbo

《SQL Server企业级平台管理实践》读书笔记——SQL Server中数据文件空间使用与管理

1.表和索引存储结构 在SQL Server2005以前,一个表格是以一个B树或者一个堆(heap)存放的.每个B树或者堆,在sysindexes里面都有一条记录相对应.SQL Server2005以后,引入了分区表的概念(Table Partition),在存储组织上,现有的分区基本上替代了原来表格的概念,原先表的概念成为了一个逻辑概念.一个分区就是一个B树或者一个堆.而一张表格则是一个到多个分区的组合. 1.1用B树存储于聚集索引的表数据页 如果一个表格上有聚集索引(Clustered In

C# 如何确定SQL Server 中数据表是否存在

SQL Server数据库的表名等信息属于架构集合的一部分,ADO.NET中的SqlConnection类包含的GetSchema 方法用于获取支持的架构集合列表,因此,要确定SQL Server 数据库中表是否存在是否存在,可通过SqlConnection.GetSchema("Tables")来获得,该方法返回一个DataTable,DataTable中包含table_catalog.table_schema.table_name.table_type等4列,table_name列

SQL Server中数据的修改是如何落盘的?

To understand how the write-ahead log works, it is important for you to know how modified data is written to disk. SQL Server maintains a buffer cache into which it reads data pages when data must be retrieved. Data modifications are not made directl

ORACLE和SQL SERVER的数据同步常用方法

1. 自己编程,或者第三方工具2. 在sqlserver中,使用linkedserver,访问oracle,然后编写job进行数据同步3. 在oracle中,使用透明网关,访问sqlserver,进行数据同步4. sqlserver触发器和存储过程定时排程刷新机制5. 专门的ETL工具, SSIS/OWB/Data Stage/Power Center...

在SQL Server中将数据导出为XML和Json

原文:在SQL Server中将数据导出为XML和Json     有时候需要一次性将SQL Server中的数据导出给其他部门的也许进行关联或分析,这种需求对于SSIS来说当然是非常简单,但很多时候仅仅需要一次性导出这些数据而建立一个SSIS包就显得小题大做,而SQL Server的导入导出工具其中BUG还是蛮多的,最简单的办法是BCP.   数据导出为XML     在SQL Server 2005之后提供了一个for xml子句在关系数据库中原生支持XML.通过该命令可以将二维关系结果集转

SQL Server 将数据导出为XML和Json

有时候需要一次性将SQL Server中的数据导出给其他部门的也许进行关联或分析,这种需求对于SSIS来说当然是非常简单,但很多时候仅仅需要一次性导出这些数据而建立一个SSIS包就显得小题大做,而SQL Server的导入导出工具其中BUG还是蛮多的,最简单的办法是BCP. 数据导出为XML 在SQL Server 2005之后提供了一个for xml子句在关系数据库中原生支持XML.通过该命令可以将二维关系结果集转换为XML,通过BCP就可以将数据存为XML了. 例如下面的数据: 我们可以通过

【SQL Server数据迁移】64位的机器:SQL Server中查询ORACLE的数据

从SQL Server中查询ORACLE中的数据,可以在SQL Server中创建到ORACLE的链接服务器来实现的,但是根据32位 .64位的机器和软件,需要用不同的驱动程序来实现. 在64位的机器上,通过访问接口:OracleProvide for OLE DB,来实现. 1.机器环境和软件环境 操作系统是:windows 7旗舰版 64位,SQL Server 20008R2  64  位,Oracle 11g 11.2.0.1.0   64 位. 2.ORACLE环境的设置 连接orac