Как проверить поведение двухфазной фиксации в хранимой процедуре? - PullRequest
1 голос
/ 15 июля 2010

эта хранимая процедура выполняет очистку архива:
1) выберите токены из транзакционной БД
2) положить токены в временную таблицу
3) цикл через токены:
3.1) использование токенов из временной таблицы, извлечение данных из транзакционных таблиц и вставка в таблицы в отдельном архиве БД (через федерацию)
3.2) COMMIT вставки.
3.3) затем с помощью того же токена на этот раз удалите данные из транзакции
3.4) COMMIT удаляет.


Двухфазная фиксация позволяет нам иметь только одну фиксацию в конце цикла

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

Ответы [ 3 ]

0 голосов
/ 15 июля 2010

Если у вас есть уникальные ключи, вы можете поставить на место запись, которая может вызвать нарушение дубликата ключа.

0 голосов
/ 23 июля 2010

Надеюсь, это поможет кому-то еще!Я только недавно обнаружил, что лучший способ - через сигналы.В середине фазы удаления я вставил сигнал ошибки, чтобы процесс завершился неудачей на этом токене и вышел из цикла, поэтому он должен откатить все, что было вставлено в фазу вставки для этого токена.

DECLARE rollback_on_token_101 CONDITION FOR SQLSTATE '99001';

в середине цикла фазы удаления

IF TOKEN_SUCCESS_COUNT=100 THEN
  SIGNAL rollback_on_token_101 
  SET MESSAGE_TEXT = 'rolling back on mid-delete phase on token # 101 ';
END IF;
0 голосов
/ 15 июля 2010

, чтобы вызвать ошибку во время выполнения, я обычно вставляю в код SELECT 0/0.просто вставьте это перед COMMIT по вашему выбору и посмотрите фейерверк, который в результате!

...