Репликация Oracle быстро меняющейся таблицы

У меня есть две базы данных oracle 11g: производственная и резервная, где некоторые данные реплицируются с помощью механизма MQ, для остальных мне все еще нужно решение. По сути, мне нужен способ синхронной репликации для столбца в таблице, которая очень быстро обновляется в производственной базе данных. Репликация должна быть мгновенной, поэтому в случае выхода из строя производственной базы данных вся эта информация (этот столбец) должна быть готова и обновлена ​​​​при резервном копировании. Это с одной стороны. С другой стороны, производительность не должна изменяться на производстве во время репликации. В таблице могут быть сотни тысяч строк, не все из них должны быть реплицированы (есть данные IN и данные OUT - только для данных OUT мне нужно, чтобы этот столбец реплицировался при резервном копировании). Я думал о материализованном представлении, триггерах и потоках. Для триггеров все... просто, но некоторые люди говорят, что это не рекомендуется. Я сделал ссылку на базу данных и такой триггер:

after update of column
for each row
update table@backup set column = :NEW.column...

Для материализованного представления... У меня пока нет решения, так как я не знаю, как на самом деле обновить в моей backup.table только последнюю строку, обновленную в production.table, используя записи из materializedview.

Для потоков. Я не знаком с ними и действительно не знаю, смогу ли я реплицировать только изменения в столбце или, лучше, реплицировать всю таблицу, а затем при резервном копировании выполнять некоторые выборки и т. д. и т. д.

Есть идеи? Большое спасибо


person vlucian    schedule 15.04.2014    source источник
comment
Если синхронный действительно означает синхронный, это означает, что вам нужны накладные расходы на выполнение двухэтапной фиксации в базах данных, прежде чем транзакция может быть завершена в первичной. Это идет вразрез с вашим желанием не влиять на производительность основного сервера. Вы можете свести к минимуму влияние на первичный сервер, если хотите реплицировать данные асинхронно и согласиться с тем, что реплика может отставать от основного на несколько секунд. Два ваших требования противоречат друг другу — какое из них победит?   -  person Justin Cave    schedule 15.04.2014
comment
Спасибо за ваш вклад. Трудно решить. Хотелось бы синхронную репликацию и минимальное влияние на производительность. В основной базе данных происходит много всего — мне нужно только обновление этого столбца для репликации на резервном сайте. Конечно, это нужно протестировать и вместе с клиентом решить, можно или нельзя.   -  person vlucian    schedule 16.04.2014


Ответы (2)


Вам, вероятно, понадобится комбинация потоков Oracle и, возможно, захвата измененных данных. Также обратите внимание, что Oracle движется к прекращению поддержки Streams и поощряет будущих пользователей переходить на Goldengate. См. здесь: http://docs.oracle.com/cd/E16655_01/server.121/e17642/deprecated.htm#BABEAJJE

Итак, вот требования, которые я вижу, которые я могу понять:

  1. 100% безошибочная репликация данных.
  2. Не влияет на производительность источника.

Ни один из них недостижим по отдельности, а тем более оба вместе. Репликация любого типа всегда будет иметь задержку между системами в зависимости от загрузки исходной и целевой системы, ввода-вывода, ЦП, сетевого трафика и задержки, коммитов БД и всех этих других вещей. И да, я смешиваю слои в этих элементах, не все из них «яблоки к яблокам», но дело в том, что для репликации должно произойти много вещей.

Я также немного сбит с толку тем, как вы будете переключаться на эту вторичную систему базы данных, если первичная выйдет из строя? Планируете ли вы разрешить запись на вторичный, если первичный не работает? Достаточно ли интеллектуально ваше приложение, чтобы обнаружить сбой основного? Если реальным бизнес-требованием является «приложение должно иметь 99,9% (или любой другой процент) доступности, я не уверен, что репликация является ответом на то, что вы хотите.

