В MS База данных SQL 2012, как вставить очень большие данные таблицы в блоки

Я должен заархивировать большие блоки информации в SQL Server 2012 путем перемещения данных в новую таблицу, не блокируя других пользователей от использования исходной таблицы. Лучший способ состоит в том, чтобы сделать это использование инструкции циклов T-SQL или является там лучшим способом сделать это?

-2
задан 7 January 2015 в 20:27
1 ответ

Как это сделать, как вы просите:

Создайте вторую таблицу, точно такую ​​же, как и первую.

Найдите столбец - возможно, датированный? - -и используйте это, чтобы скопировать разумное количество данных во вторую таблицу. («Разумно» - это произвольное значение, зависящее от размера данных и количества времени, которое требуется.) Затем выполните второй запрос, чтобы удалить те же данные из первой таблицы. Имейте в виду, что второй запрос - это блокирующий запрос, то есть он не позволит никому использовать таблицу. Другими словами, проблема заключается во втором запросе, а не в первом.

В итоге я сделал следующее:

  1. создал временную таблицу (идентификатор int, второй столбец назван в честь PK первой таблицы и того же или совместимого тип данных).
  2. выберите первичный ключ, где дата от (диапазон) до временной таблицы
  3. Цикл через временную таблицу (выберите автонумерацию, удалите из первой таблицы, где PK = тот, что во временной таблице).

Это займет длиннее обычного удаления, но не блокируется.

Как я рекомендую это сделать:

Вот что я собираюсь начать делать:

  1. Создать новую таблицу, пустую, но в остальном точно такую ​​же, как старую таблицу.
  2. Создать задание для переименования старой таблицы (из data в data-201412) и переименования новой таблицы со старым именем (из data-new в data).
  3. Запланируйте его запуск, пока я хожу на новогоднюю вечеринку.

(Фактически,Я собираюсь получить совершенно новую базу данных, но достаточно близко.)

3
ответ дан 5 December 2019 в 21:12

Теги

Похожие вопросы