Базы данных Oracle - статьи



             

Применение изменений


Когда поток достигает Staging Area целевой БД, на него “набрасываются” Apply процессы этой целевой БД (если они там имеются), подписавшиеся на этот поток Они извлекают предназначенные для данного узла элементы потока и применяют их к своей БД. Apply процессов в БД может быть несколько. Для извлечения пользовательских сообщений из потока пишутся пользовательские Apply процессы, которые явно извлекают сообщения из потока (очереди). Эти пользовательские приложения пишутся на Java (JMS), C, PL/SQL, SOAP (XML/HTTP), XML/SMTP.

Более интересны, однако, автоматически срабатывающие т н “дефолтные” Apply процессы. Они читают LCRы из потока, преобразуют их в команды DML или DDL и автоматически применяют эти SQL команды к БД. Причем команды SQL могут применяться как к таблицам и объектам локальной БД, так и через Database Link и шлюз (Gateway) к таблицам чужих (не Oracle) СУБД.

Поскольку целевая БД кроме участия в обмене информацией может быть открыта для изменений другими приложениями, мы можем получить ситуацию, когда одни и те же данные одновременно изменены и в исходной и в целевой БД. Т. е. мы сталкиваемся с конфликтами обновления и должны уметь их разрешать. Oracle Streams умеет автоматически определять и разрешать такие конфликты. Имеется ряд стандартных механизмов разрешения конфликтов (берется минимальное или максимальное значение, последнее по времени изменение и т д), можно написать свои собственные процедуры разрешения конфликтов.

Для ускорения работы по применению изменений к БД Apply процесс фактически выступает в роли координатора этой работы. Он порождает параллельно работающие подпроцессы, которые читают LCRы из потока, собирают их в транзакции, а потом параллельно применяют к БД. Если в потоке сосуществуют LCRы из разных узлов, захваченные разными Capture процессами, то для их применения в данном узле надо создать несколько Apply процессов (для каждого Capture – свой Apply).

Кроме того, “дефолтный” Apply процесс может не только формировать команды SQL на основе LCRов, но и выполнять более сложную обработку. В этом случае для него указывается имя пользовательской Apply функции, которая получает LCRы, обрабатывает их и применяет к БД. Эти функции можно писать на PL/SQL, Java, C, C++. Такие функции кроме применения LCR к БД могут, например, выполнять дополнительные преобразования данных, исключать из изменения некоторые колонки, нормализовывать/денормализовывать данные, записывать дополнительную информацию в другие колонки и таблицы (не указанные в LCR) и т д.




Содержание  Назад  Вперед