Это не прямой способ T-SQL. Хотя он создает чистое решение T-SQL, которое вы можете применить к своей БД.
Ваши результаты могут отличаться в зависимости от вашей БД... Например, плохая ссылочная целостность может сделать это немного сложнее..
Также это идет с отказом от ответственности ДЕЛАТЬ НА СВОЙ СОБСТВЕННЫЙ РИСК :-)
- Получите базу данных, которую вы хотите перенести в проект SSDT
http://msdn.microsoft.com/en-us/library/azure/jj156163.aspx http://blogs.msdn.com/b/ssdt/archive/2012/04/19/migrating-a-database-to-sql-azure-using-ssdt.aspx а>
Это хороший способ перенести любую схему в Azure, несмотря ни на что... Это намного лучше, чем просто создание файла bacpac... исправление... экспорт... исправление... и т. д. Так что я рекомендую делать это в любое время. перенести БД в Azure
Для исправления FILLFACTOR я просто использовал поиск и замену, чтобы удалить все FILLFACTORS из сгенерированных файлов схемы... К счастью, в БД, которую я использовал, все они были установлены на 90, поэтому было довольно легко найти и заменить решение ( CTRL-SHIFT-F)... Если у вас разные, вы, вероятно, можете использовать функции поиска RegEx в Visual Studio, чтобы найти все факторы заполнения и просто удалить их из индексов.
Я не так хорош в RegEx, но я думаю, что это работает
WITH \((.)*FILLFACTOR(.)*\)
На этом этапе вам нужно будет исправить любые дополнительные исключения, связанные с соответствием требованиям Azure. Предоставленные ссылки описывают, как это сделать.
- Теперь, когда у вас есть проект SSDT, совместимый с AZURE SQL.
А вот и ЧАСТЬ ДЕЛАТЬ НА СВОЙ СОБСТВЕННЫЙ РИСК
Я использовал эти скрипты для удаления всех FK, PK и уникальных ограничений из БД.
while(exists(select 1 from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where CONSTRAINT_TYPE IN ('FOREIGN KEY', 'PRIMARY KEY', 'UNIQUE')))
begin
declare @sql nvarchar(2000)
SELECT TOP 1 @sql=('ALTER TABLE ' + TABLE_SCHEMA + '.[' + TABLE_NAME
+ '] DROP CONSTRAINT [' + CONSTRAINT_NAME + ']')
FROM information_schema.table_constraints
WHERE CONSTRAINT_TYPE IN ('FOREIGN KEY', 'PRIMARY KEY', 'UNIQUE')
exec (@sql)
end
declare @qry nvarchar(max);
select @qry =
(SELECT 'DROP INDEX [' + ix.name + '] ON [' + OBJECT_NAME(ID) + ']; '
FROM sysindexes ix
WHERE ix.Name IS NOT null and ix.OrigFillFactor <> 0
for xml path(''));
exec sp_executesql @qry
Я делаю это, потому что, насколько мне известно, единственный способ полностью удалить параметр коэффициента заполнения — удалить и заново создать индекс. Это связано с каскадным набором проблем: - / PK с коэффициентами заполнения требуют отбрасывания FK и т. Д. Возможно, есть более разумный способ сделать это, чтобы вы не удаляли ВСЕ FK и PK, а вы смотрите на деревья зависимостей. ..
Теперь вернитесь к своему проекту SSDT, совместимому с Azure, и выполните СРАВНЕНИЕ СХЕМЫ этого проекта с вашей БД... Это создаст сценарий, который воссоздает все ваши FK, PK и уникальные ограничения (без коэффициента заполнения).... В в этот момент вы можете просто нажать «обновить» или нажать кнопку справа от обновления, которая сгенерирует скрипт, который вы можете использовать ... Итак, теперь вооружитесь
- the script above to remove FKs, Pks, and Unique.
- Скрипт, созданный SSDT
- Тщательное тестирование и обзор указанных сценариев, чтобы убедиться, что ничего не было упущено.
Вы должны иметь возможность обновить текущую БД до схемы, совместимой с Azure.
Дополнительные мысли:
В моем случае коэффициенты заполнения в производственной базе данных не принесли никакой пользы. Они были просто созданы по умолчанию. В вашем случае могут быть важны коэффициенты заполнения, поэтому не удаляйте их все из рабочей среды, отличной от Azure, не зная последствий.
Есть дополнительные вещи, которые следует учитывать при выполнении этого в производственной системе... Например, это может привести к некоторым задержкам зеркального отображения и может привести к тому, что ваши файлы журналов будут расти не так, как вы ожидаете. Которые оба действительно имеют значение, только если вы подаете заявку непосредственно на производство...
Было бы неплохо, если бы установка их всех на FILL FACTOR 100 работала :-/
Существуют сторонние инструменты (как я слышал), которые можно использовать для миграции в Azure...
Другой вариант — использовать https://sqlazuremw.codeplex.com/.
Используйте это, чтобы создать СХЕМУ, совместимую с Azure, а затем использовать BCP для копирования всех данных.
НО, если вы хотите сделать свою текущую СХЕМУ совместимой с Azure, чтобы вы могли создать файл bacpac для загрузки в Azure, это сработало для меня один раз, когда мне пришлось это сделать.
EDIT: Azure V12 поддерживает коэффициенты заполнения.
person
Shane Neuville
schedule
28.12.2014