通过


数据使用者问题

本主题提供用于排查数据使用者问题的信息。

SQL Server Integration Services

企业单一登录

在将企业单一登录与 SQL Server Integration Services 配合使用时,您可能需要在用户名和密码位置输入 MS$SAME 占位符值。 使用数据链接,可以配置 ESSO 以用于 SSIS。

  1. 连接对话框中,为安全方法单击单一登录

  2. 从下拉列表框中选择 关联应用程序

  3. 在“ 所有 ”对话框中,单击“ 密码 ”,然后单击“编辑值”。 在“编辑属性值”对话框中,输入MS$SAME作为属性值,然后单击“确定”

  4. 在“ 所有 ”对话框中,单击“ 用户 ID ”,然后单击“ 编辑值”。 在“编辑属性值”对话框中,输入MS$SAME作为属性值,然后单击OK

  5. “连接 ”对话框中,单击“ 测试”。 可以在“Microsoft数据链接”对话框中查看结果。

  6. 单击“ 确定 ”保存配置信息。

用于插入 TIMESTAMP 值的 FastLoad

将 SQL Server Integration Services OLE DB 目标与 FastLoad 配合使用以将 SQL Server datetime 或 datetime2 值插入 DB2 TIMESTAMP 列中时,可能会遇到此错误。

DATETIME 值的字符串表示形式不是有效的 DATETIME 值

若要解决此问题,应将数据提供程序数据源属性“使用早期元数据”设置为 true。

Use Early Metadata=True

数据类型映射

使用 SQL Server Integration Services 导入和导出向导时,可以从 Microsoft SQL Server Management Studio 或 Business Intelligence Design Studio 中自定义默认数据转换,方法是编辑 XML 映射文件。 导入和导出向导 XML 映射文件位于以下文件夹中。

C:\Program Files\Microsoft SQL Server\100\DTS\MappingFiles
C:\Program Files (x86)\Microsoft SQL Server\100\DTS\MappingFiles

若要正确将 IBM DB2 for IBM i 字符和十进制数据类型映射到 SQL Server 数据类型,应扩展数据映射文件以包含 DB2 数据类型长格式同义词。 例如,在 DB2 INTEGER 源和 SQL Server 之间添加以下数据类型映射。 此映射与 SQLOLEDB、SQLNCL、SQLNCLI10 和 System.Data.SqlClient.SqlConnection 兼容。 它将短格式 SourceDataType 值 INT 替换为长格式 INTEGER。

DB2 INT 的以下映射与 DB2 for z/OS V9 源兼容。

<!-- INT -->
<dtm:DataTypeMapping>
<dtm:SourceDataType>
<dtm:DataTypeName>INT</dtm:DataTypeName>
</dtm:SourceDataType>
<dtm:DestinationDataType>
<dtm:SimpleType>
<dtm:DataTypeName>INT</dtm:DataTypeName>
</dtm:SimpleType>
</dtm:DestinationDataType>
</dtm:DataTypeMapping>

DB2 INTEGER 的以下数据类型映射与 DB2 for IBM i V6R1 源兼容。

<!-- INTEGER -->
<dtm:DataTypeMapping>
<dtm:SourceDataType>
<dtm:DataTypeName>INTEGER</dtm:DataTypeName>
</dtm:SourceDataType>
<dtm:DestinationDataType>
<dtm:SimpleType>
<dtm:DataTypeName>INT</dtm:DataTypeName>
</dtm:SimpleType>
</dtm:DestinationDataType>
</dtm:DataTypeMapping>

数据类型映射文件

下表描述了在使用数据提供程序时可以编辑的三个映射文件。

