Азбука BCP
Страница 3. Быстрое массовое копирование


 

Быстрое массовое копирование

Если база данных, в которую копируются данные, отвечает двум важным условиям, BCP может осуществлять наиболее быстрое и эффективное массовое копирование. Во-первых, для базы данных должна быть включена опция массового копирования. Для SQL Server 7.0 откройте Enterprise Manager, щёлкните правой кнопкой мыши по базе данных, в которую или из которой будет осуществляться копирование, и выберите Properties в выпадающем меню. После того, как появляется диалоговое окно Properties, откройте закладку Options, чтобы определить, активизирована ли опция Select into/bulk copy. Для SQL Server 2000 должна быть указана Simple или Bulk-Logged Recovery model. Во вторых, используемые для вставки данных из файла таблицы не должны иметь индексов. В этом также можно убедиться с помощью Enterprise Manager: перейдите к принимающей данные таблице, щёлкните по ней правой кнопкой мыши, и выберете из меню пункт All Tasks, а потом Manage indexes. Вы можете временно удалить имеющиеся индексы в окне Manage indexes. Если таблица новая, Вы можете не создавать индексы, пока не скопируете в неё с помощью BCP данные.

Когда Вы копируете данные в новую базу, эти два условия не сложно выполнить. Однако, для промышленных баз данных, которые интенсивно используют прикладные программы, Вы можете столкнуться с невозможностью использования такого подхода, поскольку BCP не регистрирует вставку строк в transaction log. Вы не сможете полностью откатить изменения в данные, если произойдёт сбой в работе BCP. Поэтому, Вы должны быть внимательным при использовании BCP, когда заполняете таблицы, к которым обращаются прикладные программы, и возможно Вам придется рассмотреть другие возможности для импорта данных. Также Вы должны тщательно обдумать изменение установок промышленной базы данных. Активизация опции базы данных Select into/bulk copy не позволит восстановить операции массового копирования из резервных копий transaction log, сделанных после последнего, полного резервного копирования базы данных. Хотя Вы можете использовать BCP, чтобы передать несколько таблиц в другую базу данных, если Вы хотите осуществить перенос таблиц с максимальной скоростью, таблицы для размещения данных должны удовлетворять этим двум условиям.

Поскольку BCP не создаёт объекты базы данных, чтобы создать таблицы для загрузки данных, Вы должны сгенерировать их SQL-скрипты на исходной базе данных. Вы можете легко сгенерировать эти SQL-скрипты в Enterprise Manager: перейдите в исходную базу данных, щёлкните по ней правой кнопкой мыши и выберите Generate SQL Scripts из меню All Tasks. После этого, выберите необходимые объекты на закладке General и проверьте на закладке Formatting, что для каждого из выбранных объектов в генерируемом скрипте будут только команды CREATE. Если в скрипт попадут команды DROP, это значит, что объекты вначале будут уничтожены, т.ч. лучше удаление объектов сделать вручную.
Кроме того, в закладке Options, нужно проверить, что параметры: Script indexes, Script triggers и Script PRIMARY Keys, FOREIGN Keys, Defaults и Check Constraints активизированы.

После всего этого можно сохранить получившийся SQL-скрипты в файл, щёлкнув OK. Если Вы хотите предварительно увидеть скрипт, щёлкните Preview на вкладке General. И, наконец, чтобы создать необходимые таблицы и другие объекты в базе данных, куда будут копироваться данные, Вы должны запустить там эти SQL-скрипты на исполнение. Т.е. Вы должны открыть Query Analyzer, а затем выполнить команды CREATE TABLE из SQL-скриптов. Лучше сгруппировать команды CREATE TABLE вверху скрипта и выполнить их отдельно, потому что, если выполнить ещё и создание индексов, невозможно будет добиться быстрого массового копирования в новые таблицы.

После того, как Вы создали таблицы в базе данных, Вы можете без опаски использовать BCP для поочерёдного массового копирования таблиц исходной базы данных в файлы. Если Вы копируете данные между SQL серверами, логично использовать родной для них native-формат файлов, который в этом случае будет наиболее эффективен. После этого, все файлы, которые Вы только что создавали, могут быть также поочерёдно загружены в базу данных с вновь созданными таблицами. После завершения копирования данных, Вы можете запустить на исполнение в импортирующей базе данных оставшиеся команды из SQL-скриптов, которые были сгенерированы ранее. Эти команды создадут все ограничения ключей, триггеры и индексы, которые были у исходных таблиц, но не были ещё созданы для новых.

 
« Предыдущая статья   Следующая статья »