У меня есть большая (из десятков миллионов записей) база данных, для которой я собираюсь выполнить полное резервное копирование базы данных .
Однако база данных достаточно велика, чтобы транзакции могли начинаться до и во время, а также фиксироваться во время и после выполнения резервного копирования.
Например:
T0 = Transaction A start
T1 = Full database backup start
T2 = Transaction B start (will not deadlock with A)
T3 = Transaction A commit/rollback (does not matter, does it?)
T4 = Full database backup end
T5 = Transaction B commit/rollback (again, does not matter, does it?)
T0 T1 T2 T3 T4 T6
||----------||----------||----------||----------||----------||---------->
Насколько я понимаю, во время резервного копирования блокировки не используются (хотя могут возникнуть другие проблемы с производительностью, скажем, из-за высокого ввода-вывода) , но я не уверен, что я могу гарантировать, что будет зафиксировано или нет.
Кроме того, меня беспокоит не то, что база данных будет в несовместимом состоянии, а скорее, каким будет это состояние (даже если оно не является детерминированным, если есть набор правил, которые можно последовательно применять) и как оно туда попало ( например, какая часть файла данных используется вместе с журналом транзакций для создания файла резервной копии)?