32

Win2008 Server 上の通常の SQL Server から Amazon AWS RDS 上の SQL Server に移行しようとしています。

簡単なバックアップと復元がうまくいくと思いました。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]

どんな提案も役に立ちます。

4

7 に答える 7

51

CodePlexから無料の「SQL Azure Migration Wizard」をダウンロードしてください-- 私はこれについて短いブログ/スクリーンキャストを作成しました。ウィザードの「TO」設定を AWS DNS 名に設定してから、「SQL Azure」ではなく「SQL Server 2008」を使用してください。

于 2012-05-25T16:46:44.177 に答える
8

.bak ファイルを使用した SQL データベースの移行に関する AWS サポートについて私が得た公式の言葉は、サポートされていないということです。そのため、.bak ファイルからすばやく復元する必要はありません。彼らはここで既存のデータベースの移行に関する公式ヘルプを提供しました:

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

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

SQL Azure 移行ツール

于 2012-10-11T16:06:09.043 に答える
7

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

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

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

[データ層アプリケーションのエクスポート] ダイアログ

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

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

rds_deny_backups_trigger トリガー

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

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

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

  1. BACPAC ファイル内の model.xml ファイルを編集します (BACPAC は単なる zip ファイルです)。
  2. 上記のオブジェクト (RDS によって自動的に追加されるもの) に関連する Type 属性に次の値を持つ要素を削除します。
    • SqlRoleMembership
    • SqlPermissionステートメント
    • Sqlログイン
    • 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 にインポートすることには、別の関連する問題があります。

于 2013-04-12T15:11:14.680 に答える
4

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

于 2012-05-31T20:15:37.760 に答える
0

データを含むデータベースをコピーする方法について説明している次の記事 - あるテーブルから別のテーブルにデータを挿入するための 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-別のテーブル/

于 2012-05-10T02:30:29.280 に答える