事象
“データのインポートおよびエクスポートウィザード” を利用し、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”
以上です。参考になれば幸いです。