Как скопировать базу данных SQL Azure на локальный сервер разработки?

164

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

Какие-либо предложения?

BZink
источник
2
Я использую это почти всегда! Он небольшой, бесплатный, постоянно обновляется, не устанавливает ненужные файлы, работает как брелок, не создает нежелательных объектов в базе данных и делает именно то, что его название.
Астайков
4
Это стало значительно проще. См. Ответ Atom ниже (февраль 2018 г.), объясняющий, как использовать Tasks => Deploy Database ... в SSMS.
Джон Кроуэлл

Ответы:

129

Есть несколько способов сделать это:

  1. Использование служб SSIS (служб интеграции SQL Server) . Это только импортdata в вашей таблице. Свойства столбцов, ограничения, ключи, индексы, хранимые процедуры, триггеры, параметры безопасности, пользователи, входы в систему и т. Д. Не передаются. Однако это очень простой процесс, который можно выполнить, просто пройдя мастер в SQL Server Management Studio.
  2. Использование комбинации сценариев создания SSIS и БД . Это позволит вам получить данные и все недостающие метаданные, которые не передаются службами SSIS. Это тоже очень просто. Сначала перенесите данные с помощью служб SSIS (см. Инструкции ниже), затем создайте сценарий DB Create из базы данных SQL Azure и повторно воспроизведите его в локальной базе данных.
  3. Наконец, вы можете использовать службу импорта / экспорта в SQL Azure . Это передает данные (с объектами схемы) в хранилище BLOB-объектов Azure в виде BACPAC. Вам потребуется учетная запись хранилища Azure, и вы должны сделать это на веб-портале Azure. Это так же просто, как нажатие кнопки «Экспорт» на веб-портале Azure при выборе базы данных, которую вы хотите экспортировать. Недостатком является то, что это только ручная процедура, я не знаю, как автоматизировать это с помощью инструментов или сценариев - по крайней мере, первая часть, которая требует нажатия на веб-странице.

Ручная процедура для метода № 1 (с использованием служб SSIS) заключается в следующем:

  • В Sql Server Management Studio (SSMS) создайте новую пустую базу данных на локальном экземпляре SQL.
  • Выберите Импорт данных из контекстного меню (щелкните правой кнопкой мыши базу данных -> Задачи -> Импорт данных ...)
  • Введите параметры подключения для источника (SQL Azure). Выберите «Поставщик данных .Net Framework для SqlServer» в качестве поставщика.
  • Выберите существующую пустую локальную базу данных в качестве места назначения.
  • Следуйте указаниям мастера - вы сможете выбрать из таблиц данные, которые хотите скопировать. Вы можете пропустить любые таблицы, которые вам не нужны. Например, если вы храните журналы приложений в базе данных, вам, вероятно, не нужно это в своей резервной копии.

Вы можете автоматизировать его, создав пакет служб SSIS и выполнив его в любое время, когда захотите повторно импортировать данные. Обратите внимание, что вы можете импортировать только с использованием SSIS в чистую БД, вы не можете делать инкрементные обновления в вашей локальной базе данных, если вы уже сделали это один раз.

Метод № 2 (данные SSID плюс объекты схемы) очень прост. Сначала выполните шаги, описанные выше, затем создайте сценарий создания БД (щелкните правой кнопкой мыши базу данных в SSMS, выберите «Создать сценарии» -> «Создание базы данных»). Затем переиграйте этот скрипт в вашей локальной базе данных.

Метод № 3 описан в блоге здесь: http://dacguy.wordpress.com/2012/01/24/sql-azure-importexport-service-has-hit-production/ . Существует видеоклип с процессом передачи содержимого БД в хранилище BLOB-объектов Azure в виде BACPAC. После этого вы можете скопировать файл локально и импортировать его в ваш экземпляр SQL. Процесс импорта BACPAC в приложение уровня данных описан здесь: http://msdn.microsoft.com/en-us/library/hh710052.aspx .

