以前のバージョンのSQL Serverにデータを取得し、RDSからデータをプルするために、BCPがいくつかのツールよりも効果的であることがわかりました。(@ivan_posdeevに感謝します。)
最初に、SQL Server Management Studioのデータベース、タスク、スクリプトの生成を右クリックして、スキーマを生成します。すべてのオブジェクトにチェックマークを付け、高度なオブジェクトでは必要なものすべてがスクリプト化される(統計、インデックスなど)ことを確認しますスキーマを作成するファイル。(使用して、先にデータベースを作成し、その上でこのファイルを実行osql
、sqlcmd
またはGUI)。
データを移動するには、ソースデータベースで次のクエリを2回実行します。最初に2番目の列をコメント化してデータを抽出するバッチファイルを生成し、次に最初の列をコメント化してインポート先バッチファイルを生成します。(ソースサーバーと宛先サーバー、インスタンス名、出力ファイルと入力ファイルのディレクトリ、ユーザー名とパスワードを追加する必要があります。統合セキュリティを使用するには、とオプションをで置き換えます。)-U
-P
-T
これはUnicodeをサポートしています。必要ない場合は、-N
両方のステートメントのスイッチをに変更してください-n
。
SELECT
'bcp SOURCEDATABASE.' + s.Name + '.' + t.NAME + ' out d:\dbdump\' + s.Name + '.' + t.NAME + '.dat -N -S SOURCESERVER\INSTANCE -UUSER -PPASSWORD'
-- 'bcp DESTINATIONDATASE.' + s.Name + '.' + t.NAME + ' in d:\dbdump\' + s.Name + '.' + t.NAME + '.dat -N -S DESTINATIONSERVER\INSTANCE -UUSER -PPASSWORD -E -h TABLOCK -b 1000 -e d:\dbdump\' + s.Name + '.' + t.NAME + '.ERRORS.dat'
FROM
sys.tables t
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
LEFT OUTER JOIN
sys.schemas s ON t.schema_id = s.schema_id
ORDER BY
s.Name, t.NAME
schema.tablename.ERRORS.datという名前のチェックファイルを実行すると、失敗した行が含まれます。失敗した行はありません。
BCPのMSDNリファレンスはこちら、BCPオプションのよりわかりやすい説明はこちらです。
これは、スクリプトの生成や私が試したツールのどれよりもはるかに優れていることがわかりました。また、RDSデータベース(バックアップを許可しない)で実行されます。生成されるデータファイルはSQLスクリプトのサイズの30%であり、それらの実行にかかる時間はほんのわずかであり、はるかに信頼性が高くなります。(データのスクリプトを作成するためにSQL Serverによって生成されたスクリプトは、常に最新のトリップ、時には予想通り時々 、生成されたSQLは2008R2と互換性がありませんでした(例えば、使用されていないnvarchar(0)
、多くの場合、識別可能な理由などを完了しなかったBCPはまた、任意の制約違反を複製、参照整合性など)。