Возможно, вы обнаружите, что формат BACPAC Data-tier Applications предоставит вам наиболее удобное решение. Вы можете использовать Export для создания файла, который содержит как схему базы данных, так и данные. Import создаст новую базу данных, заполненную данными на основе этого файла.
В отличие от операций Backup and Restore, экспорт и импорт не требуют доступа к файловой системе сервера базы данных.
Вы можете работать с BacPac файлами с помощью SQL Server Management Studio или через API в .Net, Powershell, MSBuild и т.д.
Обратите внимание, что существуют проблемы с использованием этого метода для экспорта, а затем импортировать от и до Amazon RDS. Поскольку в RDS создается новая база данных, в ней создаются следующие два объекта.
- Пользователь с членством в роли db_owner.
- rds_deny_backups_trigger Trigger
Во время импорта, будет конфликт между объектами, включенными в файл BacPac и те, которые добавляются автоматически RDS. Эти объекты присутствуют в файле BACPAC и автоматически создаются RDS при создании новой базы данных.
Если у вас есть экземпляр SQL Server, отличный от RDS, вы можете импортировать BACPAC в этот экземпляр, удалить объекты выше, а затем экспортировать базу данных для создания нового файла BACPAC. У этого нет конфликтов при восстановлении экземпляра RDS.
В противном случае эту проблему можно решить, выполнив следующие шаги.
- Редактировать файл model.xml в файле BACPAC (BACPAC - это только zip-файлы).
- Удалить элементы со следующими значениями в их атрибутах Type, которые связаны с перечисленными выше объектами (те, которые автоматически добавляются RDS).
- SqlRoleMembership
- SqlPermissionStatement
- SqlLogin
- SqlUser
- SqlDatabaseDdlTrigger
- Генерирование контрольной суммы для измененной версии файла model.xml с использованием одного из методов ComputeHash на SHA256 класс.
- Используйте метод BitConverter.ToString() для преобразования хэша в шестнадцатеричную строку (вам нужно будет удалить разделители).
- Замените существующий хеш в элементе Checksum в файле origin.xml (также содержащемся в файле BACPAC) с новым.
- Создайте новый файл BACPAC, поместив содержимое оригинала, заменив файлы model.xml и origin.xml на новые версии. НЕ используйте System.IO.Compression.ZipFile для этой цели, поскольку, как представляется, существует некоторый конфликт с созданным zip-файлом - данные не включены в импорт. Я без проблем использовал 7Zip.
- Импортируйте новый файл BACPAC, и у вас не должно быть конфликтов с объектами, которые автоматически генерируются RDS.
Примечание: Существует еще одна, связанная с этим проблема с импортом BacPac к RDS с помощью SQL Server Management Studio, который я объясняю here.
Вы просто переносите схему базы данных или вам нужно также передавать данные? – JeffO
Тот факт, что это Amazon RDS, не влияет на это. Вы должны помнить, что всякий раз, когда вы обращаетесь к локальной файловой системе, это касается механизма базы данных, на котором запущен T-SQL. В этом случае вы пытаетесь восстановить файл с диска C экземпляра Amazon. Этот файл там не существует. Если возможно, заведите свой файл там или так на сервере, где вы можете получить доступ к нему через UNC.Однако я не удивлюсь, если это невозможно с RDS. –
Jeff O Data также. – darwindave