Tôi cơ bản là từ nền cơ sở dữ liệu và mới đến công cụ .net. Xin vui lòng chịu với tôi nếu câu hỏi của tôi có vẻ ngớ ngẩn.Bản mẫu SQLBulk có thể thử lại cho SQL Server 2008 R2
Tôi đang sử dụng SqlBulkCopy trong mã của mình để chuyển dữ liệu từ máy chủ SQL này sang máy chủ SQL khác. Nhưng nó không thường xuyên do các vấn đề về mạng. Để tránh điều đó tôi đang lên kế hoạch để làm hai việc
Giảm kích thước hàng loạt (5000-1000) và tăng thời gian chờ (từ 3min. Để 1 phút)
Thực hiện retry Logic
Câu hỏi của tôi là
- Cách tốt nhất để thực hiện thử lại, nghĩa là ở cấp độ bảng hoặc ở cấp hàng loạt (nếu có khả thi)?
- Tôi tìm thấy một số công việc khung cho khả năng phục hồi SQL Azure ở đây: https://msdn.microsoft.com/en-us/library/hh680934(v=pandp.50).aspx Chúng tôi có bất kỳ điều tương tự cho SQL Server 2008 R2 không?
Mẫu Mã mà tôi đang sử dụng:
private void BulkCopyTable(string schemaName, string tableName)
{using (var reader = srcConnection.ExecuteReader($"select * from [{SourceDBName}].[{schemaName}].[{tableName}]"))
{
const SqlBulkCopyOptions bulkCopyOptions = SqlBulkCopyOptions.TableLock | SqlBulkCopyOptions.FireTriggers |
SqlBulkCopyOptions.KeepNulls |
SqlBulkCopyOptions.KeepIdentity;
using (var bcp = new SqlBulkCopy(dstConnection.ConnectionString, bulkCopyOptions))
{
const int threeMinutes = 60*3;
bcp.BulkCopyTimeout = threeMinutes; //Timeout is for a single batch
bcp.BatchSize = 5000;
bcp.DestinationTableName = $"[{DestinationDB}].[{schemaName}].[{tableName}]";
bcp.EnableStreaming = true;
foreach (var col in table.Columns.Cast<Column>().Where(c => !c.Computed))
{
bcp.ColumnMappings.Add(col.Name, col.Name);
}
bcp.WriteToServer(reader);
}
}
}
Hiển thị một số mã C# nơi bạn đang thực hiện SqlBulkCopy. –
@SarveshMishra, đã cập nhật mô tả bằng mã. – SumanKumar