Миграция с файлового потока на "классический" блоб
Я подумываю переместить базы данных всех моих клиентов в SQL Azure. Я использую одно поле FILESTREAM для хранения файлов в BLOB-объектах (не для производительности на больших BLOB-объектах), а просто потому, что я использую Express Edition и поэтому использую Filestream, чтобы не превышать ограничение размера Express DB).
У меня есть эта таблица, поле DOCUMENT содержит данные файлового потока, а поле GUID необходимо для реализации файлового потока:
CREATE TABLE [dbo].[DOC_FILES](
[ID_DOC_FILE] [int] NOT NULL,
[DOCUMENT] [varbinary](max) FILESTREAM NULL,
[GUID] [uniqueidentifier] ROWGUIDCOL NOT NULL
CONSTRAINT [PK_DOC_FILES] PRIMARY KEY CLUSTERED
(
[ID_DOC_FILE] ASC
) ON [PRIMARY] FILESTREAM_ON [MyFileStreamFileGroup],
UNIQUE NONCLUSTERED
(
[GUID] ASC
) ON [PRIMARY]
) ON [PRIMARY] FILESTREAM_ON [MyFileStreamFileGroup]
Как удалить файловый поток наилучшим образом?
Одна техника, которую я имею в виду, это просто:
1) переименование поля DOCUMENT в DOCUMENT_TEMP
2) создание нового поля DOCUMENT (не FILESTREAM) varbinary(max)
3) копировать и удалять из DOCUMENT_TEMP в DOCUMENT по одному
4) изменение таблицы для удаления файлового потока [ЭТО НЕ ЯСНО ДЛЯ МЕНЯ]
Можете ли вы предложить?
2 ответа
Как объяснено [ЗДЕСЬ][1], процедура полного удаления файлового потока после удаления всех столбцов файлового потока:
1) Отключение таблиц от файловых групп FILESTREAM
2) Удаление файлов файловой группы FILESTREAM
3) Удаление файловых групп FIELSTREAM
(подробности см. в статье)
[1]: http://beyondrelational.com/blogs/jacob/archive/2010/03/11/completely-removing-filestream- features-from-a-sql-server-2008-database.aspx
Когда вы создаете таблицы в Azure, просто создайте их как varbinary(max) и используйте SSIS или мастер импорта / экспорта для перемещения данных.
Если вы хотите преобразовать существующую базу данных в нативный varbinary, вам необходимо следовать базовой концепции, изложенной выше.
- Добавить новый столбец Document_temp
- Обновить таблицу, копируя данные из Document в Document_temp
- Удалить столбец документа
- Переименуйте столбец document_temp в документ.
- Удалите Guid, если он вам не нужен (выход из него не вреден).