web-dev-qa-db-ja.com

Amazon SQL Server RDSに移行する

Win2008サーバー上の通常のSQLサーバーからAmazon AWS RDS上のSQLサーバーに移動しようとしています。

簡単なバックアップと復元でうまくいくと思いました。 AWS RDSはファイルシステムにアクセスできないようですが、SQLスクリプトはすべてソースサーバーと宛先サーバーにローカルファイルシステムを必要とするようです。私は次のスクリプトを試みました

exec sp_addlinkedserver @server='test.xxxx.us-east-1.rds.amazonaws.com'

-- Verify that the servers were linked (lists linked servers)
exec sp_linkedservers

EXEC ('RESTORE DATABASE [orchard] FROM DISK = ''C:\Temp\orchard.bak'' WITH FILE = 1,  NOUNLOAD, STATS = 10')
AT [test.xxxx.us-east-1.rds.amazonaws.com]

どんな提案も参考になります。

32
tourdownunder

CodePlex -から無料の「SQL Azure Migration Wizard」をダウンロードします---これについて短い blog/screencast を行いました。必ずウィザードの「TO」設定をAWS DNS名に設定してから、「SQL Server 2008」を使用し、not 'SQL Azure'を使用してください

51
Lynn Langit

.bakファイルを使用したSQLデータベースの移行に関するAWSサポートの公式ワードは、サポートされていないということです。したがって、.bakファイルからの迅速な復元は不要です。彼らはここに既存のデータベースの移行のための公式の助けを提供しました:

公式AWSデータベース移行ガイド

また、Azureデータベース移行ツールで非公式のウィンクをもらいました。スキーマやデータのスクリプトを生成し、RDSインスタンスに対して実行するために使用するだけです。その良いツールです。これを行うには、最初に.bakを非RDS SQLサーバーにインポートする必要があります。

SQL Azure移行ツール

8
Tj Kellie

データ層アプリケーション BACPAC形式が最も便利なソリューションを提供することに気付くでしょう。 Export を使用して、データベーススキーマとデータの両方を含むファイルを作成できます。 インポート は、そのファイルに基づくデータが入力された新しいデータベースを作成します。

バックアップと復元 操作とは異なり、エクスポートとインポートでは、データベースサーバーのファイルシステムへのアクセスは必要ありません。

SQL Server Management Studioを使用するか、.Net、Powershell、MSBuildなどのAPIを使用してBACPACファイルを操作できます。

Export Data-tier Application Dialog

この方法を使用してAmazon RDSにエクスポートしてからインポートすると、問題が発生することに注意してください。 RDS上に新しいデータベースが作成されると、その中に次の2つのオブジェクトが作成されます。

  • Db_ownerロールのメンバーシップを持つユーザー。
  • Rds_deny_backups_triggerトリガー

The rds_deny_backups_trigger Trigger

インポート中、BACPACファイルに含まれるオブジェクトと、RDSによって自動的に追加されるオブジェクトとの間に競合が発生します。これらのオブジェクトは両方ともBACPACファイルに存在し、新しいデータベースが作成されるときにRDSによって自動的に作成されます。

SQL ServerのRDS以外のインスタンスが手元にある場合は、BACPACをそのインスタンスにインポートし、上記のオブジェクトをドロップしてから、データベースをエクスポートして新しいBACPACファイルを作成できます。これをRDSインスタンスに復元すると、競合は発生しません。

それ以外の場合は、次の手順でこの問題を回避できます。

  1. BACPACファイル内のmodel.xmlファイルを編集します(BACPACは単なるZipファイルです)。
  2. 上記のオブジェクトに関連するType属性の次の値を持つ要素(RDSによって自動的に追加されるもの)を削除します。
    • SqlRoleMembership
    • SqlPermissionStatement
    • SqlLogin
    • SqlUser
    • SqlDatabaseDdlTrigger
  3. SHA256 クラスのComputeHashメソッドの1つを使用して、model.xmlファイルの変更されたバージョンのチェックサムを生成します。
  4. BitConverter.ToString() メソッドを使用して、ハッシュを16進文字列に変換します(区切り文字を削除する必要があります)。
  5. Origin.xmlファイル(これもBACPACファイルに含まれています)のChecksum要素の既存のハッシュを新しいハッシュに置き換えます。
  6. 新しいバージョンで置き換えられたmodel.xmlファイルとOrigin.xmlファイルの両方を使用して元のコンテンツを圧縮して、新しいBACPACファイルを作成します。この目的で System.IO.Compression.ZipFile を使用しないでください。生成されるZipファイルとの競合が発生する可能性があるため、データはインポートに含まれていません。私は問題なく7Zipを使用しました。
  7. 新しいBACPACファイルをインポートします。RDSによって自動的に生成されるオブジェクトと競合することはありません。

注:SQL Server Management Studioを使用してBacPacをRDSにインポートすると、関連する別の問題があります ここ

6
Scott Munro

Lynnのスクリーンキャストに基づいてSQL Azure移行ツールを使用して、 。bakファイルをRDSに復元する方法 について、いくつかの段階的な手順を書きました。これは公式の説明よりもはるかに簡単な方法であり、移行したいくつかのデータベースでうまく機能しました。

6
humbads

ソースデータベースのSQL Server Management Studioのエクスポートウィザードを使用します。データベースを右クリック>タスク>データのエクスポート。データベース全体をリモートSQLサーバーに送信するためのウィザードがあります。

3
DShook

次の記事では、データを含むデータベースをコピーする方法について説明します。あるテーブルから別のテーブルにデータを挿入するためのT-SQLを生成するのに必要なものです。

http://blog.sqlauthority.com/2009/07/29/sql-server-2008-copy-database-with-data-generate-t-sql-for-inserting-data-from-one- table-to-another-table /

0
tourdownunder

互換性に関する質問のすべてではないにしてもほとんどに答えるAWSによって設計されたツールがあります-SQL Serverのスキーマ変換ツール: https://docs.aws.Amazon.com/SchemaConversionTool/latest/userguide /CHAP_Source.SQLServer.html

すべてのSQLサーバーデータベースオブジェクトがRDSでサポートされているわけではなく、SQLサーバーのバージョンによって異なるため、評価レポートも時間に見合う価値があります。 https://docs.aws.Amazon.com/SchemaConversionTool/ latest/userguide/CHAP_AssessmentReport.html

最後に、間違いなくデータベース移行サービスを活用してください: https://aws.Amazon.com/dms/

0
jpspesh