資料取用者問題

本主題提供疑難排解資料取用者問題的資訊。

SQL Server Integration Services

企業單一登入

搭配 SQL Server Integration Services 使用企業單一 Sign-On 時,您可能需要針對使用者名稱和密碼輸入 佔MS$SAME位元元值。 使用資料連結,您可以設定 ESSO 以與 SSIS 搭配使用。

  1. 在 [連線] 對話框中,按兩下 [安全性] 方法的單一登錄

  2. 從下拉式清單框中選取 分支機構應用程式

  3. 在 [ 所有] 對話框中,按兩下 [ 密碼 ],然後按下 [編輯值]。 在 [編輯屬性值] 對話框中,輸入 [屬性值] 的 [MS$SAME],然後按兩下 [確定]。

  4. 在 [ 所有] 對話框中,按兩下 [用戶標識符 ],然後按兩下 [ 編輯值]。 在 [編輯屬性值] 對話框中,輸入 [屬性值] 的 [MS$SAME],然後按兩下 [確定]。

  5. 在 [ 連線] 對話框中,按兩下 [ 測試]。 您可以在 [Microsoft 資料連結] 對話方塊中檢視結果。

  6. 按兩下 [確定 ] 以儲存組態資訊。

FastLoad 以插入 TIMESTAMP 值

搭配 FastLoad 使用 SQL Server Integration Services OLE DB Destination 將 SQL Server datetime 或 datetime2 值插入 DB2 TIMESTAMP 數據行時,可能會遇到此錯誤。

日期時間值的字串呈現不是有效的日期時間值

若要解決此問題,您應該將 [數據提供者數據源] 屬性 [使用早期元數據] 設定為 true。

Use Early Metadata=True

資料型別對應

當從 Microsoft SQL Server Management Studio 或 Business Intelligence Design Studio 使用 SQL Server Integration Services 的匯入和匯出精靈時,您可以藉由編輯 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 相容。 它會以長格式 INTEGER 取代 SourceDataType 值 INT 的簡短格式。

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 的下列數據類型對應與 IBM i V6R1 來源的 DB2 相容。

<!-- 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 Datetime datetime2 DT_DBTIMESTAMP2
日期 DATETIME 日期 DT_DBDATE
CHAR CHAR CHAR DT_STR
適用於 BIT 資料的 CHAR () BINARY BINARY DT_BYTES
CHAR () FOR MIXED DATA NCHAR NCHAR DT_WSTR
CHAR () FOR SBCS DATA CHAR CHAR DT_STR
CHARACTER CHAR CHAR DT_STR
CHARACTER () FOR BIT DATA BINARY BINARY DT_BYTES
CHARACTER () FOR MIXED DATA NCHAR NCHAR DT_WSTR
CHARACTER () FOR SBCS DATA CHAR CHAR DT_STR
NATIONAL CHARACTER NCHAR NCHAR DT_WSTR
VARCHAR VARCHAR VARCHAR DT_STR
適用於 BIT 資料的 VARCHAR () VARBINARY VARBINARY DT_BYTES
VARCHAR () FOR MIXED DATA NVARCHAR NVARCHAR DT_WSTR
VARCHAR () FOR SBCS DATA VARCHAR VARCHAR DT_STR
CHARACTER VARYING VARCHAR VARCHAR DT_STR
CHARACTER VARYING () FOR BIT DATA VARBINARY VARBINARY DT_BYTES
CHARACTER VARYING () FOR MIXED DATA NVARCHAR NVARCHAR DT_WSTR
CHARACTER VARYING () FOR SBCS DATA VARCHAR VARCHAR DT_STR
NATIONAL CHARACTER VARYING NVARCHAR NVARCHAR DT_WSTR
LONG VARCHAR FOR BIT DATA image image DT_IMAGE
LONG VARCHAR text text DT_TEXT
GRAPHIC NCHAR NCHAR DT_WSTR
VARGRAPHIC NVARCHAR NVARCHAR DT_WSTR
GRAPHIC VARYING 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
real REAL REAL DT_R4
FLOAT FLOAT FLOAT DT_R8
DOUBLE FLOAT FLOAT DT_R8
DOUBLE PRECISION FLOAT FLOAT DT_R8
BLOB image image DT_BYTES
BINARY LARGE OBJECT image image DT_BYTES
CLOB text text DT_TEXT
CLOB () FOR MIXED DATA ntext ntext DT_NTEXT
CLOB () FOR SBCS DATA text text DT_TEXT
CHAR LARGE OBJECT text text DT_TEXT
CHAR LARGE OBJECT () FOR MIXED DATA ntext ntext DT_NTEXT
CHAR LARGE OBJECT () FOR SBCS DATA text text DT_TEXT
CHARACTER LARGE OBJECT text text DT_TEXT
CHARACTER LARGE OBJECT () FOR MIXED DATA ntext ntext DT_NTEXT
CHARACTER LARGE OBJECT () FOR SBCS DATA text text DT_TEXT
130 ntext ntext DT_NTEXT

