У нас есть запрос, который будет выполняться ежемесячно и возвращает данные размером 1 ГБ.
Используемый здесь запрос - это просто запрос выбора с внутренними объединениями без курсора.
В настоящее время они выполняют этот запрос в Toad и экспортируют данные из окна вывода в виде файла .dat.
Обратите внимание, что выполнение этого вручную с использованием Toad занимает 2 часа времени.
После этого ониизменение текста заголовка в файле .dat, чтобы иметь значимые имена, чтобы поделиться им с нашими клиентами.
Я хочу автоматизировать этот процесс, создав exe-файл, который будет выполнять этот процесс.
Снимок кода выглядит следующим образом:
using (OracleConnection conn = new OracleConnection())
{
conn.ConnectionString = ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;
conn.Open();
using (OracleCommand cmd = new OracleCommand(commandText))
{
cmd.Connection = conn;
using (OracleDataReader dtReader = cmd.ExecuteReader())
{
outputContent = new StringBuilder();
while (dtReader != null && dtReader.Read())
{
for (int i = 0; i < dtReader.FieldCount; i++)
{
outputContent.Append(dtReader[i]);
outputContent.Append(delimiter);
}
outputContent = outputContent.Replace(delimiter, Environment.NewLine, outputContent.Length - 1, 1);
}
}
}
}
outputPath = string.Format(ConfigurationManager.AppSettings["OutputPath"], DateTime.Now.Ticks);
outputStream = new StreamWriter(outputPath, true);
//Export
outputStream.Write(outputContent.ToString());
outputStream.Close();
Из журнала выяснилось, что оператор execute reader завершен в течение нескольких секунд.
Но чтение данных изУстройство чтения данных выдает «Исключительное сообщение ORA-03113: конец файла в канале связи в System.Data.OracleClient.OracleConnection.CheckError (OciErrorHandle errorHandle, Int32 rc)» через 8 часов.
Может ли кто-нибудьпожалуйста, дайте мне знать, что вышеуказанный подход хорош для обработки данных размером 1 ГБ?или
Есть ли другой лучший способ сделать это?
Спасибо, Гаятри