We extract data from the oracle database to a file using C # oracleDataReader, we use several streams, and I found that reading data other than clob is very fast, say, 4 minutes per 1 GB. But when the data contains clob, it is very very slow, even data in a 12 MB block takes about 3 hours.
I tried to increase the buffer from 64 KB to 5 MB.
Please suggest how to increase the speed of writing a clob file to a file.
Source
we use 2 files 1 for actual csv and 1 for clob. we write recordpointer instead of clob in the csv file and in the clob file write the value of recordpointer, clob.
else if (objVal is OracleClob)
{
OracleClob oraVal = (OracleClob)objVal;
if (oraVal.IsEmpty)
sw.Write("");
else
{
{
Interlocked.Increment(ref recordPointer);
if (recordPointer == 1)
{
string fileName = outputFileName.Remove(outputFileName.LastIndexOf("."));
fileName = fileName + ".clobcsv";
clobWriter = new StreamWriter(fileName, true);
log.Info("CLOB data is found in this file " + outputFileName + " and clob data is stored in " + fileName + " file");
clobWriter.WriteLine("Id," + cols[i]);
}
StringBuilder sb = new StringBuilder("\"");
StringBuilder value = new StringBuilder();
value.Append(oraVal.Value);
value.Replace("\"", "\"\"");
sb.Append(recordPointer);
sb.Append("\"");
sb.Append(delimiter);
sb.Append("\"");
sb.Append(value);
value.Clear();
sb.Append("\"");
clobWriter.WriteLine(sb);
}
sw.Write(recordPointer);
}
}
source
share