2012-05-09 4 views
32

Я пытаюсь перейти от обычного SQL Server на сервере Win2008 к SQL Server на Amazon AWS RDS.Переход на Amazon SQL Server RDS

Я думал, что простая резервная копия и восстановление будут работать. Хотя AWS RDS, похоже, не имеет доступа к файловой системе, поэтому для всех сценариев sql необходима локальная файловая система на исходном и конечном сервере. Я попытался выполнить сценарий, следующий за

exec sp_addlinkedserver @server='test.xxxx.us-east-1.rds.amazonaws.com' 

-- Verify that the servers were linked (lists linked servers) 
exec sp_linkedservers 

EXEC ('RESTORE DATABASE [orchard] FROM DISK = ''C:\Temp\orchard.bak'' WITH FILE = 1, NOUNLOAD, STATS = 10') 
AT [test.xxxx.us-east-1.rds.amazonaws.com] 

Любые предложения были бы полезными.

+0

Вы просто переносите схему базы данных или вам нужно также передавать данные? – JeffO

+1

Тот факт, что это Amazon RDS, не влияет на это. Вы должны помнить, что всякий раз, когда вы обращаетесь к локальной файловой системе, это касается механизма базы данных, на котором запущен T-SQL. В этом случае вы пытаетесь восстановить файл с диска C экземпляра Amazon. Этот файл там не существует. Если возможно, заведите свой файл там или так на сервере, где вы можете получить доступ к нему через UNC.Однако я не удивлюсь, если это невозможно с RDS. –

+0

Jeff O Data также. – darwindave

ответ

51

скачать бесплатно 'SQL Azure Мастер миграции' от CodePlex - я сделал короткий blog/screencast об этом. Обязательно установите «TO» установки в мастере имя AWS DNS, а затем использовать не «SQL Server 2008» и «SQL Azure»

+0

благодарит Линн. Я буду помнить об этом в следующий раз. – darwindave

+3

Я предполагаю, что Amazon не хочет ссылаться на это на своих документах, но является более легким способом перенаправления FAR FAR, чем то, что они предлагают (что я потратил впустую на часы ранее) – petenelson

+2

кто-то промахнулся в ссылке внизу этот форум/жалоба: https://forums.aws.amazon.com/message.jspa?messageID=442219#442219 – drzaus

3

Используйте мастер экспорта в SQL Studio для управления сервером на исходной базе данных , Щелкните правой кнопкой мыши по базе данных> задачи> экспортировать данные. Существует мастер, который проведет вас через отправку всей базы данных на удаленный сервер sql.

+0

Это боль, потому что параметры по умолчанию не дают вам рабочего db. вам, по крайней мере, нужно перейти в «Инструменты SMS» -> «Параметры» -> «Обозреватель объектов SQL» -> «Сценарии» и установить «Сгенерировать сценарии для зависимых объектов» и «Индексы скриптов» до «истины» перед экспортом. – jaminto

+0

Кроме того, это медленно. –

8

Официальное слово, которое я получил для поддержки AWS при миграции баз данных SQL с использованием .bak-файлов, заключается в том, что оно не поддерживается. Таким образом, нет более быстрого восстановления из .bak-файлов. Они предложили официальную помощь для миграции существующих баз данных здесь:

Official AWS database migration guide

А также дал мне негласный подмигнул в инструмент миграции данных Azure. Просто используйте его для создания сценария вашей схемы и/или данных и выполните его против вашего экземпляра RDS. Это хороший инструмент. Сначала вам придется импортировать .bak в SQL-сервер, отличный от RDS.

SQL Azure migration tool

+0

теперь вы можете восстановить из файла .bak в RDS - http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/SQLServer.Procedural.Importing.html – jaminto

6

Я написал некоторые инструкции шаг за шагом на how to restore a .bak file to RDS с помощью SQL Azure Migration Tool на основе скринкасте Линн. Это гораздо более простой способ, чем официальные инструкции, и он хорошо работал для нескольких баз данных, которые я перенес.

+0

Это на самом деле один из лучших способов, которыми я пользуюсь сталкиваются - это очень большой позор, что Amazon не поддерживает правильный импорт/экспорт сжатых собственных резервных копий. Наш менеджер по учетным записям в Amazon хорошо знает, что эта проблема знает, что это действительно разоблачает людей - но мы не имеем четкого представления о том, когда/когда это когда-либо будет поддерживаться :( – Kram

+0

Я наткнулся на ваш пост через Google. Удивительно отлично. – David

4

Возможно, вы обнаружите, что формат BACPAC Data-tier Applications предоставит вам наиболее удобное решение. Вы можете использовать Export для создания файла, который содержит как схему базы данных, так и данные. Import создаст новую базу данных, заполненную данными на основе этого файла.

В отличие от операций Backup and Restore, экспорт и импорт не требуют доступа к файловой системе сервера базы данных.

Вы можете работать с BacPac файлами с помощью SQL Server Management Studio или через API в .Net, Powershell, MSBuild и т.д.

Export Data-tier Application Dialog

Обратите внимание, что существуют проблемы с использованием этого метода для экспорта, а затем импортировать от и до Amazon RDS. Поскольку в RDS создается новая база данных, в ней создаются следующие два объекта.

  • Пользователь с членством в роли db_owner.
  • rds_deny_backups_trigger Trigger

The rds_deny_backups_trigger Trigger

Во время импорта, будет конфликт между объектами, включенными в файл BacPac и те, которые добавляются автоматически RDS. Эти объекты присутствуют в файле BACPAC и автоматически создаются RDS при создании новой базы данных.

Если у вас есть экземпляр SQL Server, отличный от RDS, вы можете импортировать BACPAC в этот экземпляр, удалить объекты выше, а затем экспортировать базу данных для создания нового файла BACPAC. У этого нет конфликтов при восстановлении экземпляра RDS.

В противном случае эту проблему можно решить, выполнив следующие шаги.

  1. Редактировать файл model.xml в файле BACPAC (BACPAC - это только zip-файлы).
  2. Удалить элементы со следующими значениями в их атрибутах Type, которые связаны с перечисленными выше объектами (те, которые автоматически добавляются RDS).
    • SqlRoleMembership
    • SqlPermissionStatement
    • SqlLogin
    • SqlUser
    • SqlDatabaseDdlTrigger
  3. Генерирование контрольной суммы для измененной версии файла model.xml с использованием одного из методов ComputeHash на SHA256 класс.
  4. Используйте метод BitConverter.ToString() для преобразования хэша в шестнадцатеричную строку (вам нужно будет удалить разделители).
  5. Замените существующий хеш в элементе Checksum в файле origin.xml (также содержащемся в файле BACPAC) с новым.
  6. Создайте новый файл BACPAC, поместив содержимое оригинала, заменив файлы model.xml и origin.xml на новые версии. НЕ используйте System.IO.Compression.ZipFile для этой цели, поскольку, как представляется, существует некоторый конфликт с созданным zip-файлом - данные не включены в импорт. Я без проблем использовал 7Zip.
  7. Импортируйте новый файл BACPAC, и у вас не должно быть конфликтов с объектами, которые автоматически генерируются RDS.

Примечание: Существует еще одна, связанная с этим проблема с импортом BacPac к RDS с помощью SQL Server Management Studio, который я объясняю here.

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