【发布时间】:2019-08-13 15:48:29
【问题描述】:
这是我第一次使用 SSIS,所以请多多包涵…… 我正在使用 SSIS 将表从 Oracle 迁移到 SSMS,我正在尝试传输一些非常大的表(5000 万行 +)。当我只是试图保存包(甚至不运行它)时,SSIS 现在完全冻结并重新启动 VS。它不断返回内存不足的错误,但是,我正在一个远程服务器上工作,该服务器具有运行此软件包所需的 RAM。
尝试保存时出现错误消息
我唯一能想到的是,当这个包试图运行时,我的以太网 Kbps 在包启动时就已经过时了。也许需要更新我的管道?
以太网图
此外,由于字节大小,我最大的表在导入时会失败(同样,几乎没有使用服务器上的所有内存)。我们正在使用 ODBC 源,因为这是我们能够让其他大型表上传超过 100 万行的唯一方法。
我尝试创建一个临时缓冲区文件来帮助缓解内存压力,但没有任何变化。我已将AutoAdjustBufferSize 更改为True,结果没有变化。也改变了DefaultBufferMaxRows 和DefaultBufferSize.. 没有改变。
运行大型表时的错误:
信息:SRC_STG_TABLENAME 处的 0x4004300C,SSIS.Pipeline:执行 阶段开始了。
信息:SRC_STG_TABLENAME 处的 0x4004800D:缓冲区管理器 失败的内存分配调用 810400000 字节,但无法 换出任何缓冲区以减轻内存压力。 2个缓冲区 考虑和 2 个被锁定。
要么没有足够的内存可供管道使用,因为没有 安装了足够多,其他进程正在使用它,或者太多 缓冲区被锁定。
信息:SRC_STG_TABLENAME 处的 0x4004800F:缓冲区管理器 在 2 个物理缓冲区中分配了 1548 兆字节。
信息:SRC_STG_TABLENAME 处的 0x40048010:组件“ODBC Source" (60) 拥有 775 兆字节的物理缓冲区。
信息:SRC_STG_TABLENAME 处的 0x4004800D:缓冲区管理器 失败的内存分配调用 810400000 字节,但无法 换出任何缓冲区以减轻内存压力。 2个缓冲区 考虑和2被锁定。
要么没有足够的内存可供管道使用,因为没有 安装了足够多,其他进程正在使用它,或者太多 缓冲区被锁定。
信息:SRC_STG_TABLENAME 处的 0x4004800F:缓冲区管理器 在 2 个物理缓冲区中分配了 1548 兆字节。
信息:SRC_STG_TABLENAME 处的 0x40048010:组件“ODBC Source" (60) 拥有 775 兆字节的物理缓冲区。
信息:SRC_STG_TABLENAME 处的 0x4004800D:缓冲区管理器 失败的内存分配调用 810400000 字节,但无法 换出任何缓冲区以减轻内存压力。 2个缓冲区 考虑和2被锁定。
要么没有足够的内存可供管道使用,因为没有 安装了足够多,其他进程正在使用它,或者太多 缓冲区被锁定。
信息:SRC_STG_TABLENAME 处的 0x4004800F:缓冲区管理器 在 2 个物理缓冲区中分配了 1548 兆字节。
信息:SRC_STG_TABLENAME 处的 0x40048010:组件“ODBC Source" (60) 拥有 775 兆字节的物理缓冲区。
错误:SRC_STG_TABLENAME 处的 0xC0047012:缓冲区失败,而 分配 810400000 字节。
错误:SRC_STG_TABLENAME 处的 0xC0047011:系统报告 26 内存负载百分比。有68718940160字节的物理内存 有 50752466944 字节免费。有4294836224字节的虚拟 内存有 914223104 字节可用。分页文件有84825067520 字节,其中 61915041792 字节可用。
信息:SRC_STG_TABLENAME 处的 0x4004800F:缓冲区管理器 在 2 个物理缓冲区中分配了 1548 兆字节。
信息:SRC_STG_TABLENAME 处的 0x40048010:组件“ODBC Source" (60) 拥有 775 兆字节的物理缓冲区。
错误:SRC_STG_TABLENAME 处的 0x279,ODBC 源 [60]:添加失败 行输出缓冲区。
错误:SRC_STG_TABLENAME 处的 0x384,ODBC 源 [60]:打开数据库 发生连接 (ODBC) 错误。
错误:SRC_STG_TABLENAME 处的 0xC0047038,SSIS.Pipeline:SSIS 错误 代码 DTS_E_PRIMEOUTPUTFAILED。 ODBC 源上的 PrimeOutput 方法 返回错误代码 0x80004005。组件返回失败代码 当管道引擎调用 PrimeOutput() 时。的意义 失败代码由组件定义,但错误是致命的并且 管道停止执行。可能会发布错误消息 在此之前提供有关失败的更多信息。
这真的阻碍了我的工作。帮助!
【问题讨论】:
-
您是否尝试过使用适用于 Oracle/Teradata 的 Attunity 驱动程序?该驱动程序比本机 ODBC 更有用且更易于使用。至于错误,当 VS 找不到足够的内存时,没有多少人可以提出建议。您是否尝试过从其他机器上运行它?也许是本地笔记本电脑/台式机?
-
我还没有使用 Attunity 驱动程序,我会调查一下。我们已经在另一台机器上运行了它,但仍在远程服务器上,它似乎工作得稍微好一些(没有完全关闭)。我们尚未对其进行广泛测试。
-
@CFJohnston 我更新了我的答案以添加一些其他可能的解决方法,检查一下
-
@CFJohnston 担心您无法保存看起来已执行且内存已满的包,您必须终止从 Oracle 引擎运行选择查询的进程。考虑到如何能够导入大量数据,您在下面得到了一个惊人的答案。
标签: sql-server oracle ssis etl sql-server-data-tools