Очень большой INSERT INTO db2.t SELECT * FROM db1.t
действительно может заполнить ваш журнал транзакций - так как он будет занимать много места до совершения транзакции. Но этот размер зависит от многих факторов - количества строк, размера строк, размера журнала транзакций и т. Д.
Я знаю, что это звучит глупо, но в зависимости от риска вашей среды (и какова вероятность того, что он действительно заполняет журнал транзакций), я мог бы просто пойти на это. Все, что вы рискуете, - это заполнение журнала транзакций, откат транзакции и другие пользователи базы данных, которые будут немного неудобны, пока это пространство не будет освобождено снова. Если это разработка или новая база данных, люди могут не заметить.
Вы можете разделить его на партии «разумного» размера (опять же, это зависит). Если это просто слишком сложно (нет хорошей стратегии разделения), используйте SSIS, выполните передачу и установите предел пакетного принятия.
В любом случае, , если операция прервана, очевидно, что вы будете иметь ACID только в совершенных транзакциях. Иногда проще TRUNCATE таблицы назначения и повторной попытки всей передачи, в зависимости от того, сколько времени (в зависимости от индексов и доступности уникального ключа) может потребоваться, чтобы определить, какие строки были переданы, а какие нет. 1012 *