-1

SQL Data Compare など、多くのデータベース複製ツールが存在します。

ただし、エンド ユーザー (ASP.Net アプリケーションを使用) は、コンテンツの準備が整ったときに、ステージング SQL Server 2008 データベースを運用 SQL Azure データベースに複製することを望んでいます。

Entity Frameworkを使用してすべてのテーブルを比較し、各行を挿入/更新/削除できると確信しています。より良い方法はありますか?

ご協力ありがとうございました!

4

3 に答える 3

1

名前空間のさまざまなクラスを使用して、 Microsoft.SqlServer.ManagementSQL Server のすべての側面を管理できます。

これには、あるサーバーからのバックアップと別のサーバーへの復元が含まれます (ログファイル名の変更やその他の必要なものを含む)。

本質的に、SSMSでそれを行うことができれば、これらのクラスを使用して同じことを行うことができます。

私は過去にこれを使用して、あなたが説明していることに近いことをしました。

于 2012-05-03T15:17:54.060 に答える
1

データベースをバックアップして復元してみませんか?

Web アプリケーションからのバックアップと復元は、特に問題なく実行できます。アプリケーション コードにロジックを記述しようとするのではなく、ストアド プロシージャでバックアップを処理するコードを記述する必要があります。何かのようなもの:

CREATE PROCEDURE dbo.InitiateClone
  @DBName     SYSNAME
AS
BEGIN
  SET NOCOUNT ON;

  DECLARE @sql NVARCHAR(MAX);

  SET @sql = N'BACKUP DATABASE ' + QUOTENAME(@DBName)
     + ' TO DISK = ''\\Common_network_path\wherever\' + @DBName + '.BAK''
     + WITH INIT;';

  EXEC sp_executesql @sql;

  SET @sql = N'SELECT name, type_desc FROM sys.
END
GO

これで、バックアップを要求するアプリは、データとログ ファイル名を使用して、他のサーバー上のプロシージャに渡すことができます。

CREATE PROCEDURE dbo.FinishClone
  @NewDBName    SYSNAME,
  @OldDBName    SYSNAME,
  @DataFileName VARCHAR(255),
  @LogFileName  VARCHAR(255)
AS
BEGIN
  SET NOCOUNT ON;

  DECLARE @sql NVARCHAR(MAX);

  SET @sql = N'RESTORE DATABASE ' + QUOTENAME(@NewDBName)
     + ' FROM DISK = ''\\Common_network_path\wherever\' + @OldDBName + '.BAK''
     + ' WITH MOVE ''' + @DataFileName + ''' TO ''D:\datapath\' 
     + @NewDBName + '_data.mdf'','
     + ' MOVE ''' + @LogFileName + ''' TO ''D:\logpath\'
     + @NewDBName + '_log.ldf'';';

  EXEC sp_executesql @sql;
END
GO

心配する必要があるのは、2 人のユーザーが同時に同じソース データベースのクローンを作成しようとする場合だけです。そのため、何らかのキューイングまたはセマフォ コントロールを配置する必要がある場合があります。また、簡潔にするためにエラー処理も省略しました (たとえば、新しい名前がまだ存在しないことを確認するなど)。また、単純なデータベース (1 つのデータ ファイルと 1 つのログ ファイル) があることも前提としています。しかし、それは始まりです。

宛先が Azure であることがわかっているため、編集します。

Azure では選択肢が限られていると思います。この方法で復元を実行できるとは思いません。Azure で新しいデータベースの作成をどのように開始しますか? それが完了したら、比較と同期のためのサードパーティ製ツールのいくつかを検討することができます。たとえば、Red Gate のツールにはコマンドライン インターフェイスがあり、Web アプリケーションからの要求に応じてツールを呼び出すことができます。

于 2012-05-03T15:15:06.137 に答える
-1

データベースのバックアップは、テーブルやレコードの読み取りよりもはるかに困難です。復元のシーケンスは重要であり、可能な限りスロットルを回避するための復元操作のパフォーマンス面も重要です。

DACPAC 操作をスクリプト化できる場合があります。それを行う方法はわかりませんが、可能かもしれません。DACPAC は、データベースをバックアップおよび復元するための公式の Microsoft ソリューションです。DACPAC の概要へのリンクは次のとおりです。おそらく、これをプログラムで使用する方法を見つけることができます: http://msdn.microsoft.com/en-us/library/dd193245.aspx

Enzo Backup ツールは、サードパーティ ツールを使用して、データベースをプログラムでバックアップ/復元するための API をまもなく提供します。この API を使用すると、開発者は、SQL Azure データベースに対するデータベース バックアップおよび復元操作の完了時にアラートを開始/停止/送信できます (SQL Server の限定サポート)。API は、現時点ではプライベート リクエストに応じて利用できます。API を試してみたい場合は、info@bluesyntax.net に連絡して、API に関する情報を入手してください。

[免責事項: 私はバックアップ ツールの作成者です]

于 2012-05-04T00:16:39.327 に答える