从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

从oracle数据库中读取大量数据,并使用c#导出为.dat文件

也许你可以试试

CommandBehavior = SequentialAccess

从MSDN

使用SequentialAccess检索大值和二进制数据

使用示例

您可以直接从PL/SQL过程导出数据,并有一个shell文件(而不是exe)从SqlPlus启动它。