Основные рекомендации по массовому импорту данных
Команду bcp, инструкцию BULK INSERT или функцию OPENROWSET(BULK) можно использовать только для массового импорта из файла данных.
Примечание |
---|
Однако можно написать пользовательское приложение, которое будет выполнять массовый импорт из объектов, отличных от текстовых файлов. Чтобы выполнить массовый импорт из буферов памяти, можно использовать либо расширения bcp API-интерфейса собственного клиента SQL Server (ODBC), либо интерфейс OLE DB IRowsetFastLoad. Чтобы выполнить массовый импорт из таблицы данных C#, необходимо использовать API-интерфейс ADO.NET для операций массового копирования SqlBulkCopy. |
Примечание |
---|
Массовый импорт данных в удаленную таблицу не поддерживается. |
При массовом импорте данных из файла данных в экземпляр Microsoft SQL Server следует руководствоваться следующими правилами.
Получите необходимые разрешения для учетной записи пользователя.
Учетная запись пользователя, от имени которой выполняются программа bcp, инструкции BULK INSERT или INSERT... SELECT * FROM OPENROWSET(BULK...), должна иметь соответствующие разрешения для таблицы (назначаемые владельцем таблицы). Дополнительные сведения о необходимых для каждого метода разрешениях см. в разделах Программа bcp, OPENROWSET (Transact-SQL) и BULK INSERT (Transact-SQL).
Используйте модель восстановления с неполным протоколированием.
Данное правило относится к базам данных, использующим модель полного восстановления. Эта модель восстановления полезна при выполнении массовых операций в неиндексированной таблице (куче). Восстановление с неполным протоколированием позволяет избежать переполнения журнала транзакций, поскольку при этом не выполняется операция записи в журнал для вставок отдельных строк. Дополнительные сведения о модели восстановления с неполным протоколированием см. в разделе Резервное копирование с использованием модели восстановления с неполным протоколированием.
Рекомендуется настроить базу данных на использование модели восстановления с неполным протоколированием до операции массового импорта. Сразу же необходимо переключить базу данных на модель полного восстановления. Дополнительные сведения см. в разделе Особенности переключений между моделью полного восстановления и моделью восстановления с неполным протоколированием.
Примечание Дополнительные сведения об уменьшении объемов ведения журнала при выполнении массовых операций см. в разделе Предварительные условия для минимального ведения журнала массового импорта данных.
Резервное копирование после массового импорта данных.
Для баз данных, использующих простую модель восстановления, после выполнения операции массового импорта рекомендуется создание полной или разностной резервной копии. Дополнительные сведения см. в разделе Создание полных и разностных резервных копий базы данных SQL Server.
Чтобы произвести полное восстановление или восстановление с неполным протоколированием, достаточно создать резервную копию журнала. Дополнительные сведения см. в разделе Создание резервных копий журналов транзакций.
Удаление индексов таблиц для улучшения производительности при выполнении больших операций массового импорта.
Данное правило справедливо при импорте большого объема данных по сравнению с объемом данных, уже находящимся в таблице. В этом случае удаление индексов из таблицы до выполнения операции массового импорта позволит существенно повысить производительность.
Примечание Однако если меньший объем загружаемых данных уже находится в таблице, то удаление индексов, наоборот, понизит производительность. В этом случае восстановление индексов может занять больше времени, чем будет сэкономлено во время операции массового импорта.
Дополнительные сведения см. в разделе Оптимизация производительности массового импорта данных.
Найдите и удалите скрытые символы в файле данных.
Многие программы и текстовые редакторы отображают скрытые символы, находящиеся обычно в конце файла данных. Во время операции массового импорта скрытые символы в файле данных в формате ASCII могут привести к появлению сообщения об ошибке «Обнаружено непредвиденное значение NULL». Чтобы решить проблему, обычно необходимо найти и удалить все скрытые символы.
См. также