我正在使用Redshift ODBC 32位驱动程序通过SSIS 2015 ODBC连接在SQL-2016中提取数据。我有大量的数据要从Redshift加载。我在21分钟内加载了大约10000000个reocords。
但是,我的历史表有260636061条记录。如果我运行package来加载所有数据,那么它会运行一段时间并抛出以下错误 -
[ODBC源[2]]错误:发生了打开数据库连接(ODBC)错误。州:'HY000'。本机错误代码:30。[亚马逊] [RedShift ODBC](30)尝试执行查询时出错:服务器意外关闭了连接。这可能意味着服务器在处理请求之前或处理时异常终止。
[ODBC源[2]]错误:发生了打开数据库连接(ODBC)错误。州:'HY001'。本机错误代码:10010。[Amazon] [ODBC](10010)内存分配错误:捕获了std :: bad_alloc异常。
[SSIS.Pipeline]错误:SSIS错误代码DTS_E_PRIMEOUTPUTFAILED。 ODBC Source上的PrimeOutput方法返回错误代码0x80004005。当管道引擎调用PrimeOutput()时,组件返回失败代码。失败代码的含义由组件定义,但错误是致命的,管道停止执行。在此之前可能会发布错误消息,其中包含有关失败的更多信息。
知道如何解决这个问题吗?或者我们不应该立即从SSIS中提取这么多数据?
谢谢
答案 0 :(得分:1)
驱动程序可能正在尝试一次将所有结果行加载到内存中,而理想情况下它会批量发送行,允许SSIS一次一批地处理它们。
根据http://docs.aws.amazon.com/redshift/latest/mgmt/configure-odbc-options.html尝试使用ODBC驱动程序上的选项,看看哪些有效。
您的驱动程序是否已在服务器上设置为DSN,或者是否存在可以直接与其通信的SSIS源?如果它是DSN,您将看到如下所示的“其他选项”面板,您可以使用:
如果它是SSIS源,则SSIS中的连接管理器可能会提供这些选项。