快捷搜索:  汽车  科技

sqlserver从零开始数据库扩容(SQLServer)

sqlserver从零开始数据库扩容(SQLServer)不能在RDS通过下列两种方式进行大容量插入 :原因是基于安全考虑不提供上传文件到RDS 数据库服务器。特别说明只需要将SqlBulkCopy 指定SqlBulkCopyOptions.CheckConstraints就好,即:SqlBulkCopy blkcpy = new SqlBulkCopy(desConnString SqlBulkCopyOptions.CheckConstraints)例如:将本地的一个大表通过SQLBulkCopy方式导入到RDS的实例中第二种:直接使用SQL Server Business Intelligence Development Stuidio新建 SSIS包:

sqlserver从零开始数据库扩容(SQLServer)(1)

背 景

sqlserver从零开始数据库扩容(SQLServer)(2)

很多用户在使用阿里云云数据库SQL Server时,为了加快插入速度,都尝试使用大容量插入的方式,大家都知道,对于完整恢复模式下的数据库,大容量导入执行的所有行插入操作都会完整地记录在事务日志中。如果使用完整恢复模式,大型数据导入会导致填充事务日志的速度很快。相反,对于简单恢复模式或大容量日志恢复模式,大容量导入操作的按最小方式记录日志减少了大容量导入操作填满日志空间的可能性。另外,按最小方式记录日志的效率也比按完整方式记录日志高 。

但实际上,当大容量导入与数据库镜像共存时,会出现镜像 Suspend的情况,这个情况是由于微软在2008 R2上的BUG导致,详细你可以了解 https://support.microsoft.com/en-us/kb/2700641 微软已经明确表示在2008 R2不会FIXED,那么如何正确在RDS使用大容量导入并避免镜像异常,下面介绍几种方式。

通过ADO.NET SQLBulkCopy 方式

只需要将SqlBulkCopy 指定SqlBulkCopyOptions.CheckConstraints就好,即:SqlBulkCopy blkcpy = new SqlBulkCopy(desConnString SqlBulkCopyOptions.CheckConstraints)

例如:将本地的一个大表通过SQLBulkCopy方式导入到RDS的实例中

第二种:直接使用SQL Server Business Intelligence Development Stuidio新建 SSIS包:

sqlserver从零开始数据库扩容(SQLServer)(3)

特别说明

不能在RDS通过下列两种方式进行大容量插入 :原因是基于安全考虑不提供上传文件到RDS 数据库服务器。

第一种:

BULK INSERT testdb.dbo.person_in

FROM N'D:\trace\bcp.txt'

WITH

(

CHECK_CONSTRAINTS

);

第二种:

INSERT ... SELECT * FROM OPENROWSET(BULK...)

sqlserver从零开始数据库扩容(SQLServer)(4)

总 结

sqlserver从零开始数据库扩容(SQLServer)(5)

大容量导入数据会带来更快的插入,解决了用户在有大量数据导入缓慢困惑,在阿里云数据库中,你可以使用五种方式来实现业务场景,但是基于镜像的主备关系,需要特别加入一个检查约束的选项,这是写这个最佳实践的目的,一旦镜像SUSPEND,不断有DUMP文件产生,一来需要时间来修正,二来DUMP文件也会不断占用空间,但不会影响用户的可用性和可靠性。有两种方式在RDS中不能实现,另外,还可以通过ODBC来实现大容量导入,具体请参见https://msdn.microsoft.com/en-us/library/ms403302.aspx。希望这些对大家有用,特别是阿里云云数据库使用用户。

更多深度技术内容,请关注云栖社区yunqiinsight。

猜您喜欢: