【问题标题】:LONG text in Oracle cut short by SSIS source?Oracle 中的长文本被 SSIS 源缩短?
【发布时间】:2013-03-18 10:04:46
【问题描述】:

我正在使用 SSIS 将数据库从 Oracle 数据库迁移到 SQL Server 2008 R2 架构。其中一个 oracle 表中有一个列,其中包含 long 文本。为了适应所需的架构,我在 OLEDB 源中使用 SQL 命令,该命令使用多个连接来获取所需的数据。

在迁移而不是整个 long 字符串时,仅从源传输前 100 个字符,其余字符被修剪。在我尝试了一个没有任何连接的查询后,我能够完整地提取整个文本。

在 Oracle 客户端上运行查询时,会出现正确的结果。请提出任何直接的方法来纠正问题?目前,我暂时使用 SQL 表来传输数据,然后使用无连接查询从 Oracle 数据库中提取数据。

【问题讨论】:

  • R u 在您的 OLEDB 源代码中使用 Oracle 代码页,即 20127.stackoverflow.com/questions/7188334/…
  • 虽然在这种情况下 AlwaysUseDefaultCodePage 属性为 true,但我没有遇到此类错误或警告,只有在 sql 命令中使用连接时字符串的长度被缩短了。
  • Advanced Editor 用于OLEDB Source 并手动更改列的长度。 with joins 数据正在获取 truncated 似乎很奇怪。你可以发布你的 oracle 查询。尝试将 data viewer 放在你的源之后并检查你是否获得了正确的数据
  • 即使将Data viewer 放在源中,您也可以看到truncated 的数据?
  • 我会坚持你的“临时”设计——根据我的经验,最好让任何两种存储格式之间的初始传输尽可能简单,以最大限度地减少驱动程序等中这些晦涩的错误的暴露. 它通常也运行得更快(端到端)。此外,如果您拥有 SQL Server Enterprise 版本,则值得购买 Attunity Drivers for Oracle - 它们看起来更快且错误更少。

标签: sql sql-server-2008 join ssis


【解决方案1】:

所以我找到了一个解决方案,基本上是对上面所写内容的点缀。

我需要连接的数据,并且我不想拉回所有连接表的“原始”副本,因此我提取了两个来源:一个是带有 LONG 列的表的原始副本使用 table direct 方法,而不是 SQL 命令(过滤为只获取主键和相关的LONG 列) - 如上所述,这保留了长文本的完整内容。然后是另一个包含所有连接和排除 LONG 列的源(下面称为“元数据”)。

然后简单地将两个源分别通过Sort,然后将它们输入Merge Join,加入主键列并仅选择所需的列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多