Каков наилучший способ скопировать миллионы строк из одной базы данных сервера SQL в другую? - PullRequest
2 голосов
/ 03 июля 2010

У меня есть одна база данных, в которую ежедневно добавляется миллион строк.Каждый день я хотел бы выполнить запрос, чтобы вытащить миллион самых старых строк (оставив около десяти миллионов в базе данных), а затем переместить их в архивную базу данных.

Существуют хорошо документированные способы сделать этос сервером sql (bcp, openrowset и т. д.), но, насколько я могу судить, все эти методы берут все строки из файла данных.Я только хочу скопировать подмножество строк и не могу найти быстрых способов сделать это.

Ответы [ 2 ]

2 голосов
/ 17 февраля 2011

Самый простой способ сделать это с помощью запроса, который использует полностью определенные имена

INSERT INTO ArchiveDatabase..TableName 
SELECT * 
FROM ProductionDatabase..TableName
WHERE EntryDate <= dateadd(mm, -6, current_timestamp) 

Чтобы скопировать большие объемы данных, часто лучше сделать это "на основе чанков".Самый простой способ сделать это в чистом TSQL выглядит следующим образом:

DECLARE @rowcount int
  SET @rowcount = 1
  WHILE @rowcount <> 0
    BEGIN 
      INSERT INTO ArchiveDatabase..TableName 
      SELECT TOP (100000) * 
      FROM ProductionDatabase..TableName
      WHERE EntryDate <= dateadd(mm, -6, current_timestamp) 
      SET @rowcount = @@ROWCOUNT
    END

В основном ограничьте запрос до 100 тыс. Строк с помощью предложения SELECT TOP() и продолжайте цикл, пока не будет скопировано больше записей.(@@ROWCOUNT возвращает количество затронутых записей.)

Если базы данных расположены на разных серверах SQL, вы можете настроить «Связанный сервер» и добавить ссылку на сервер к имени объекта.Формат полного имени объекта: <Server>.<Database>.<Owner>.<Object>

2 голосов
/ 03 июля 2010

Я бы предложил рассмотреть пакет служб SSIS.Вы можете точно контролировать, какие строки копируются, вы можете делать это в выбранных вами размерах транзакций и выполнять быструю массовую вставку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...