Попытка реплицировать данные в базу данных реплики (цель) из исходной БД, используя Oracle Golden Gate (OGG). Скажем, у меня есть TableA и B в исходной БД. A имеет столбец идентификаторов, управляемый триггером, который добавляет уникальный номер с помощью объекта последовательности (старый способ Oracle, до 12 C). Таблица B имеет столбец идентификаторов как «GENERATE ALWAYS AS IDENTITY ...», путь появился заново в 12 C. Теперь ниже мое наблюдение, за которым следует вопрос: (A) SourceDB TableA, вставьте 1 запись, id = 1. Затем в TargetDB TableA OGG реплицирует 1 вставку, id = 1. Хорошо.
Source A------------------------------------Target A
id=1----------------------------------------id=1
(B) В TargetDB вручную вставьте 1 запись, все будет готово, id = 3. Хорошо. Здесь id должно было быть 2, но OGG пропускает 2 и устанавливает id этой вновь добавленной записи в целевую таблицу как 3.
Source A------------------------------------Target A
id=1----------------------------------------id=1
.-------------------------------------------id=3
(C) SourceDB TableA, вставьте 1 запись, id = 2. Затем в TargetDB TableA OGG реплицирует 1 вставку, id = 2. Хорошо.
Source A------------------------------------Target A
id=1----------------------------------------id=1
.-------------------------------------------id=3
id=2----------------------------------------id=2
Итак, не считая хорошего поведения OGG, он выглядит неплохо! Но когда то же самое я пытаюсь сделать с TableB, это дает мне уникальную ошибку ограничения на шаге B !! Это похоже на то, что в таблице B столбец идентификаторов определен как «Создавать всегда как идентификатор». Так это действительно из-за этого? И этот новый способ вызывает больше проблем, чем старый способ использования объекта sequence.nextValue для создания нового столбца уникального идентификатора. Или в OGG есть способ преодолеть это и заставить эту таблицу B вести себя так же, как таблица A, для шага B?