Сева Титов
источник
2
Это работает, только одно исправление. В мастере импорта / экспорта сервера источником данных является «Поставщик данных .Net Framework для SqlServer»
BZink
Большой! Спасибо за исправление. Я помню, что один из провайдеров работал, а некоторые другие не работали для меня, но не помнил, какой именно.
Сева Титов
Сбой для меня: «Ошибка вставки в столбец« id »только для чтения»
dumbledad
3
Уловка для меня заключалась в том, чтобы начать репликацию PK / FKs / ограничений на пустую БД, а затем временно отключить ограничения при импорте данных. Точнее: 1-Создать пустую целевую БД вручную. 2 Щелкните правой кнопкой мыши исходную БД> Задачи> Создать сценарии. 3-Выполнить файл сценария на пустой целевой БД (теперь БД имеет правильные PK / FKs / ограничения, но нет данных). 4-Отключить все ограничения ( stackoverflow.com/a/161410 ). 5-Импорт данных (щелкните правой кнопкой мыши целевую БД> Задачи> Импорт данных). 6-Разрешить ограничения. Надеюсь это поможет!
Матье Френетт
1
@JoSmo, методы # 1 и # 2 не требуют учетной записи хранения. Однако я бы порекомендовал иметь учетную запись хранения в том же центре данных, что и ваша база данных SQL Azure. Причина в том, что вы можете использовать его для резервного копирования и восстановления БД. Если у вас нет прав администратора для вашей подписки Azure, найдите в своей организации человека, у которого достаточно прав для создания новых учетных записей хранилища, и предоставьте вам ключи доступа к нему. Поскольку у вас уже есть доступ к базе данных, нет никаких причин отказать в доступе к учетной записи хранения.
Сева Титов
66

Скопируйте данные базы данных Azure в локальную базу данных. Теперь вы можете использовать SQL Server Management Studio, как показано ниже:

  • Подключитесь к базе данных SQL Azure.
  • Щелкните правой кнопкой мыши базу данных в обозревателе объектов.
  • Выберите параметр «Задачи» / «Развернуть базу данных в SQL Azure».
  • На шаге «Параметры развертывания» подключите локальный SQL Server и создайте новую базу данных.

введите описание изображения здесь

«Далее» / «Далее» / «Готово»

Атом
источник
9
Удивительно, это не так ясно в SSMS, поскольку «развертывание базы данных в SQL AZURE» несколько вводит в заблуждение ...
EeKay
12
Безусловно, самое простое решение, смешанное с самым вводящим в заблуждение названием меню. Спасибо за публикацию.
Кевин Гишевски
Это проще всего, но недостатком является то, что вы не можете выбрать, какие таблицы вы хотите сделать резервную копию, а какие - нет. В моей компании есть таблица вложений, которая содержит гигабайты вложений (рисунки и т. Д.). Обычно мы не хотим этого, поскольку это будет навсегда скопировать. Мы не можем исключить эту таблицу, используя этот метод.
Росди Касим
33

Я просто хотел добавить упрощенную версию ответа Дамблдада , поскольку он правильный.

  1. Экспортируйте базу данных SQL Azure в файл BACPAC в хранилище больших двоичных объектов.
  2. В SQL Management studio щелкните правой кнопкой мыши свою базу данных и выберите «импортировать приложение уровня данных».
  3. Вам будет предложено ввести информацию, чтобы получить доступ к файлу BACPAC в вашем хранилище BLOB-объектов Azure.
  4. Хит следующий пару раз и ... Готово!
Джош Муч
источник
4
Я получаю сообщение об ошибке, говорящее, что цель не может быть SQL Server v12?
Zapnologica
2
Убедитесь, что у вас есть версия SSMS, которая будет импортировать этот BACPAC: msdn.microsoft.com/en-us/library/mt238290.aspx
Пол Булливант
Даже с этой версией SSMS я все еще получаю сообщение об ошибке из-за целевого Azure sql db 12.
Preza8
28

