从oracle数据库中读取大量数据,并使用c#导出为.dat文件
本文关键字:文件 dat 数据库 oracle 读取 数据 | 更新日期: 2023-09-27 18:16:09
我们有一个查询,将按月执行,并返回大小为1GB的数据。
这里使用的查询只是一个带有内连接的select查询,不涉及游标。
当前他们正在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语句在几秒内完成。
但是从数据读取器读取数据会抛出"Exception message is ORA-03113: end- file on communication channel "在System.Data.OracleClient.OracleConnection。检查错误(OciErrorHandle errorHandle, Int32 rc)" 8小时后的时间。
有谁能告诉我上面的方法可以处理1GB大小的数据吗?或者
还有其他更好的方法吗?
谢谢,Gayathri
也许你可以试试
从MSDNCommandBehavior = SequentialAccess
使用SequentialAccess检索大值和二进制数据
使用示例
您可以直接从PL/SQL过程导出数据,并有一个shell文件(而不是exe)从SqlPlus启动它。