|
|
| Строка 1: |
Строка 1: |
| − | | + | [[Однонаправленная репликация между двумя базами|Однонаправленная репликация между двумя базами (постановка)]]. |
| − | | + | |
| − | ==== Однонаправленная репликация между двумя базами ====
| + | |
| − | | + | |
| − | Рассмотрим вариант однонаправленной репликации между двумя базами A и B. База B работает в режиме только для чтения. Все изменения осуществляются на базе A. В дальнейшем, мы будем использовать термины "Исходная база" для базы А и "Конечная база" для B.
| + | |
| − | | + | |
| − | Базы обмениваются между собой сообщениями. Канал связи между базами может быть непостоянным. Т.е. база A может посылать сообщения в тот момент, когда база B недоступна и наоборот. Порядок выполнения действий над объектами на базе A должен сохраняться при переносе на базу B. Транспорт передачи сообщений не гарантирует нам ни сохранности и целости конкретного сообщения, ни сохранения порядка при передаче нескольких сообщений.
| + | |
| − | | + | |
| − | В начальный момент времени базы данных находятся в идентичном состоянии.
| + | |
| − | | + | |
| − | Фиксирование изменений, произведенных в базе A, осуществляется в логе, специальной таблице. В логе фиксируется тип и идентификатор объекта, вид операции, порядковый номер изменения. Заполнение лога осуществляется с помощью системы триггеров.
| + | |
| − | | + | |
| − | Запись в логе находится в определенном состоянии.
| + | |
| − | | + | |
| − | Первоначальное состояние -- L (Logged). Записи с таким статусом считаются подготовленными к отправке.
| + | |
| − | | + | |
| − | Объект может быть заблокирован, состояние B (Blocked) записи в логе. В этом случае он не передается, а так как мы не можем нарушать последовательность выполнения операций на конечной базе данных, то нет смысла передавать операции после заблокированной записи. Пользователь должен быть уведомлен о том, какая именно запись вызвала остановку процедуры передачи данных.
| + | |
| − | | + | |
| − | Поскольку мы не храним полного состояния объекта в логе, а только ссылку на него, то любое последующее изменение объекта должно быть заблокировано, пока предыдущие изменения не будут успешно переданы на конечную базу данных. Исключение составляют два и более последовательных изменения одного и того же объекта.
| + | |
| − | | + | |
| − | Последовательность обмена сообщениями между исходной и конечной базами данных выглядит следующим образом:
| + | |
| − | | + | |
| − | # Исходная база проверяет лог. При наличии записей в состоянии L формируется пакет и передается на конечную базу данных.
| + | |
| − | #
| + | |
| − | | + | |
| − | | + | |
| | | | |
| | [[Category:Постановка]] | | [[Category:Постановка]] |