我一直在努力将oracle数据库迁移到sql server 2005.我遇到的问题是将Oracle“LONG”文本迁移到SQL varchar。我只从迁移完成后在Oracle数据库中检查的字段中获取前100个字符的数据。我可以在SSMA for Oracle的数据视图中看到超过100个字符的数据。
经过一些早期的研究,似乎我可能需要设置一个显式转换规则,所以我将Oracle的“LONG”映射到SQL VARCHAR(8000),但即使目标表列现在是正确的大小(架构已更改)根据需要),插入的文本总是被截断为前100个字符。
这个问题:LONG text in Oracle cut short by SSIS source?
是类似的,似乎指向SSIS可能与OLEDB驱动程序有关的问题,但我不知道这是否相关(即使它是,我不知道我应该怎么做它在SSMA中纠正这一点。
任何人都有SQL Server迁移助理专家有任何想法吗?
答案 0 :(得分:1)
最终的解决方案是编写一个查询来从表中提取数据并将其作为CLOB(SSMA正确地自动处理为varchar(MAX)并且不截断)通过内置插入到新表中在Oracle函数中。
我在sqlplus中使用了类似以下的命令:
create table schema.my_new_table as
select primary_key_field, to_lob(troublesome_long_column) troublesome_long_column
from schema.original_table;
由于我包含了主键字段,因此我可以将每一行绑定回原始表。 “to_lob”函数将LONG转换为CLOB,这使得新表中数据的转换有效。
我会更改原始表(并且只添加了一个包含已转换数据的新列),但我无法更改现有表的任何内容。