Назад | Перейти на главную страницу

Переход с файлового потока на «классический» BLOB-объект

Я рассматриваю возможность перевода всех баз данных моих клиентов на SQL Azure. Я использую одно поле FILESTREAM для хранения файлов в больших двоичных объектах (не для повышения производительности с большими двоичными объектами), а просто потому, что я использую 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) изменение таблицы для удаления файлового потока [ЭТО НЕ Ясно]

Не могли бы вы предложить?

Как объяснено [ЗДЕСЬ] [1], процедура полного удаления файлового потока после удаления всех столбцов файлового потока следующая:

1) Отделение таблиц от файловых групп FILESTREAM

2) Удаление файлов файловой группы FILESTREAM

3) Удаление файловых групп FIELSTREAM

(подробности см. в статье)

[1]: http://beyondrelational.com/blogs/jacob/archive/2010/03/11/completely-removing-filestream- особенности-из-sql-server-2008-database.aspx

Когда вы создаете таблицы в Azure, просто создайте их как varbinary (max) и используйте SSIS или мастер импорта / экспорта для перемещения данных.

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

  1. Добавить новый столбец Document_temp
  2. Обновить таблицу, копирующую данные из документа в Document_temp
  3. Отбросьте столбец документа
  4. Переименуйте столбец document_temp в document.
  5. Удалите Guid, если он вам не нужен (оставить его нет ничего страшного).