Как вставить существующие документы, хранящиеся в NFTS, в хранилище файлового потока sql сервера - PullRequest
1 голос
/ 19 мая 2010

Я занимаюсь расследованием файлового потока (запрашиваю стекопоток при чтении технических документов и поиске в Google), в моем текущем сценарии документы обрабатываются следующим образом:

1) У меня есть таблица БД, где я храню идентификатор документа и путь к документу (например, \ fileserver \ DocumentRepository \ file000000001.pdf)

2) У меня есть папка с документами (\ fileserver \ DocumentRepository), в которой я храню документы

Конечно, мне нужно изменить это на хранилище varbinary (max) / filestream.

Как лучше всего выполнить эту задачу?

Можно ли сказать, что "\ fileserver \ DocumentRepository \ file000000001.pdf" назначено для поля varbinary (max) или я должен явно его вставить? Так что как-нибудь передайте в поле varbinary (max): «теперь вы указатель на существующий документ».

1 Ответ

2 голосов
/ 19 мая 2010

Нельзя назначить существующий файл значению varbinary (max) / filestream. Вы должны явно вставить его.

При этом, если по какой-то причине это не вариант для вас (например, вы не можете позволить себе копировать огромные объемы данных или столкнетесь с проблемой дискового пространства при копировании), есть некоторые хаки, которые могут выполнить миграцию с 0 -копию. Хитрость заключается в том, чтобы сделать следующие шаги:

  1. Переключение БД на простую модель восстановления.
  2. Вставьте файлы-заполнители для всех файлов, которые вы собираетесь перенести. При вставке используйте varbinary значение 0x. При вставке соберите пары (идентификатор документа / путь к файлу) => (имя файла файлового потока).
  3. Остановите сервер Sql.
  4. Перезаписать пустые файлы файлового потока настоящими документами (используйте перемещения / жесткие ссылки, чтобы избежать копирования данных).
  5. Запустите Sql Server, выполните некоторые проверки работоспособности (DBCC) и запустите новую цепочку резервного копирования.

Очевидно, что этот взлом не рекомендуется и может привести к повреждению базы данных. :)

...