Локальное восстановление базы данных SQL Azure с помощью Bacpac

130

Я создал резервную копию BACPAC моей базы данных SQL Azure с помощью параметра «Экспорт» в консоли управления Azure.

Загрузив это на свою машину, я немного застрял в том, как восстановить это на локальном экземпляре SQL Server. Я наткнулся на инструмент DacImportExportCli, но не смог найти пример локального восстановления.

Также, если бы кто-нибудь написал сценарий, который делает это (чтобы его можно было запланировать), это было бы здорово.

Бен Фостер
источник
8
Это может быть вещь SQL Server 2012, но в SQL Server Management Studio, если я щелкну правой кнопкой мыши папку базы данных локального сервера и выберу «Импортировать приложение уровня данных», который запускает мастер, который читает файл BACPAC для создания копии моей базы данных Azure. , Мастер также может напрямую подключиться к хранилищу больших двоичных объектов для получения файла BACPAC, если вы не хотите сначала копировать его локально.
dumbledad
Вы когда-нибудь понимали это?
Nate
3
@dumbledad Я считаю, что это SSMS SQL 2012 для импорта приложения уровня данных, 2008R2, кажется, имеет только возможность экспортировать DACPAC, не видит вариант импорта.
jamiebarrow

Ответы:

179

Это можно сделать просто через SQL Server Management Studio 2012.

  1. Щелкните правой кнопкой мыши узел " Подключение> Базы данных" и выберите " Импортировать приложение уровня данных ... "
  2. На вводном этапе выберите « Далее ».
  3. введите описание изображения здесь
  4. Просмотрите или подключитесь к учетной записи хранения, где хранятся резервные копии.
Джозайя Радделл
источник
2
Это потрясающе. Инструмент RedGate может быть нестабильным. Я рад видеть вариант с поддержкой MS.
gilly3
2
Работает ли он с sql express 2012? Потому что у меня появляется следующее сообщение об ошибке: Count not load schema model from package. (Microsoft.SqlServer.Dac) ------------------------------ ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ: внутренняя ошибка. Тип внутренней целевой платформы SqlAzureDatabaseSchemaProvider не поддерживает версию файла схемы «2.5». (Файл: C: \ Users \ xxxxx \ Downloads \ dbname-2013-10-10-20-2.bacpac) (Microsoft.Data.Tools.Schema.Sql)
Антуан Мельцхейм
@ElTone Я только что восстановил бакпак непосредственно из хранилища Azure в мою локальную базу данных SQL Server Express 2012 с помощью Management Studio. Ошибок не увидел и данные вроде есть. Кто-то упоминает, что им помогла установка более новой версии SQL Server Data Tools (но они не имеют в виду Management Studio) social.msdn.microsoft.com/Forums/windowsazure/en-US/…
Юха Паломяки
@Juha Palomäki Правильно: установка последней версии SSDT решила проблему. Теперь все лучше.
Антуан Мельцхайм
4
Кажется, есть некоторые ограничения на то, насколько большие файлы BACPAC можно импортировать с помощью Management Studio. Если вы нажмете исключение OutOfMemory, проверьте ответ Flea о том, как использовать инструмент командной строки SqlPackage.exe
Юха Паломяки
52