В SQL Server 2016 Management Studio процесс получения базы данных Azure на локальный компьютер был упрощен.

Щелкните правой кнопкой мыши базу данных, которую вы хотите импортировать, выберите Задачи> Экспорт приложения уровня данных и экспортируйте базу данных в локальный файл .dacpac.

В локальном целевом экземпляре SQL-сервера вы можете щелкнуть правой кнопкой мыши Базы данных> Импортировать приложение уровня данных , и, когда оно будет локальным, вы сможете выполнять такие операции, как резервное копирование и восстановление базы данных.

Адам Скиннер
источник
5
Это оно. NB. «Уровень данных экспорта» включает в себя данные, а «Уровень данных экстракта» содержит только определения
Колин
20

Я думаю, что теперь все намного проще.

  1. Запустить SQL Management Studio
  2. Щелкните правой кнопкой мыши «Базы данных» и выберите «Импортировать приложение уровня данных ...»
  3. Мастер проведет вас через процесс подключения к вашей учетной записи Azure, создания файла BACPAC и создания базы данных.

Кроме того, я использую Sql Backup и FTP ( https://sqlbackupandftp.com/ ) для ежедневного резервного копирования на защищенный FTP-сервер. Я просто вытаскиваю оттуда недавний файл BACPAC, и он импортирует его в том же диалоговом окне, что позволяет быстрее и проще создать локальную базу данных.

Этот парень
источник
9

Вы также можете проверить синхронизацию данных SQL Azure на портале управления Windows Azure. Это позволяет вам извлекать и восстанавливать всю базу данных, включая схему и данные между SQL Azure и SQL Server.

Voclare
источник
1
Синхронизация данных SQL не должна использоваться как часть вашей стратегии резервного копирования, поскольку существует несколько ограничений. Это не версия, это только резервное копирование данных и никаких других объектов. Дополнительные сведения см. В разделе часто задаваемых вопросов по синхронизации данных SQL. ( msdn.microsoft.com/en-us/library/windowsazure/jj650016.aspx )
Шон Люттин
1
Синхронизация данных довольно ужасна - даже сегодня (через несколько лет после этого поста) есть куча ошибок, и это может действительно испортить вашу базу данных - у нее также есть много ограничений.
Уильям
5

Это довольно легко. Это сработало для меня ... с точки зрения переноса базы данных SQL Azure на локальный компьютер ...:

  1. Откройте SQL Management Studio и подключитесь к Azure SQL Server.
  2. Выберите базу данных, которую вы хотите получить на свой локальный компьютер, и щелкните правой кнопкой мыши ... выберите «Создать сценарии». Следуйте инструкциям ...

НО, будьте осторожны в том, что если вы ТАКЖЕ хотите ДАННЫЕ, а также сценарии, обязательно проверьте Дополнительные параметры перед началом генерации ... прокрутите вниз до «Типы данных для сценария» и убедитесь, что у вас есть » Схема и данные "... или все, что подходит для вас.

Он даст вам хороший файл сценария SQL, который затем можно будет запустить на вашем локальном компьютере, и он создаст базу данных, а также заполнит ее всеми данными.

Не забывайте, что в моем случае у меня нет FK или других ограничений ... кроме того, данных было немного.

Я не рекомендую это как механизм резервного копирования в целом ...

Барри Теуниссен
источник
2
Я должен сказать, что это работало замечательно хорошо без суеты; внешние ключи воссозданы отлично. Получившийся сценарий SQL был слишком большим, чтобы его можно было открыть в SSMS или даже во многих текстовых редакторах, но я смог использовать командную строкуsqlcmd /S <server> /d <database> -E -i <azure_dump.sql>
perlyking
5

С помощью msdeploy.exe

Предостережение: msdeploy.exeне удается создать целевую базу данных самостоятельно, поэтому сначала необходимо создать ее вручную.

  1. Скопируйте строку подключения на странице свойств базы данных. Настройте его так, чтобы он содержал правильный пароль. страница свойств базы данных
  2. Получить строку подключения для целевой БД.
  3. Запустите msdeploy.exeтак:

    "c:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" -verb:sync -dest:dbDacFx="destination_DB_connection_string",dropDestinationDatabase=true -source:dbDacFx="azure_DB_connection_string",includeData=true -verbose

С помощью SqlPackage.exe

  1. Экспортируйте базу данных Azure в пакет bacpac.

    "c:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\SqlPackage.exe" /a:Export /ssn:"azure_db_server" /sdn:"azure_db_name" /su:"user_name" /sp:"password" /tf:"file.bacpac"
  2. Импортируйте пакет в локальную БД.

    "c:\Program Files (x86)\Microsoft SQL Server\110\DAC\bin\SqlPackage.exe" /a:Import /SourceFile:"file.bacpac" /TargetServerName:".\SQLEXPRESS" /TargetDatabaseName:CopyOfAzureDb
Gebb
источник
4

Пожалуйста, попробуйте это: http://mooneyblog.mmdbsolutions.com/index.php/2011/01/11/simple-database-backups-with-sql-azure/ .

Другой альтернативой будет синхронизация данных SQL Azure. .

Есть еще одно сообщение в блоге, которое я перебрал несколько дней назад, но не смог найти его сейчас. Я обновлю этот пост, как только найду его.

Гаурав Мантри-АИС
источник
Вот еще одна ссылка, о которой я упоминал в своем посте ранее: bmegias.wordpress.com/2010/09/14/…
Гаурав Мантри-АИС
3

В SQL Server Management Studio

Щелкните правой кнопкой мыши базу данных, которую вы хотите импортировать, выберите Задачи> Экспорт приложения уровня данных и экспортируйте базу данных в локальный файл .dacpac.

В локальном целевом экземпляре SQL-сервера вы можете щелкнуть правой кнопкой мыши Базы данных> Импортировать приложение уровня данных, и, когда оно будет локальным, вы сможете выполнять такие операции, как резервное копирование и восстановление базы данных.

Али Суфьян
источник
2

Я не смог заставить работать импорт / экспорт служб SSIS, так как получил сообщение об ошибке «Ошибка при вставке в столбец« id »только для чтения». Я также не мог получить http://sqlazuremw.codeplex.com/ работать , и приведенные выше ссылки на синхронизацию данных SQL Azure у меня не работали.

Но я нашел отличный пост в блоге о файлах BACPAC: http://dacguy.wordpress.com/2012/01/24/sql-azure-importexport-service-has-hit-production/

В видео в посте автор блога проходит шесть шагов:

  1. Создайте или перейдите к учетной записи хранения на портале управления Azure. Вам понадобится URL-адрес BLOB-объекта и первичный ключ доступа учетной записи хранения.

  2. В блоге содержится совет по созданию нового контейнера для файла bacpac и предлагается использовать для этого хранилище хранилища Azure . (Примечание: вам понадобится URL-адрес BLOB-объекта и первичный ключ доступа учетной записи хранения, чтобы добавить его в обозреватель хранилища Azure.)

  3. На портале управления Azure выберите базу данных, которую вы хотите экспортировать, и нажмите «Экспорт» в разделе «Импорт и экспорт» на ленте.

  4. В появившемся диалоге необходимо указать имя пользователя и пароль для базы данных, URL-адрес большого двоичного объекта и ключ доступа. Не забудьте включить контейнер в URL-адрес большого двоичного объекта и указать имя файла (например, https://testazurestorage.blob.core.windows.net/dbbackups/mytable.bacpac ).

  5. После нажатия кнопки «Готово» база данных будет экспортирована в файл BACPAC. Это может занять некоторое время. Вы можете сразу увидеть файл нулевого байта, если вы проверите в Azure Storage Explorer. Это служба импорта / экспорта, которая проверяет, имеет ли она право на запись в хранилище BLOB-объектов.

  6. После этого вы можете использовать обозреватель хранилища Azure для загрузки файла BACPAC, а затем в SQL Server Management Studio щелкните правой кнопкой мыши папку базы данных на локальном сервере и выберите «Импорт приложения уровня данных», который запустит мастер, который читает файл BACPAC в создайте копию вашей базы данных Azure. Мастер также может напрямую подключиться к хранилищу BLOB-объектов, чтобы получить файл BACPAC, если вы не хотите сначала копировать его локально.

Последний шаг может быть доступен только в выпуске SQL Server 2012 SQL Server Management Studio (это версия, которую я использую). У меня нет более ранних на этой машине, чтобы проверить. В сообщении в блоге автор использует инструмент командной строки DacImportExportCli.exe для импорта, который, я считаю, доступен по адресу http://sqldacexamples.codeplex.com/releases.

dumbledad
источник
Хотя я не следовал этому точно, это привело меня в правильном направлении. Вы можете пропустить загрузку файла bacpac и указать на хранилище BLOB-объектов Azure непосредственно из среды SQL Server Management Studio.
Джош Моуч
2

Что касается «Не удалось заставить работать / экспортировать службы SSIS, поскольку я получил ошибку« Ошибка при вставке в столбец «id» только для чтения ». Это можно обойти, указав в окне сопоставления, что вы хотите разрешить вставку элементов идентичности.

После этого все работало нормально, используя мастер импорта / экспорта SQL для копирования из Azure в локальную базу данных.

У меня был только мастер импорта / экспорта SQL, который поставляется с SQL Server 2008 R2 (работал нормально) и Visual Studio 2012 Express для создания локальной базы данных.

RSH
источник
2

Вы можете попробовать с помощью инструмента "Мастер миграции баз данных SQL". Этот инструмент предоставляет возможность импортировать и экспортировать данные из Azure SQL.

Пожалуйста, проверьте более подробную информацию здесь.

https://sqlazuremw.codeplex.com/

Krishna_K_Systematix
источник
1

Вы можете использовать новые мобильные службы Azure для еженедельного экспорта резервных копий из SQL Azure в файл .bacpac, размещенный в хранилище Azure. Это решение на 100% облачное, не требует сторонних инструментов и не требует локального размещенного экземпляра SQL Server для загрузки / копирования / резервного копирования чего-либо.

Есть около 8 различных шагов, но все они просты: http://geekswithblogs.net/BenBarreth/archive/2013/04/15/how-to-create-a-nightly-backup-of-your-sql-azure .aspx

Бен Баррет
источник
Это выглядит действительно многообещающе! Есть идеи, будет ли это работать с федерациями Azure?
Тим Лентин
@ Извините, я не знаю. Делать это через мобильные сервисы - это обходной путь, поэтому я не удивлюсь, если это не так.
Бен Баррет
1

Я всегда использую функцию импорта / экспорта, которая кажется самой простой среди всех.

Шаг 1:

Получите резервную копию из экземпляра Azure следующим образом. Выберите базу данных → Щелкните правой кнопкой мыши → Задачи → Экспорт приложения уровня данных.

Шаг 2: Дайте конкретное имя для файла резервной копии и сохраните его в нужном месте

Шаг 3: Вот и вы сделали резервную копию базы данных из экземпляра sql в ваш локальный. Давайте восстановим его до местного. Скопируйте резервную копию базы данных на ваш диск C. Теперь откройте PowerShell с правами администратора и перейдите на диск C

Шаг 4. Загрузите скрипт powershell, чтобы удалить мастер- ключRemoveMasterKey.ps1. имеет скрипт на том же диске, в данном случае это C.

Шаг 5. Запустите сценарий следующим образом. \ RemoveMasterKey.ps1 -bacpacPath "C: \ identity.bacpac"

Вот и все, теперь вы можете восстановить его на MSSQL 2017 в вашей локальной среде.

Шаг 6. Подключитесь к локальному серверу и выберите Базы данных → Импортировать данные-Уровень-Приложение

Шаг 7 : Дайте имя вашей базе данных для восстановления.

Теперь вы увидите все зеленым!

Прочитайте мой блог с диаграммами.

Sajeetharan
источник
0

Загрузите Optillect SQL Azure Backup - у него есть 15-дневная пробная версия , поэтому ее будет достаточно для перемещения вашей базы данных :)

Optillect Team
источник
Это ссылка на внутренний инструмент. Предположим, что OP имел в виду ссылку на вышедший на пенсию инструмент Red Gate ( red-gate.com/products/dba/sql-azure-backup ) или этот проект на CodePlex ( sqlazurebackup.codeplex.com )
Джош
0

Уловка для меня заключалась в том, чтобы начать репликацию PK / FKs / ограничений на пустую БД, а затем временно отключить ограничения при импорте данных (см. Https://stackoverflow.com/a/161410 ).

Точнее:

  1. Создать пустую целевую БД вручную;
  2. Щелкните правой кнопкой мыши исходную БД> Задачи> Создать сценарии;
  3. Запустить файл сценария на пустой целевой БД (теперь БД имеет правильные PK / FKs / ограничения, но не имеет данных);
  4. Отключить все ограничения;
  5. Импорт данных (щелкните правой кнопкой мыши целевую БД> Задачи> Импорт данных);
  6. Снова включите ограничения.

Надеюсь это поможет!

Матье Френетт
источник
0

Теперь вы можете использовать SQL Server Management Studio для этого.

  • Подключитесь к базе данных SQL Azure.
  • Щелкните правой кнопкой мыши базу данных в обозревателе объектов.
  • Выберите параметр «Задачи» / «Развернуть базу данных в SQL Azure».
  • На шаге «Параметры развертывания» выберите подключение к локальной базе данных.
  • «Далее» / «Далее» / «Готово» ...
ferhrosa
источник
Я не смог этого сделать, потому что кнопка «Далее» неактивна, пока я не
Colin
0

Используйте службу импорта / экспорта в SQL Azure, чтобы создать файл .bacpac.

Затем взгляните на этот метод в другой статье о переполнении стека.

База данных Azure SQL Bacpac Local Restore

Джефф Бейли
источник
0

Если у кого-то возникла проблема с импортом Bacpac БД, использующей Azure SQL Sync , Сандрино Ди Маттиа разработал отличное простое приложение для решения этой проблемы.

  1. Экспорт Bacpac вашей БД
  2. Скачать бинарный файл Di Mattia
  3. С помощью этого консольного приложения восстановите загруженный Bacpac
  4. Лауч ССМС
  5. Щелкните правой кнопкой мыши «Базы данных» и выберите «Импортировать приложение уровня данных».
  6. Выберите отремонтированный Bacpac.
Геза
источник
0

Если кто-то хочет получить бесплатную и эффективную возможность (и не прочь сделать это вручную) для резервного копирования базы данных в локальную, используйте функцию сравнения схем и данных, встроенную в последнюю версию Microsoft Visual Studio 2015 Community Edition (бесплатная версия) или Professional / Premium / Ultimate. издание. Работает как часы!

У меня есть учетная запись BizPark в Azure, и нет способа сделать резервную копию базы данных напрямую, не заплатив. Я нашел эту опцию в VS работает.

Ответ взят с https://stackoverflow.com/a/685073/6796187

Crennotech
источник
0

Привет! Я использую инструмент SQLAzureMW для миграции и управления БД SQLAzure. Очень полезный Он был загружен из codeplex, но в настоящее время он недоступен, кодплекс будет отключен, теперь в GttHub доступен тот же инструмент приложения. Ниже ссылка объясняет, как использовать этот инструмент, а также доступно приложение для загрузки.

https://github.com/twright-msft/azure-content/blob/master/articles/sql-database/sql-database-migration-wizard.md

Раджа Суббиах
источник