Как «клонировать» базу данных с удаленного сервера в базу данных LocalDB с помощью приложения C#? Никаких связей с удаленной базой данных не требуется.Как экспортировать базу данных и импортировать ее локально с помощью кода на C#?
фон
Применение написано на C# с использованием .NET 4.5.2 и поддерживает два режима - онлайн, который подключается к удаленной базе данных MS SQL Server, и в автономном режиме, который подключается к базе данных LocalDB
. Приложение в первую очередь нацелено на более новые версии серверов (если это имеет значение, поддержка только версии 2014 в порядке).
Перед тем, как пользователь перейдет в автономный режим, он должен попросить приложение клонировать удаленную базу данных в базу данных LocalDB
(локальная база данных полностью перезаписана). Локальная база данных должна быть независимой от удаленной базы данных, то есть без ведомого или репликации.
Как сетевая, так и автономная строка подключения содержит имя соответствующей базы данных. Само приложение не имеет прямого знания имени базы данных или имен таблиц, так как это управляется строками соединения и структурой Entity Framework.
Вопрос
Как «клон» удаленной базы данных в базу данных LocalDB
(имя удаленной базы данных и имя LocalDB
базы данных может отличаться)?
Я предпочитаю решение, которое не требует запуска внешней программы, но это не является жестким требованием.
Вопросы
Копирование через Entity Framework нет отслеживания лиц неприемлемо медленно.
Я знаю команды BACKUP DATABASE
и RESTORE DATABASE
, но я нашел следующие трудности:
Они требуют от меня, чтобы указать имя базы данных. Есть ли способ, как по умолчанию использовать исходную базу данных, указанную как часть строки подключения?
Команда
RESTORE DATABASE
содержит имена и пути соответствующих файлов данных на диске (MOVE
частей). Есть ли способ обработать его с указанием имени базы данных без указания пути к файлам данных? Или как получить пути к файлам данных с помощью команд SQL (чтобы получить имена файлов, я просто создаю пустую базу данных, получаю имена файлов, необязательно удаляю базу данных и использую имена файлов, которые вы получили)?
Есть ли лучший способ сделать это?
Я бы предложил класс SqlBulkCopy. Это в ваших тегах, но вы вообще не упоминаете об этом в тексте. Вы попробовали это? – TomT
Спасибо, я не знал его на самом деле класс. Благодаря вашему предложению я нашел http://www.codeproject.com/Articles/18418/Transferring-Data-Using-SqlBulkCopy и использовал предоставленный код примера «PerformBulkCopy» для создания фактического кода. – alik
Я предлагаю использовать пакеты SSIS для получения последних данных. Вы можете сделать инкрементное или полное обновление, используя это. – Raghuveer