Мне нужно было экспортировать базу данных SQL Azure, а затем импортировать ее на локальный сервер SQL 2008 R2 (обратите внимание, что я также использую Visual Studio 2010). Microsoft, конечно, изо всех сил старалась сделать эту задачу болезненной, однако я смог сделать это, выполнив следующие действия:

  1. Перейдите по этой ссылке http://msdn.microsoft.com/en-us/jj650014 и установите SQL Server Data Tools для Visual Studio 2010.

  2. Это будет установлено на вашем локальном диске. В моем случае он поместил его сюда: C: \ Program Files (x86) \ Microsoft SQL Server \ 110 \ DAC \ bin

  3. Перейдите к нему через командную строку или PowerShell.

  4. Вы захотите запустить SqlPackage.exe

  5. Откройте эту ссылку, чтобы увидеть список всех вариантов параметров для SqlPackage.exe ( http://msdn.microsoft.com/en-us/library/hh550080(v=vs.103).aspx )

  6. Вот моя командная строка, которую мне нужно было выполнить для импорта файла .bacpac на мой локальный сервер SQL 2008 R2:

    . \ SqlPackage.exe / a: Импорт /sf:C:\mydatabasefile.bacpac / tdn: NorthWind / tsn: BINGBONG

/tdn- это имя базы данных, в которую вы хотите восстановить файл BACPAC. /tsnэто имя вашего SQL-сервера.

Вы можете увидеть все описания этих параметров по ссылке с №5.

блоха
источник
Это можно сделать еще проще, если у вас установлен SSMS 2012. Вы можете просто использовать мастер, как описано выше @Josiah, даже с сервером 2008 R2.
DanO
2
Я потратил столько времени на поиски этого решения, что тем временем мне удалось загрузить всю версию managment studio 2014.
Санфос
SqlPackage зависал для меня на этапе «обновления базы данных», пока я полностью не сбросил целевую базу данных
michael_hook
10

Вы можете восстановить BACPAC с помощью инструментов на стороне клиента. Видео здесь:

http://dacguy.wordpress.com/2011/09/09/importexport-services/

Инструменты доступны здесь:

http://sqldacexamples.codeplex.com/documentation

азбука
источник
Предполагается, что инструмент поддерживает импорт bacpac в локальную базу данных. Например, импорт bacpac в базу данных с использованием Windows Auth будет выглядеть так: «DacCli -S myserver -E -D nw_restored -F northwind.bacpac -I». Однако список требуемых сборок codeplex устарел - ни одна из ссылок не будет работать, поэтому инструмент не запустится (для некоторых компонентов SQL 2012 CTP требуется предварительное условие).
Давид Айрапетян
На моем компьютере были установлены все компоненты, поэтому я попытался импортировать bacpac с помощью DacCli - это сработало (см. Командную строку в моем предыдущем комментарии). Потребовалось около 20 минут для 100 МБ bacpac.
Давид Айрапетян
7

Кажется, на мои молитвы был дан ответ. Redgate запустила свой инструмент резервного копирования SQL Azure БЕСПЛАТНО сегодня - http://www.red-gate.com/products/dba/sql-azure-backup/download

Бен Фостер
источник
Несколько проблем: 1. Активная разработка SQL Azure Backup на данный момент остановлена ​​(это примечание отображается при запуске последней версии инструмента) 2. При резервном копировании непосредственно из Azure в локальный SQL он не проходит мимо bacpac, но вместо этого реализует какую-то самодельную копию схемы / данных. По моему опыту, это было очень медленно. 3. Если опираться на предыдущий пункт, то механизм ошибочен - у меня было несколько таблиц, которые не могли быть переданы, потому что инструмент не мог определить уникальный ключ
Давид Айрапетян
2
Этот ответ следует обновить, иначе он больше не будет принятым ответом. Связанный инструмент с тех пор стал «облачным» решением и не поддерживает локальное резервное копирование.
Тимоти Стримпл
2
Инструмент резервного копирования по-прежнему доступен по адресу red-gate.com/products/dba/sql-azure-backup/ Снято
Бен Фостер
5

Если вы используете SSMS 2012, это так же просто, как щелкнуть правой кнопкой мыши папку «Базы данных» на сервере в обозревателе объектов и выбрать «Импортировать приложение уровня данных ...».

Есть одна проблема, на которую следует обратить внимание: с 26 марта 2013 года (когда мне нужно было узнать, как это сделать самостоятельно), когда вы экспортируете .bacpac из Azure, он будет загружен как файл .zip, не файл .bacpac, и в диалоговом окне файла, которое открывается кнопкой Обзор в мастере импорта, будет отображаться только файл * .bacpac или . в фильтрах файлов, подразумевая, что .zip не поддерживается. Однако, если вы измените фильтр на . , выберите загруженный файл .zip и нажмите Далее, мастер продолжит работу в обычном режиме.

Адам Андерсон
источник
2
Это правильный ответ. Теперь вы можете установить бесплатную автономную версию SSMS 2016, которая предоставляет все эти функции
Аарон,
3

Вот сценарий для восстановления сразу нескольких файлов BACPAC: Массовое восстановление локальных файлов BACPAC

cd [FOLDERPATH]
$goodlist = dir
cd 'C:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin'
foreach($i in $goodlist){ $name = $i.Name; $namer = $i.Name.Substring(0, $i.Name.length - 7); .\SqlPackage.exe /a:Import /sf:[FOLDERPATH]\$name /tdn:$namer /tsn:[SERVERNAME] }
Джеффри Россель
источник