ERASE DELTA
Содержание раздела
Запрос удаляет закрытые дельты логической базы данных, начиная с указанного момента времени (включительно). Данные, которые стали архивными в этих дельтах, снова становятся актуальными.
Удаленные дельты не могут быть восстановлены средствами системы.
Если нужно удалить данные одной таблицы или представления без удаления информации о дельтах, выполните TRUNCATE ACTUAL.
Момент времени, с которого удаляются дельты, можно указать как номер дельты или дату и время. При обработке запроса с датой и временем система определяет последнюю закрытую на тот момент дельту и удаляет дельты, начиная с нее. Если указаны дата и время до нулевой дельты логической базы данных, в ответе возвращается исключение.
Рекомендуется указывать в запросе номер дельты, а не дату и время. В противном случае нужно учитывать, что каждый повтор запроса с датой и временем удаляет всё более ранние данные.
Например, если в логической БД marketing
две дельты, закрытые в 12 часов (дельта 0) и 15 часов (дельта 1) 1 мая, то первый запрос ERASE DELTA marketing FOR SYSTEM_TIME AS OF '2022-05-01 20:00:00'
удалит дельту 1, а второй такой же запрос удалит дельту 0 (так как она будет последней на этот момент после удаления дельты 1).
В ответе возвращается:
- пустой объект ResultSet при успешном выполнении запроса;
- исключение при неуспешном выполнении запроса.
При успешном выполнении запроса удаляются все изменения, произошедшие с данными логических таблиц и материализованных представлений в логической БД с указанного момента времени по текущий. Из сервисной базы данных удаляется информация о дельтах, и их номера освобождаются. Логические сущности при этом не удаляются.
Если запрос ERASE DELTA
не был успешно завершен, нужно устранить причины сбоя в его работе и повторить запрос. Пока очистка данных не завершилась успешно, открытие новых дельт недоступно.
На рисунке ниже показан пример результата выполнения запроса, удаляющего дельты, начиная с дельты 3. Удаляются все изменения, внесенные в дельтах 3 и 4, а данные дельты 2 вновь становятся актуальными. На рисунке для простоты рассмотрен вариант, когда в дельтах 2-4 были изменения только в одной логической таблице.
Записи журнала имеют привязку к номерам дельт, эта информация является справочной и не используется системой. При выполнении ERASE DELTA
привязка записей к удаленным дельтам остается, что может приводить к нарушениям в хронологии записей.
Например, из-за удаления дельты 2 и 3 журнал может содержать информацию о том, что сущность удалена после второй (существующей) дельты, а создана — после третьей (удаленной) дельты.
Синтаксис
Удаление дельты с указанной дельты:
ERASE DELTA [db_name] FOR SYSTEM_TIME AS OF DELTA_NUM delta_num
Удаление дельт с указанного момента времени:
ERASE DELTA [db_name] FOR SYSTEM_TIME AS OF date_time_expression
Параметры:
db_name
-
Имя логической базы данных. Опционально, если выбрана логическая БД, используемая по умолчанию.
delta_num
-
Номер дельты, начиная с которой удаляются дельты.
date_time_expression
-
Момент времени в формате
'YYYY-MM-DD hh:mm:ss'
, начиная с которого удаляются дельты.
Ограничения
Ограничения выполнения
- Запрос не может быть выполнен при наличии открытой дельты.
- Запрос не может быть выполнен в логической базе данных, в которой есть несинхронизированные материализованные представления.
Ограничения на другие операции
- Во время работы запроса недоступно выполнение запросов BEGIN DELTA, изменение логической схемы данных, а также загрузка и обновление данных.
Другие ограничения
- Запрос не обновляет материализованные представления, которые связаны с очищаемыми таблицами и находятся в других логических базах данных. Такие представления продолжают хранить данные, удаленные из таблиц.
- Удаление данных происходит вне механизма дельт и не может быть отменено.
Примеры
Удаление дельт с указанной дельты
Удаление всех изменений с дельты 3 по текущую дельту:
ERASE DELTA marketing FOR SYSTEM_TIME AS OF DELTA_NUM 3
Удаление дельт с указанного момента времени
Удаление всех изменений с момента 2022-04-10 00:00:00
по текущий момент:
ERASE DELTA marketing FOR SYSTEM_TIME AS OF '2022-04-10 00:00:00'