Поделиться через


Рассмотрение структуры и ограничений издателей Oracle

Область применения: SQL Server

Публикация из базы данных Oracle предназначена для практически идентичной публикации из базы данных Microsoft SQL Server. Однако необходимо знать о следующих ограничениях и проблемах:

  • Параметр Oracle Gateway обеспечивает большую производительность по сравнению с параметром Oracle Complete. Тем не менее этот параметр нельзя использовать для публикации одной и той же таблицы в нескольких публикациях транзакций. Таблица может присутствовать только в одной публикации транзакций и в любом количестве публикаций моментальных снимков. Если необходимо опубликовать одну таблицу в нескольких публикациях транзакций, выберите параметр Oracle Complete.

  • Репликация поддерживает публикацию таблиц, индексов и материализованных представлений. Репликация других объектов не производится.

  • Существует несколько небольших различий между хранилищем и обработкой данных в базах данных Oracle и SQL Server, влияющих на репликацию.

  • При использовании издателя Oracle существует ряд различий в способе поддержки свойств репликации транзакций.

Поддержка публикации объектов из Oracle

Репликация поддерживает копирование следующих объектов из баз данных Oracle:

  • Таблицы

  • Таблицы, упорядоченные по индексу;

  • Индексы

  • Материализованные представления (реплицируются в виде таблиц).

Следующие компоненты могут присутствовать в публикуемых таблицах, но не реплицируются:

  • Индексы на основе домена;

  • Индексы на основе функций;

  • Defaults

  • Проверочные ограничения

  • Внешние ключи;

  • Параметры хранения (пространства таблиц, кластеры, и т. д.).

Не могут быть реплицированы следующие объекты:

  • Вложенные таблицы;

  • Представления

  • Пакеты, тела пакетов, процедуры и триггеры;

  • Очереди

  • Последовательности

  • Синонимы

Сведения о поддерживаемых типах данных см. в разделе Data Type Mapping for Oracle Publishers.

Различия между Oracle и SQL Server

  • Oracle имеет другие ограничения максимального размера для некоторых объектов. Все объекты, созданные в базе данных публикации Oracle, должны соответствовать максимальным ограничениям размера соответствующих объектов в SQL Server. Сведения об ограничениях в SQL Server см. в разделе "Максимальные спецификации емкости" для SQL Server.

  • Имена объектов Oracle по умолчанию создаются в верхнем регистре. Убедитесь, что имена объектов Oracle предоставляются в верхнем регистре при публикации их с помощью распространителя SQL Server, если они являются верхним регистром в базе данных Oracle. Неправильный регистр букв в имени объекта может привести к сообщению об ошибке, указывающему, что объект не найден.

  • Oracle имеет немного другой диалект SQL от SQL Server; Фильтры строк должны быть записаны в синтаксисе, совместимом с Oracle.

Вопросы использования больших объектов

Данные больших объектов (Large object, LOB) не хранятся в таблице журнала статьи; обновления данных больших объектов всегда извлекаются непосредственно из опубликованной таблицы. Обновления копируются в публикации транзакций только в тех случаях, когда операция, изменяющая большой объект, вызывает срабатывание триггера репликации в реплицируемой таблице. Триггеры Oracle срабатывают, когда вставляются или удаляются строки, содержащие большие объекты; однако обновления столбцов больших объектов не приводят к запуску триггеров. Обновление столбца больших объектов будет немедленно реплицировано только в том случае, если в той же самой транзакции Oracle будет также выполняться обновление столбца небольших объектов, находящегося в той же самой строке. В противном случае столбец больших объектов будет обновлен на подписчике при следующем обновлении столбца небольших объектов, находящегося в той же самой строке. Убедитесь, что данная логика действий приемлема для вашего приложения.

Для репликации обновлений столбцов больших объектов в публикациях транзакций рассмотрите одну из следующих стратегий записи приложения.

  • Удаление строки с последующей ее вставкой в пределах транзакции вместо обновления строки: указание нового большого объекта при повторной вставке строки. Поскольку и удаление, и вставка приводят к срабатыванию триггера, строка будет реплицирована.

  • Включите в обновление строки в дополнение к столбцу больших объектов столбец небольших объектов, или обновите в строке столбец небольших объектов в пределах той же самой транзакции Oracle. В обоих случаях обновление столбца небольших объектов обеспечивает срабатывание триггера.

Дополнительные сведения о больших объектах (LOB) см. в разделе Data Type Mapping for Oracle Publishers.

Уникальные индексы и ограничения

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

  • Максимальное число столбцов, разрешенных в индексе в SQL Server, равно 16.

  • Все столбцы, включенные в уникальные ограничения, должны содержать поддерживаемые типы данных. Дополнительные сведения о типах данных см. в разделе Data Type Mapping for Oracle Publishers.

  • Должны быть опубликованы все столбцы, включенные в уникальные ограничения (к ним не могут применяться фильтры).

  • Столбцы, включенные в уникальные ограничения или индексы, не должны иметь значений null.

Рассмотрите также следующие вопросы:

  • Oracle и SQL Server обрабатывают значение NULL по-разному: Oracle разрешает несколько строк со значениями NULL для столбцов, которые разрешают значение NULL и включаются в уникальные ограничения или индексы. SQL Server применяет уникальность, разрешая только одну строку со значением NULL для одного столбца. Нельзя опубликовать уникальное ограничение или индекс, разрешающий значение NULL, поскольку в этом случае произошло бы нарушение ограничения на подписчике, если публикуемая таблица содержит несколько строк со значениями NULL для любого из столбцов, включенных в индекс или ограничение.

  • При тестировании уникальности конечные пробелы в поле игнорируются SQL Server, но не Oracle.

