我们有一个查询将按月执行并返回大小为1GB的数据。从oracle数据库读取大量数据并使用C#将其导出为.dat文件
此处使用的查询只是包含内部连接的选择查询,不涉及游标。
目前他们正在Toad中执行此查询并将数据从输出窗口导出为.dat文件。
请注意,使用蟾蜍手动操作需要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();
从日志中,它得到了OT知道,执行读者语句秒内完成。
但从DataReader的读取数据抛出 “异常信息是ORA-03113:结束文件在System.Data.OracleClient.OracleConnection.CheckError(OciErrorHandle errorHandle,的Int32 RC)上的通信信道 ” 8小时后时间。
任何人都可以请让我知道上面的方法是好的处理1GB大小的数据?或
有没有其他更好的方法来做到这一点?
感谢, Gayathri
感谢您的建议.Query根据当前的月份在where条件中取代了一些月份值。我计划相应地为每个月份的thro代码更改cmd文本。标题需要更改在输出内容中。所有这些可能需要以上建议手动中断。 – Gayathri
请记住,您可以从shell将参数传递给PlSql(有关unix中的示例,请参阅http://www.dbforums.com/oracle/1214698-procedure-call-through-shell-script.html)和/或运行shell或PlSql来自C#的代码。 –