Вот что вы можете сделать:

  1. Попросите вашего руководства/бизнес-пользователей определить допустимый уровень простоя. Если они скажут «Нет!» затем перейдите к пункту 2. Иногда люди просят о совершенстве, не задумываясь о бесконечной цене.
  2. Соберите несколько вариантов в презентации и скажите что-то вроде следующего:

«Для НЕПЛАНОВОГО времени простоя в размере 99,9 %, что составляет 45 минут в месяц (31 * 24 * 60 * 0,001), восстановление после аварии занимает 24 часа, а в худшем случае данные теряются до последнего часа. сценарий, тогда мы можем запустить автономный сервер Oracle, иметь под рукой оборудование для резервного копирования, и это будет стоить X долларов / евро / сколько угодно.

Для 99,99% нам нужен второй сервер, на который мы регулярно восстанавливаем резервные копии и т. Д., И это будет стоить 5X.

Для 99,999% нам нужна репликация, несколько мастеров, обновления нашего программного приложения, более высокий уровень тестирования, больше персонала и т. д., и это будет стоить в 10 или 20 раз больше или что-то в этом роде».

Я просто выдумал все эти цифры и сценарии, но вы можете видеть, как это работает. Когда люди сталкиваются с тем, сколько стоит на самом деле делать это — и сколько стоит ЕГО ПОДДЕРЖАНИЕ — они часто меняют свое мнение.

Прежде чем углубляться во все дорогостоящие и болезненные детали, я пытаюсь понять, действительно ли репликация вам необходима. Я работал с реплицированными системами раньше, и я должен предупредить вас, что, хотя предполагается, что они увеличивают время безотказной работы, репликация с потоками и CDC довольно сложна и часто создает совершенно другой набор режимов отказа.

person magnum_pi    schedule 15.04.2014
comment
GoldenGate — это не то, за что вам нужно платить? Мне нужно 0(ноль) RPO - значит RTO не может быть 0 - в зависимости от момента суток может быть час или даже больше. Приложение не умное, вместо этого необходимо выполнять некоторые ручные задания, есть другие системы для сравнения (также вручную), и только после этих проверок можно запустить приложение резервного копирования - ему нужны только 100% (99,999%) правильные бизнес-данные. . Обновления этого столбца, которые мне нужно вывести из производства, используя методы Oracle. Он обновляется с высокой скоростью и в критически важные для бизнеса моменты, поэтому репликация должна выполняться с минимальным воздействием. - person vlucian; 16.04.2014
comment
Я считаю, что Goldengate требует дополнительных лицензионных сборов, если Streams поставляется в комплекте с Oracle, хотя я не смог ничего найти с помощью быстрого поиска в Google. Вот еще пара статей, дающих полезную информацию о Streams и Goldengate с технической точки зрения: databasejournal.com/features/oracle/article.php/3921851/ и blog.mdbbi.com/post/43533069697/ - person magnum_pi; 06.05.2015

Я провел несколько тестов с триггерами, и я обеспокоен тем, что в случае проблемы с подключением между этими двумя базами данных этот триггер «остановит» любую вставку в основную базу данных до тех пор, пока подключение не будет восстановлено. Это можно решить с помощью хранимой процедуры, как здесь:

CREATE OR REPLACE TRIGGER Example
AFTER INSERT ON Emp_tab
FOR EACH ROW
BEGIN
   Insert_row_proc;
END;

CREATE OR REPLACE PROCEDURE Insert_row_proc AS
BEGIN
    INSERT INTO Emp_tab@Remote
    VALUES ('x');
EXCEPTION
   WHEN OTHERS THEN
       INSERT INTO Emp_log
       VALUES ('x');
END;

Тем не менее, мой вопрос: стоит ли доверять этому триггеру или использовать потоки (опять же, я еще не знаю, смогу ли я реплицировать только один столбец с использованием потоков). Спасибо.

person vlucian    schedule 24.04.2014