Как и в репликации транзакций SQL Server, таблицы в публикациях транзакций Oracle требуют первичного ключа; Первичный ключ должен быть уникальным в зависимости от правил, указанных выше. В случае если первичный ключ не соответствует правилам, указанным выше, таблица не может быть опубликована для репликации транзакций.

Различия между публикациями Oracle и стандартными репликациями транзакций

  • Издатель Oracle не может иметь то же имя, что и его распространитель SQL Server; любой из издателей SQL Server, использующих распространитель; или любые подписчики, получающие публикацию. Публикации, обслуживаемые одним и тем же распространителем, должны иметь уникальное имя.

  • Таблица, опубликованная в публикации Oracle, не может принимать реплицированные данные. Поэтому публикации Oracle не поддерживают публикации с немедленным обновлением или с обновляемыми посредством очередей подписками, а также топологии, в которых таблицы публикации действуют так же, как таблицы подписок, например одноранговые и двунаправленные репликации.

  • Взаимосвязи первичных ключей с внешними ключами в базе данных Oracle не реплицируются на подписчики. Однако при получении изменений взаимосвязи в данных сохраняются.

  • Стандартные публикации транзакций поддерживают таблицы, содержащие до 1000 столбцов. Публикации транзакций Oracle поддерживают 995 столбцов (репликация добавляет пять столбцов в каждую публикуемую таблицу).

  • К инструкциям CREATE TABLE добавляются выражения порядка следования, чтобы сделать возможными сравнения, учитывающие регистр, которые имеют важные значения для первичных ключей и уникальных ограничений. Это поведение управляется параметром схемы 0x1000, который задается параметром @schema_option sp_addarticle (Transact-SQL).

  • Если для настройки или обслуживания издателя Oracle используются хранимые процедуры, не вставляйте эти процедуры в явную транзакцию. Такая вложенность не поддерживается связанным сервером, используемым для подключения к издателю Oracle.

  • При создании подписки на вытягивание в публикацию Oracle с помощью мастера необходимо использовать мастер создания подписок, предоставленный с SQL Server 2005 (9.x) и более поздними версиями. Однако для предыдущих версий SQL Server можно использовать хранимую процедуру и интерфейсы SQL-DMO для настройки подписок на публикации Oracle.

  • Если для распространения изменений на подписчики используются хранимые процедуры (по умолчанию), учтите, что синтаксис MCALL поддерживается, но имеет другую логику поведения, если публикация исходит от издателя Oracle. Обычно MCALL предоставляет битовую схему, которая показывает, какие столбцы у издателя были обновлены. В случае публикации Oracle битовая схема всегда показывает, что все столбцы были обновлены. Дополнительные сведения об использовании хранимых процедур см. в статье Указание способа распространения изменений для статей транзакций.

Поддержка функций репликации транзакций

  • Публикации Oracle не поддерживают все параметры схемы, поддерживаемые публикациями SQL Server. Дополнительные сведения о параметрах схемы см. в разделе sp_addarticle (Transact-SQL).

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

  • Подписчики на публикации Oracle не могут быть повторно автоматически инициализированы из резервной копии.

  • SQL Server поддерживает два типа проверки: двоичное и строкового числа. Издатели Oracle поддерживают только проверку количества строк. Дополнительные сведения см. в статье Проверка реплицированных данных.

  • SQL Server предлагает два формата моментальных снимков: собственный bcp-mode и символьный режим. Издатели Oracle поддерживают символьный режим моментальных снимков.

  • Изменения схем для опубликованных таблиц Oracle не поддерживаются. Для внесения изменения схемы сначала надо удалить публикацию, внести изменения, и затем вновь создать публикацию и все подписки.

    Примечание.

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

Модель безопасности репликации

Модель безопасности публикации Oracle — та же самая, что и модель безопасности стандартной репликации транзакций, за следующими исключениями.

  • Учетная запись, под которой агент моментальных снимков и агент чтения журналов устанавливают подключения от распространителя к издателю, указывается с помощью одного из следующих методов:

    • Параметр @security_mode sp_adddistpublisher (Transact-SQL) (вы также указываете значения и @login @password используется ли проверка подлинности Oracle)

    • В диалоговом окне "Подключение к серверу" в SQL Server Management Studio, которое используется при настройке издателя Oracle на распространителе SQL Server.

    В стандартной репликации транзакций учетная запись указывается с sp_addpublication_snapshot (Transact-SQL) и sp_addlogreader_agent (Transact-SQL).

  • Учетная запись, в которой агент чтения агент моментальных снимков и агента чтения журналов не могут быть изменены с помощью sp_changedistpublisher (Transact-SQL) или на листе свойств, но пароль можно изменить.

  • Если указать значение 1 (встроенная проверка подлинности Windows) для @security_mode параметра sp_adddistpublisher (Transact-SQL):

    • Учетная запись процесса и пароль, используемые для агента чтения агент моментальных снимков и журнала (и @job_password параметры sp_addpublication_snapshot (@job_loginTransact-SQL) и sp_addlogreader_agent (Transact-SQL)), должны совпадать с учетной записью и паролем, используемыми для подключения к издателю Oracle.

    • Невозможно изменить @job_login параметр с помощью sp_changepublication_snapshot (Transact-SQL) или sp_changelogreader_agent (Transact-SQL), но пароль можно изменить.

Дополнительные сведения о безопасности репликации см. в статье Просмотр и изменение параметров безопасности репликации.