[Troubleshooting – SSIS] エラー 0xc02020f6: データフロータスク 1:列"xxx" では、Unicode 形式の文字列データ型と Unicode 以外の形式の文字列データ型を変換できません。


事象

“データのインポートおよびエクスポートウィザード” を利用し、Oracle 11g から SQL Server 2012 へ、char 型のデータを含むテーブルを移行した際、以下のエラーが出力され、データの移行ができない。

-------------------------
エラー 0xc02020f6: データフロータスク 1:列 "xxxx" では、Unicode 形式の文字列データ型と Unicode 以外の形式の文字列データ型を変換できません。
(SQL Server インポートおよびエクスポートウィザード)

-------------------------

具体的な例

- 環境
・Oracle 11g のキャラクタセットは AL32UTF8 。
・Oracle 11g の char 型の列をもつテーブルのデータを、 SQL Server 2012 の char 型の列をもつテーブルへデータを移行する。
・Oracle Provider for OLE DB を利用し、Oracle へ接続する。
・SQL Server への接続は SQL Server Native Client 11.0
・SQL Server 2012 の ”データのインポートおよびエクスポートウィザード” を利用し、Oracle に格納されたデータを移行する。

対処方法

C:\Program Files\Microsoft SQL Server\110\DTS\MappingFiles\OracleToSSIS10.XML の下記箇所を修正します。

---- 変更前-----
<!—CHAR -->
<dtm:DataTypeMapping >
<dtm:SourceDataType>
<dtm:DataTypeName>char</dtm:DataTypeName>
</dtm:SourceDataType>
<dtm:DestinationDataType>
<dtm:CharacterStringType>
<dtm:DataTypeName>DT_STR</dtm:DataTypeName>
--------------------

----- 変更後-------
<!—CHAR -->
<dtm:DataTypeMapping >
<dtm:SourceDataType>
<dtm:DataTypeName>char</dtm:DataTypeName>
</dtm:SourceDataType>
<dtm:DestinationDataType>
<dtm:CharacterStringType>
<dtm:DataTypeName>DT_WSTR</dtm:DataTypeName>
-----------------------

その他、“データのインポートおよびエクスポートウィザード” を利用せず、SQL Server Data Tools を利用し、SSIS のパッケージを作成後、データの移行の過程に、データ変換タスクを追加し対処することも可能です。

+ 参考情報

データ変換の変換
http://technet.microsoft.com/ja-jp/library/ms141706(v=sql.110).aspx

データ変換の変換を使用してデータを別のデータ型に変換する
http://technet.microsoft.com/ja-jp/library/ms140321(v=sql.110).aspx

以上です。参考になれば幸いです。

Comments (0)

Skip to main content