Я имел дело с миллионами удаления данных в повседневной работе.
В основном у меня есть 4 таблицы.
Table_A
Table_B
Table_C
Table_D
Я пытаюсь удалить данные старше 10дней во всех таблицах.
Возможно, я буду удалять около миллиона в каждой таблице.Я создал хранимую процедуру для выполнения этих операций.
Для удаления данных я выполнил следующие шаги:
Шаг 1. Переместите последние дни (данные, которые я должен сохранить) ввременная таблица
select * into Table_A_Temp
from Table_A
where <<where clause last 10 days to till date>>
Шаг 2: переименование основной таблицы в старую таблицу (таблица со всеми данными дней)
exec sp_rename 'Table_A', 'Table_A_Old'
Шаг 3: переименование временной таблицы в основную таблицу (таблица с данными междупоследние дни до даты)
exec sp_rename 'Table_A_temp', 'Table_A'
Шаг 4: Запрос временной таблицы с временными рамками, если какие-либо новые данные вставляются в процессе копирования
Insert into Table_A
select * from Table_A_old
Шаг 5: Удаление старых таблиц
DROP TABLE Table_A_old
Шаг 6: Создание ключей и ограничений в основной таблице (означает переименованную таблицу)
code to create primary keys and constraints
Проблема:
Если я постоянновставляя данные в таблицу во время выполнения хранимой процедуры, я теряю данные на несколько секунд.
Случай 1: при переименовании таблицы
, когда я переименовываю основную в старую и временную таблицу вmain
Я получаю недопустимую ошибку объекта (эта таблица существует с ошибкой)
Случай 2: две из моих таблиц имеют отношение внешнего ключа
Если я вставляю данные перед созданием ограничений и ключа, я получаю связанные ошибки.
Как обрабатывать и удалятьданные без потери данных.
Пожалуйста, советуйте лучшие практики.