Рассмотрение структуры и ограничений издателей Oracle
Публикация из баз данных Oracle спроектирована таким образом, чтобы работать идентично публикации из базы данных Microsoft SQL Server. Однако необходимо знать о следующих ограничениях и проблемах:
Параметр Oracle Gateway обеспечивает большую производительность по сравнению с параметром Oracle Complete. Тем не менее этот параметр нельзя использовать для публикации одной и той же таблицы в нескольких публикациях транзакций. Таблица может присутствовать только в одной публикации транзакций и в любом количестве публикаций моментальных снимков. Если необходимо опубликовать одну таблицу в нескольких публикациях транзакций, выберите параметр Oracle Complete.
Репликация поддерживает публикацию таблиц, индексов и материализованных представлений. Репликация других объектов не производится.
В базах данных Oracle и SQL Server имеются некоторые небольшие различия между хранением и обработкой данных, которые влияют на репликацию.
При использовании издателя Oracle существует ряд различий в способе поддержки свойств репликации транзакций.
Поддержка публикации объектов из Oracle
Репликация поддерживает копирование следующих объектов из баз данных Oracle:
Таблицы;
Таблицы, упорядоченные по индексу;
Индексы;
Материализованные представления (реплицируются в виде таблиц).
Следующие компоненты могут присутствовать в публикуемых таблицах, но не реплицируются:
Индексы на основе домена;
Индексы на основе функций;
Умолчания;
Проверочные ограничения;
Внешние ключи;
Параметры хранения (пространства таблиц, кластеры, и т. д.).
Не могут быть реплицированы следующие объекты:
Вложенные таблицы;
Представления;
Пакеты, тела пакетов, процедуры и триггеры;
Очереди;
Последовательности;
Синонимы.
Сведения о поддерживаемых типах данных см. в разделе Сопоставление типов данных для издателей Oracle.
Различия между Oracle и SQL Server
Oracle имеет другие ограничения максимального размера для некоторых объектов. Любые объекты, созданные в базе данных публикации Oracle, не должны превышать максимальных размеров для соответствующих объектов в SQL Server. Сведения об ограничениях в SQL Server см. в разделе Задание максимальной вместимости SQL Server.
Имена объектов Oracle по умолчанию создаются в верхнем регистре. Убедитесь, что имена объектов Oracle передаются набранными в верхнем регистре при их публикации с помощью распространителя SQL Server, если эти имена введены прописными буквами в базе данных Oracle. Неправильный регистр букв в имени объекта может привести к сообщению об ошибке, указывающему, что объект не найден.
Oracle имеет диалект SQL, немного отличающийся от SQL SQL Server; синтаксис фильтров строк должен поддерживаться Oracle.
Вопросы использования больших объектов
Данные больших объектов (Large object, LOB) не хранятся в таблице журнала статьи; обновления данных больших объектов всегда извлекаются непосредственно из опубликованной таблицы. Обновления копируются в публикации транзакций только в тех случаях, когда операция, изменяющая большой объект, вызывает срабатывание триггера репликации в реплицируемой таблице. Триггеры Oracle срабатывают, когда вставляются или удаляются строки, содержащие большие объекты; однако обновления столбцов больших объектов не приводят к запуску триггеров. Обновление столбца больших объектов будет немедленно реплицировано только в том случае, если в той же самой транзакции Oracle будет также выполняться обновление столбца небольших объектов, находящегося в той же самой строке. В противном случае столбец больших объектов будет обновлен на подписчике при следующем обновлении столбца небольших объектов, находящегося в той же самой строке. Убедитесь, что данная логика действий приемлема для вашего приложения.
Для репликации обновлений столбцов больших объектов в публикациях транзакций рассмотрите одну из следующих стратегий записи приложения.
Удаление строки с последующей ее вставкой в пределах транзакции вместо обновления строки: указание нового большого объекта при повторной вставке строки. Поскольку и удаление, и вставка приводят к срабатыванию триггера, строка будет реплицирована.
Включите в обновление строки в дополнение к столбцу больших объектов столбец небольших объектов, или обновите в строке столбец небольших объектов в пределах той же самой транзакции Oracle. В обоих случаях обновление столбца небольших объектов обеспечивает срабатывание триггера.
Дополнительные сведения о больших объектах (LOB) см. в разделе Сопоставление типов данных для издателей Oracle.
Уникальные индексы и ограничения
Для репликации моментальных снимков и репликации транзакций столбцы, содержащиеся в уникальных индексах и ограничениях (включая ограничения первичных ключей), должны соответствовать определенным условиям. Если они не соответствуют этим условиям, то ограничение или индекс не реплицируется.
Максимальное число столбцов в индексе SQL Server равно 16.
Все столбцы, включенные в уникальные ограничения, должны содержать поддерживаемые типы данных. Дополнительные сведения о типах данных см. в разделе Сопоставление типов данных для издателей Oracle.
Должны быть опубликованы все столбцы, включенные в уникальные ограничения (к ним не могут применяться фильтры).
Столбцы, включенные в уникальные ограничения или индексы, не должны иметь значений 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 и более поздними версиями. Тем не менее для предыдущих версий SQL Server можно использовать хранимые процедуры и интерфейсы SQL-DMO, чтобы настроить подписки по запросу на публикации Oracle.
Если для распространения изменений на подписчики используются хранимые процедуры (по умолчанию), учтите, что синтаксис MCALL поддерживается, но имеет другую логику поведения, если публикация исходит от издателя Oracle. Обычно MCALL предоставляет битовую схему, которая показывает, какие столбцы у издателя были обновлены. В случае публикации Oracle битовая схема всегда показывает, что все столбцы были обновлены. Дополнительные сведения об использовании хранимых процедур см. в разделе Указание способа распространения изменений для статей транзакций.
Поддержка функций репликации транзакций
Публикации Oracle не поддерживают все параметры схемы, поддерживаемые публикациями SQL Server. Дополнительные сведения о параметрах схемы см. в разделе sp_addarticle (Transact-SQL).
Подписчики на публикации Oracle не могут использовать немедленное обновление или очереди обновляемых подписок, а также не могут действовать в качестве узлов в одноранговой или двунаправленной топологии.
Подписчики на публикации Oracle не могут быть повторно автоматически инициализированы из резервной копии.
SQL Server поддерживает два типа проверки данных: двоичную и количества строк. Издатели Oracle поддерживают только проверку количества строк. Дополнительные сведения см. в разделе Проверка реплицированных данных.
SQL Server предлагает для использования два формата моментальных снимков: собственный bcp-режим и символьный режим. Издатели 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_login и @job_password хранимых процедур sp_addpublication_snapshot (Transact-SQL) и sp_addlogreader_agent (Transact-SQL)) должны совпадать с учетной записью и паролем, которые используются для подключения к издателю Oracle.
Параметр @job_login нельзя изменить с помощью хранимой процедуры sp_changepublication_snapshot (Transact-SQL) или sp_changelogreader_agent (Transact-SQL), однако пароль таким способом изменить можно.
Дополнительные сведения о безопасности репликации см. в разделе Безопасность и защита (репликация).