Имеет ли представление ЛЮБОЙ вид уникального идентификатора / ключа-кандидата? Если это так, вы можете выбрать эти строки в рабочую таблицу, используя:
SELECT key_columns INTO dbo.temp FROM dbo.HugeView;
(Если это имеет смысл, возможно, поместите эту таблицу в другую базу данных, возможно, с моделью восстановления SIMPLE, чтобы предотвратить вмешательство журналов в вашу основную базу данных. В любом случае это должно генерировать гораздо меньше журналов, и вы можете освободить место в другой базе данных перед возобновлением, если проблема в том, что у вас недостаточно места на диске.)
Затем вы можете сделать что-то вроде этого, вставляя 10000 строк за раз, и резервное копирование журнала между:
SET NOCOUNT ON;
DECLARE
@batchsize INT,
@ctr INT,
@rc INT;
SELECT
@batchsize = 10000,
@ctr = 0;
WHILE 1 = 1
BEGIN
WITH x AS
(
SELECT key_column, rn = ROW_NUMBER() OVER (ORDER BY key_column)
FROM dbo.temp
)
INSERT dbo.PrimaryTable(a, b, c, etc.)
SELECT v.a, v.b, v.c, etc.
FROM x
INNER JOIN dbo.HugeView AS v
ON v.key_column = x.key_column
WHERE x.rn > @batchsize * @ctr
AND x.rn <= @batchsize * (@ctr + 1);
IF @@ROWCOUNT = 0
BREAK;
BACKUP LOG PrimaryDB TO DISK = 'C:\db.bak' WITH INIT;
SET @ctr = @ctr + 1;
END
Это все, что у меня в голове, так что не руби / вставляй / беги, но я думаю, что общая идея есть.
Обратите внимание, что если вы регулярно делаете резервные копии базы данных и журналов, вам, вероятно, захочется взять полный архив, чтобы снова начать цепочку журналов.