DB2 数据类型名称 DB2ToMSSql DB2ToMSSql10 DB2ToSSIS10
TIME DATETIME time DT_DBTIME
TIMESTAMP 日期/时间 datetime2 DT_DBTIMESTAMP2
DATE DATETIME DATE DT_DBDATE
CHAR CHAR CHAR DT_STR
CHAR () 用于 BIT 数据 BINARY BINARY DT_BYTES
CHAR () 用于混合数据 NCHAR NCHAR DT_WSTR
CHAR() 用于 SBCS 数据 CHAR CHAR DT_STR
CHARACTER CHAR CHAR DT_STR
字符 () 对于位数据 BINARY BINARY DT_BYTES
字符 () 用于混合数据 NCHAR NCHAR DT_WSTR
字符 () 用于 SBCS 数据 CHAR CHAR DT_STR
国家字符 NCHAR NCHAR DT_WSTR
VARCHAR VARCHAR VARCHAR DT_STR
VARCHAR() 用于 BIT 数据 VARBINARY VARBINARY DT_BYTES
VARCHAR () 用于混合数据 NVARCHAR NVARCHAR DT_WSTR
VARCHAR () 用于 SBCS 数据 VARCHAR VARCHAR DT_STR
可变字符 VARCHAR VARCHAR DT_STR
可变字符 () 用于位数据 VARBINARY VARBINARY DT_BYTES
字符变化 () 用于混合数据 NVARCHAR NVARCHAR DT_WSTR
字符变量[]用于SBCS数据 VARCHAR VARCHAR DT_STR
国家字符可变类型 NVARCHAR NVARCHAR DT_WSTR
用于位数据的长变量字符 图像 图像 DT_IMAGE
LONG VARCHAR 文本消息 文本消息 DT_TEXT
图形 NCHAR NCHAR DT_WSTR
VARGRAPHIC NVARCHAR NVARCHAR DT_WSTR
图形变化 NVARCHAR NVARCHAR DT_WSTR
SMALLINT SMALLINT SMALLINT DT_I2
INT INT INT DT_14
INTEGER INT INT DT_14
BIGINT BIGINT BIGINT DT_18
DECIMAL NUMERIC NUMERIC DT_NUMERIC
NUMERIC NUMERIC NUMERIC DT_NUMERIC
真实 真实 真实 DT_R4
FLOAT FLOAT FLOAT DT_R8
DOUBLE FLOAT FLOAT DT_R8
双精度 FLOAT FLOAT DT_R8
BLOB 图像 图像 DT_BYTES
二进制大型对象 图像 图像 DT_BYTES
CLOB 文本消息 文本消息 DT_TEXT
CLOB () 用于混合数据 ntext ntext DT_NTEXT
CLOB () 用于 SBCS 数据 文本消息 文本消息 DT_TEXT
字符大型对象 文本消息 文本消息 DT_TEXT
CHAR LARGE 对象 () 用于混合数据 ntext ntext DT_NTEXT
用于 SBCS 数据的 字符大型对象 文本消息 文本消息 DT_TEXT
字符大型对象 文本消息 文本消息 DT_TEXT
字符大型对象 () 用于混合数据 ntext ntext DT_NTEXT
单字节字符集数据的字符大型对象 (CHARACTER LARGE OBJECT) 文本消息 文本消息 DT_TEXT
130 ntext ntext DT_NTEXT

编辑映射文件后,必须关闭并重新打开 SQL Server 导入和导出向导或商业智能开发工作室,具体取决于所使用的环境。

有关配置 SQL Server 2008 Integration Services 的详细信息,请参阅 SQL Server 联机丛书中的“使用 SQL Server 导入和导出向导”主题(包括有关导入和导出数据的信息)https://go.microsoft.com/fwlink/?LinkId=193204

自定义数据流组件

可以使用 SQL Server Integration Services 数据流组件来执行默认和自定义转换。 自定义转换基于开发人员提供的自定义代码。

