Oracle GoldenGate Когда столбец таблицы генерируется всегда, идентификатор type_IT не позволяет вставлять в целевую таблицу БД - PullRequest
0 голосов
/ 03 августа 2020

Попытка реплицировать данные в базу данных реплики (цель) из исходной БД, используя 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?

1 Ответ

1 голос
/ 03 августа 2020

Давайте разделим ваш вопрос на два сценария ios:

ПОСЛЕДОВАТЕЛЬНОСТИ

Для последовательности вы можете реплицировать ТОЛЬКО в одностороннем порядке. Это означает, что вы не можете реплицировать последовательность при двусторонней или многосторонней репликации. Вы можете выполнять репликацию ТОЛЬКО в режиме высокой доступности «активный-пассивный», но не в режиме «активный-активный». Вам необходимо отключить репликацию последовательностей:

  • Исключение захвата последовательности из захвата (извлечения) с помощью TABLEEXCLUDE.
  • Отключение триггеров, обрабатывающих последовательности с DBOPTIONS SUPRESSTRIGGERS в доставке (REPLICAT

Во время репликации Oracle GoldenGate фиксирует обновления последовательности и проверяет, что значение целевой последовательности равно или превышает исходный порядковый номер:

  • Если в последовательности указана опция NOCACHE, запись данных будет отображаться в следе GoldenGate каждый раз, когда последовательность обновляется.
  • Если для последовательности задана опция CACHE, запись данных будет отображаться в следе GoldenGate каждый раз при обновлении максимальной отметки.

ИДЕНТИФИКАЦИОННЫЕ КОЛОНКИ

Захват и репликация идентификационных столбцов поддерживаются интегрированными процессами начиная с OGG v18 .

  • Захват и репликация поддерживаются интегрированными извлечениями только репликация. Все другие неинтегрированные режимы не поддерживают репликацию столбцов идентификаторов, включая classi c параллельные и скоординированные репликации.
  • Только РСУБД 18.x и выше с OGG v18 и выше поддерживает репликацию столбцов идентификаторов.
  • Позволяет двунаправленную репликацию столбцов идентификаторов из OGG v18 и выше
  • Если целевой столбец является столбцом идентификаторов, репликация OGG перезапишет целевой столбец, используя значение из источника.
  • Нет ограничения на то, как свойство IDENTITY устанавливается для источника или цели
  • Эта функция не может быть перенесена в более старые версии.
  • Пустая таблица имеет столбец идентификаторов, добавленный к ней с помощью ALTER TABLE ADD is по-прежнему не поддерживается.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...