Я думаю, вы имеете в виду:
WHERE PK > start_value AND PK < end_value
Нет веских оснований для дублирования данных в двух таблицах на одном сервере, поэтому, надеюсь, таблицы находятся на разных серверах.Если вы «архивируете», то имейте в виду, что это неправильно;вместо этого увеличьте скорость стола.См. этот пост .
- Чтобы INSERT-SELECT уничтожил журнал транзакций, который для вас будет работать все медленнее, и запретит другим пользователям использовать базу данных.Если вы разбиваетесь на партии по 1000 строк, это будет быстрее и более общительным.
Я был бы рад, если бы это можно было сделать <4 часа </em>
Должно быть никаких проблем.Зависит от вашего оборудования и расположения дисков.Я могу загрузить 16 миллионов строк за 13,2 секунды на моем небольшом демонстрационном окне с ASE 15.5.
bcp работает в двух режимах, автоматически, в зависимости от следующих условий:
БЫСТРО.для этого требуется установить SELECT_INTO / BULK_COPY sp_dboption, что позволяет bcp НЕ регистрировать INSERTS, только распределения.Также требует удаления индексов на столе (они могут быть созданы после окончания bcp).
SLOW.Любое из вышеперечисленных условий не выполняется.Все ВСТАВКИ зарегистрированы.Убедитесь, что у вас есть порог в журнале, который его сбрасывает (он будет заполняться).
Нет проблем, если файл out_data_file или Table_2 является подмножествомстолбцы таблицы_1.Создайте представление Table_2 на сервере Table_1.Bcp-out мнение.Вы также можете поместить предложение WHERE в представление, выполнить преобразования и т. Д.
Вы можете выполнить bcp параллельно (до количества процессоров / ядер, которые есть в вашей хост-системе),Разделите экстракт на количество параллельных потоков (например, на 8-ядерном компьютере, exec 8 извлекает задания параллельно).Используйте параметры -F и -L, чтобы указать одну восьмую таблицы_1.Используйте «&», если у вас есть файлы o / s и 8 x BAT, если у вас их нет.
Вы также можете запускать (например) 8 x заданий INSERT-SELECT параллельно.Разделить по значению PK, а не по номеру строки.