XML 格式的 SQL Server Integration Services 映射文件用于导入和导出向导。 这些文件不用于数据流。 SQL Server Integration Services 提供管道缓冲区类,使企业开发人员能够在数据流中自定义数据映射。 有关使用 SQL Server 2008 Integration Services 自定义数据流组件的详细信息,请参阅 SQL Server 联机丛书中 数据流主题中的“使用数据类型”(https://go.microsoft.com/fwlink/?LinkId=241523)。

SQL Server 复制

派生参数

SQL Server 复制要求派生参数设置为 FALSE。

数据类型映射

SQL Server 复制可能会根据从 SQL Server 到 DB2 数据类型的默认映射错误地转换数据。 建议使用以下 SQL Server 系统存储过程查看和修改复制数据类型映射。

  • sp_helpdatatypemap
    
  • sp_getdefaultdatatypemapping
    
  • sp_setdefaultdatatypemapping
    

    有关详细信息,请参阅 SQL Server 联机http://go.microsoft.com/fwlink/?LinkId=241524丛书中的系统存储过程(Transact-SQL)主题。

    将 SQL Server DATETIME2映射到DBTYPE_TIMESTAMP时出现问题

    SQL Server 2008 的复制操作到 DB2 for z/OS 可能会失败,SQLCODE -188(日期时间值的字符串表示形式不是有效的日期时间值)。 当复制配置为将DATETIME2映射到 DB2 VARCHAR(27)并使用包含字符串文本数据值的订阅项目命令时,将发生这种情况。

    有关分步说明的问题的解决方案

    重新配置 SQL Server 2008 复制,以将 DATETIME2 映射到 DB2 TIMESTAMP,并配置带参数的订阅文章命令。 这使数据提供程序能够将DATETIME2格式化为 IBM DB2 数据库服务器支持的 DB2 TIMESTAMP 结构。

  1. 确定要修改的数据类型映射。 对所有步骤使用 MASTER 模式。

    select * from

    sys.fn_helpdatatypemap
    (
       'MSSQLSERVER',
        '%',
        '%',
        '%',
        '%',
        '%',
        0
    )
    
  2. 其中,destination_dbms = 'DB2' 且 source_type = 'datetime2'。结果应指示需要修改的 mapping_id。 下表显示了此示例的结果窗格,其中mapping_id为 189。

    映射ID 源数据库管理系统 (source_dbms) source_type destination_dbms destination_type 目标长度
    189 MSSQLSERVER datetime2 DB2 VARCHAR 二十七
  3. 删除数据类型映射。

    exec sp_dropdatatypemapping 189
    
  4. 添加数据类型映射。

    exec  sp_adddatatypemapping
         @source_dbms = 'MSSQLSERVER',
         @source_type = 'datetime2',
         @destination_dbms = 'DB2',
         @destination_type = 'TIMESTAMP',
         @destination_nullable = 1,
         @destination_createparams = 0,
         @dataloss = 0,
         @is_default = 1
    
  5. 再次运行查询以验证新的数据类型映射。

    select * from

    select * from sys.fn_helpdatatypemap
    (
       'MSSQLSERVER',
        '%',
        '%',
        '%',
        '%',
        '%',
        0
    )
    
  6. 其中destination_dbms = 'DB2',source_type = 'datetime2'

    结果应指明需要修改的mapping_id。 下表显示了此示例的结果窗格,其中mapping_id为 189。

    映射ID source_dbms source_type destination_dbms destination_type 目标长度
    494 MSSQLSERVER datetime2 DB2 TIMESTAMP Null
  7. 确定要重新配置的复制订阅项目。 使用 Transact-SQL USE 语句从 master 数据库切换到要从中复制的数据库。

    USE [Test]

    select name, status from sysarticles
    
  8. 结果应显示要修改的项目的名称。 在此示例中,下表显示了名称为DB2TS01的结果。

    名字 状态
    DB2TS01 二十五
  9. 如果状态值为 1 或 9,则文章配置为字符串文本格式。

    如果状态值为 17 或 25,则该文章被配置为参数化格式。

  10. 为参数化命令配置复制订阅项。

    USE [Test]

    DECLARE @publication AS sysname;
    DECLARE @article AS sysname;
    SET @publication = N'DB2TS_PUB01';
    SET @article = N'DB2TS01';
    EXEC sp_changearticle @publication, @article, 'status', 'parameters', 0, 0;
    

    有关详细信息,请参阅 SQL Server 联机丛书中的 复制系统存储过程概念https://go.microsoft.com/fwlink/?LinkId=241525)。

复制 INSERT 操作失败,出现错误 8152:字符串或二进制数据将被截断

SQL Server 复制 INSERT 操作可能会失败,SQL Server 错误 8152(字符串或二进制数据将被截断)。 如果 (1) 数据提供程序未配置为使用早期元数据,并且 (2) 复制未配置为使用参数化 INSERT 语句,则可能会出现这种情况。

重新配置数据提供程序连接,以在 SQL Server 复制订阅服务器数据源定义中指定 "Use Early Metadata=true"。

有关详细信息,请参阅 OLE DB Provider for DB2 文档中的 DB2 数据链接(DB2)所有属性配置数据提供程序

重新配置 SQL Server 复制订阅文章以包括选项“24”(“在 INSERT 语句中包含列名并使用参数化语句)。

有关详细信息,请参阅 SQL Server 文档中的 SQL Server 复制 sp_addarticle(Transact-SQL)

SQL Server Analysis Services

在为 SQL Server Analysis Services 设计多维数据集时,工具生成的 SQL 命令可能包含长度超过 DB2 服务器支持上限的别名。 根据所使用的 DB2 平台和版本,可能无法使用别名超过 18 个字符的查询。 例如,在 DB2 中为 z/OS 部署的许多对象使用 18 个字符的名称。 请参阅 DB2 平台和版本的 DB2 SQL 参考,并与 DB2 数据库管理员联系。 建议管理员或开发人员通过将标识符长度(limit-table-identifier-length)从 29 更改为 18 来更新包含 DB2 数据类型映射支持的两个 SQL Server Analysis Service 配置盒文件。 以下是必须更新的两个墨盒文件的名称和位置。

  • C:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\DataWarehouseDesigner\UIRdmsCartridge\db2v0801.xs

  • C:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\DataWarehouseDesigner\UIRdmsCartridge\db2v0801.xs

    SQL Server Analysis Services 使用更新的配置文件来正确命名 SQL 命令中的对象。

适用于 DB2 的 SQL Server 迁移助手

使用 DB2 的 SQL Server 迁移助手(SSMA)读取 DB2 CLOB 数据时,应使用连接字符串选项在 SSMA 中定义 DB2 连接,然后将以下参数包含在连接字符串中。

  • 使用早期元数据=True

此参数指示数据提供程序使用设计时定义的早期元数据(参数和列数据类型)或运行时定义的后期元数据。 此可选属性接受布尔值。 默认值为 false。 使用 SQL Server 迁移助手 (SSMA) For DB2 读取 CLOB 数据时,请指定 true,包括编码为 CLOB 数据的架构信息(例如 SYSIBM.SYSTRIGGERS 表中的 STATEMENT 列)。