-1

Существует множество инструментов клонирования базы данных, таких как SQL Data Compare.Можно ли эффективно клонировать базу данных SQL из приложения ASP.Net?

Однако конечные пользователи (с использованием приложения ASP.Net) хотят клонировать промежуточную базу данных SQL Server 2008 в базу данных SQL Azure самостоятельно, когда содержимое будет готово.

Я уверен, что я могу сравнивать каждую таблицу с помощью Entity Framework и вставлять/обновлять/удалять каждую строку. Есть ли лучший метод?

Благодарим за помощь!

+4

Какое странное требование. Пользователь в веб-приложении хочет клонировать целую базу данных? –

+0

Если вам нужно вставлять/обновлять/удалять строки между базами данных, вы, конечно же, не * клонирование * базы данных. Если это так, вы можете просто создать резервную копию промежуточной базы данных и восстановить ее для производства. Какова ваша цель? План поддержки SQL Server, пакет SSIS или хранимая процедура могут быть более подходящим местом для этого типа логики. Ваш веб-интерфейс может отбросить одну из этих вещей. –

+0

@TimSchmelter Я тоже так думал, но я исхожу из предположения, что это плохой английский, а конечный пользователь - клиент. Но я уверен, что вы знаете, что говорят о предположениях ... – Pete

ответ

1

Вы можете использовать разные классы в пространстве имен Microsoft.SqlServer.Management для управления всеми аспектами SQL Server.

Это включает в себя резервное копирование с одного сервера и восстановление в другое (в том числе изменение имен файлов журналов и любого другого).

По существу, если вы можете сделать это в SSMS, вы можете использовать эти классы для того же.

Я использовал это в прошлом, делаю что-то близкое к тому, что вы описываете.

+0

Спасибо! Я сделаю некоторое исследование, посвященное Microsoft.SqlServer.Management. Вы сталкиваетесь с любыми блогами или веб-сайтами? – Win

1

Почему бы не создать резервную копию базы данных и восстановить ее?

Вы можете без проблем выполнять резервное копирование и восстановление из своего веб-приложения. Вероятно, вы должны написать код для обработки резервной копии в хранимой процедуре вместо того, чтобы пытаться записать логику в код приложения. Что-то вроде:

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 

Единственное, что вам нужно беспокоиться о том, что два пользователя пытаются клонировать одну и ту же исходную базу данных одновременно, поэтому вы можете захотеть установить там какую-либо систему управления очередью или семафором. Я также пропустил обработку ошибок для краткости (например, убедитесь, что новое имя еще не существует). Он также предполагает, что у вас есть простые базы данных (один файл данных и один файл журнала). Но это начало.

EDIT, так как мы знаем назначения является Azure:

С Azure Я думаю, что ваши возможности ограничены. Я не думаю, что вы можете выполнить восстановление таким образом. Как вы собираетесь инициировать создание новой базы данных на Azure? Как только это будет сделано, вы все равно можете рассмотреть некоторые из сторонних инструментов для сравнения и синхронизации. Например, у инструментов Red Gate есть интерфейсы командной строки, что означает, что вы можете их явно вызвать в ответ на запросы своего веб-приложения.

+0

Это не отвечает на вопрос ... возможно, еще один вопрос –

+0

Я могу клонировать db за несколько минут. Однако наш конечный пользователь хочет сделать это сам из веб-приложения. : | – Win

+0

Я не проголосовал за это, вместо этого я вернулся. Постановка SQL 2008 на помещение, но производство SQL Azure. Это моя ложь, что я не упоминал об этом вначале. – Win

-1

Резервное копирование базы данных намного сложнее, чем чтение таблиц и записей. Последовательность восстановления имеет решающее значение, а также аспект производительности операции восстановления во избежание дросселирования как можно больше.

Возможно, вы можете выполнить сценарий операции DACPAC; Я не уверен, как это сделать, но это возможно. DACPAC является официальным решением Microsoft для резервного копирования и восстановления баз данных.Вот ссылка на обзор DACPAC; вы, вероятно, можете найти способ использовать это программно: http://msdn.microsoft.com/en-us/library/dd193245.aspx

Использование инструментов сторонних разработчиков Средство резервного копирования Enzo вскоре предоставит API для резервного копирования/восстановления базы данных программным путем. API позволит разработчикам запускать/останавливать/отправлять оповещения после завершения операций резервного копирования и восстановления базы данных с базой данных SQL Azure (ограниченная поддержка SQL Server). API доступен по индивидуальному запросу на данный момент; пожалуйста, свяжитесь с [email protected] для получения информации об API, если вы решите попробовать.

[ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Я являюсь автором средства резервного копирования]

Смежные вопросы