SQL Server Integration Services (SSIS) を使用して、テーブルを Oracle (11g) から SQL Server 2008 R2 に移行しています。テーブルのフィールドは、int、string (データ型 Unicode 文字列 [DT_WSTR])、および画像データ型に変換された blob 型です。
SQL Server の照合順序は "Latin1_General_100_CI_AS" です。
ワークフローは非常に簡単です。
1) ADO NET 要素は、Oracle ソースからデータを収集します。2) スクリプト コンポーネントは、inout 列を出力列にマッピングし、データ変換を行います。3) SQL Server の宛先要素は、レコードをターゲット データベースに格納します。
データ移行中 (合計でわずか 20,000 レコード)、一部の文字列フィールドはアジア文字で保存されますが、同じ値を持つ他のフィールドは適切に移動されます。例として:
ID CODE USRNAME DOCNAME
---------------------------------------------------------
120 B-0000001 OAS2491 Help.pdf
121 D-0000465 Charlie Doc1.pdf
122 D-0000465 Charlie Doc2.pdf
123 殹榁鴀ځᡑ䇜쿫 Ɫ灿풑뾧껳쮏⽏� Doc3.pdf
124 D-0000465 Alpha Doc2.pdf
最初に、ソース テーブルのいくつかの特殊文字について考えましたが、影響を受けるレコードを確認したところ、適切に移行された他の行とまったく同じです。ID 123 の行には、行 122 と同じ値があり、正常に表示されます。
Oracleの場合:
CODE は VARCHAR2 (15 バイト)
USRNAME は VARCHAR2 (36 バイト)
SQL Serverの場合:
CODE は nvarchar(15)
USRNAME は nvarchar(36) です
コンテンツが同じであっても、一部の行は間違った文字で移行され、他の行は移行されないのはなぜですか?