在編輯對應檔案之後,您必須關閉並重新開啟 SQL Server 匯入和匯出精靈或 Business Intelligence Development Studio (視您的作業環境而定)。

如需設定 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 自定義數據流元件的詳細資訊,請參閱《在線叢書》 () https://go.microsoft.com/fwlink/?LinkId=241523 中的主題 SQL Server 中的主題。

SQL Server 複寫

衍生參數

SQL Server 複寫需要 [衍生參數] 設為 FALSE。

資料型別對應

SQL Server 複寫可能會根據從 SQL Server 到 DB2 資料類型的預設對應,錯誤地轉換資料。 我們建議您最好使用下列 SQL Server 系統預存程序來檢閱及修改複寫資料類型對應。

  • sp_helpdatatypemap
    
  • sp_getdefaultdatatypemapping
    
  • sp_setdefaultdatatypemapping
    

    如需詳細資訊,請參閱《在線http://go.microsoft.com/fwlink/?LinkId=241524叢書》 () 中的 SQL Server《系統預存程式 (Transact-SQL) 主題。

    將 SQL Server DATETIME2 對應至 DBTYPE_TIMESTAMP 的問題

    SQL Server 2008 複寫至 DB2 for z/OS 可能會失敗並出現 SQLCODE -188 (datetime 值不是有效 datetime 值的字串表示)。 當 [複寫] 設定為將 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。

    mapping_id source_dbms source_type destination_dbms destination_type destination_length
    189 MSSQLSERVER datetime2 DB2 VARCHAR 27
  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。

    mapping_id source_dbms source_type destination_dbms destination_type destination_length
    494 MSSQLSERVER datetime2 DB2 timestamp NULL
  7. 識別要重新設定的複寫訂閱文章。 使用 Transact-SQL USE 陳述式,從 master 資料庫切換至您進行複寫的來源資料庫。

    USE [Test]

    select name, status from sysarticles
    
  8. 結果應顯示要修改的文章名稱。 在此範例中,下表顯示名稱為 DB2TS01 的結果。

    NAME status
    DB2TS01 25
  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;
    

    如需詳細資訊,請參閱《在線叢書》中的複寫系統預存程式概念 (https://go.microsoft.com/fwlink/?LinkId=241525 SQL Server) 。

復寫 INSERT 作業失敗,錯誤 8152:字串或二進位數據會被截斷

SQL Server 複寫 INSERT 作業可能會失敗,SQL Server 錯誤 8152 (String 或二進位數據會被截斷。) 。 當 (1) 數據提供者未設定為使用早期元數據,而且 (2) 複寫未設定為使用參數化 INSERT 語句時,就可能發生此情況。

重新設定數據提供者連線,以在 SQL Server 複寫 訂閱者數據源定義中指定「使用早期元數據=true」。

For more information, see Configure Data Providers for DB2 Data Links (DB2) All Properties in OLE DB Provider for DB2 documentation.

重新設定 SQL Server 複寫 訂閱文章,以包含選項 「24」 (「在 INSERT 語句中包含數據行名稱,並使用參數化語句」。) 。

如需詳細資訊,請參閱 SQL Server 檔中的 SQL Server 複寫 sp_addarticle (Transact-SQL)

SQL Server Analysis Services

當您設計用於 SQL Server Analysis Services 的 Cube 時,這些工具會產生包含長別名名稱的 SQL 命令,這些名稱可能超過 DB2 伺服器支援的最大長度。 依據您使用的 DB2 平台和版本,您可能無法以超過 18 個字元的別名名稱來使用查詢。 例如,許多在 DB2 for z/OS 中部署的物件會使用 18 個字元的名稱。 請參考適用於您的 DB2 平台和版本的 DB2 SQL 參考文件,並洽詢您的 DB2 資料庫管理員。 我們建議系統管理員或開發人員最好將 identifier-length (limit-table-identifier-length) 從 29 變更為 18,藉此更新兩個 SQL Server Analysis Service 組態夾檔案,檔案中包含 DB2 的資料類型對應支援。 下列是必須更新之兩個組態夾檔案的名稱和位置。

  • 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 (SSMA) 使用 SQL Server 移轉小幫手 來讀取 DB2 CLOB 數據時,您應該使用 連接字串 選項定義 SSMA 中的 DB2 連線,然後在下列自變數 連接字串 包含。

  • 使用早期元數據=True

這個自變數會指示數據提供者使用早期元數據 (參數和數據行數據類型,) 在設計時間或運行時間定義的晚期元數據。 此選擇性屬性接受布林值。 預設值為 false。 針對 DB2 使用 SQL Server 移轉小幫手 (SSMA) 來讀取 CLOB 數據時,請指定 true,包括編碼為 CLOB 數據的架構資訊 (,例如 SYSACA 的 STATEMENT 資料行。SYSTRIGGERS 數據表。