Устранение неполадок с издателями Oracle

В этом разделе перечислены ряд проблем, которые могут возникнуть при настройке и использовании издателя Oracle.

Ошибка возникает в отношении клиентского и сетевого программного обеспечения Oracle

Учетная запись, от которой Microsoft SQL Server работает на распространителе, должны быть предоставлены разрешения на чтение и выполнение в каталоге (и всех подкаталогах), в который установлено клиентское сетевое программное обеспечение Oracle. Если разрешения не предоставлены или клиентские компоненты Oracle не установлены должным образом, вы получите следующее сообщение об ошибке:

"Сбой подключения к серверу с помощью [поставщика Microsoft OLE DB для Oracle]. Клиентские компоненты Oracle и сетевые компоненты не найдены. Эти компоненты предоставляются Корпорацией Oracle и являются частью клиентского программного обеспечения Oracle версии 7.3.3 или более поздней версии. Поставщик не может функционировать до тех пор, пока эти компоненты не будут установлены".

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

Если вы проверили, предоставлены ли разрешения и установлены ли компоненты правильно, но эта ошибка сохраняется, убедитесь, что параметры реестра в HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\MTxOCI верны:

  • Для Oracle 10g правильные параметры

    • OracleOciLib = oci.dll

    • OracleSqlLib = orasql10.dll

    • OracleXaLib = oraclient10.dll

  • Для Oracle 9i правильные параметры

    • OracleOciLib = oci.dll

    • OracleSqlLib = orasql9.dll

    • OracleXaLib = oraclient9.dll

Распространитель SQL Server не может подключиться к экземпляру базы данных Oracle

Если распространитель SQL Server не может подключиться к издателю Oracle, убедитесь, что:

  • Необходимое программное обеспечение Oracle устанавливается на распространителю.

  • База данных Oracle находится в сети, и вы можете подключиться к ней с помощью средства, например SQL*Plus.

  • Репликация входа используется для подключения к издателю Oracle с достаточными разрешениями. Дополнительные сведения см. в разделе "Настройка издателя Oracle".

  • Имена TNS, определенные во время настройки издателя Oracle, перечислены в файле tnsnames.ora.

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

Дополнительные сведения о настройке и тестировании подключения см. в статье "Установка и настройка клиентского программного обеспечения Oracle Client Networking Software на распространителю SQL Server" в разделе "Настройка издателя Oracle".

Издатель Oracle связан с другим распространителем

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

  • Экземпляр сервера<OraclePublisherName> был ранее настроен на использование<SQLServerDistributorName> в качестве распространителя. Чтобы начать использовать NewSQLServerDistributorName>< в качестве распространителя, необходимо удалить текущую конфигурацию репликации на экземпляре сервера Oracle, которая будет удалять все публикации на этом экземпляре сервера".

  • < Сервер Oracle Oracle OracleServerName> уже определен как издатель<OraclePublisherName> на распространителю<SQLServerDistributorName>.<DistributionDatabaseName>'. Удалите издателя или удалите общедоступный синоним "<СинонимName>", чтобы повторно создать".

При удалении издателя Oracle объекты репликации в базе данных Oracle автоматически очищаются. Однако в некоторых случаях требуется ручная очистка объектов репликации Oracle. Чтобы вручную очистить объекты репликации Oracle, созданные репликацией:

  1. Подключитесь к издателю Oracle с разрешениями DBA.

  2. Выполните команду DROP PUBLIC SYNONYM MSSQLSERVERDISTRIBUTOR;SQL.

  3. Выполните команду DROP USER <replication_administrative_user_schema>``CASCADE;SQL.

Ошибка SQL Server 21663 возникает относительно отсутствия первичного ключа

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

"Недопустимый первичный ключ не найден для исходной таблицы [<TableOwner>].[<TableName>]"

Сведения о требованиях к первичным ключам см. в разделе "Уникальные индексы и ограничения" раздела "Рекомендации по проектированию и ограничениям для издателей Oracle".

Ошибка SQL Server 21642 возникает относительно повторяющегося имени входа связанного сервера

При первоначальной настройке издателя Oracle создается запись связанного сервера для подключения между издателем и распространителем. Связанный сервер имеет то же имя, что и имя службы Oracle TNS. При попытке создать связанный сервер с тем же именем отображается следующее сообщение об ошибке:

Для разнородных издателей требуется связанный сервер. Связанный сервер с <именем LinkedServerName> уже существует. Удалите связанный сервер или выберите другое имя издателя".

Эта ошибка может возникать, если вы пытаетесь создать связанный сервер напрямую или если вы ранее сняли связь между издателем Oracle и распространителем SQL Server, и вы пытаетесь перенастроить его. Если вы получаете эту ошибку при попытке перенастроить издателя, удалите связанный сервер с помощью sp_dropserver (Transact-SQL).

Если необходимо подключиться к издателю Oracle через связанное подключение к серверу, создайте другое имя службы TNS, а затем используйте это имя при вызове sp_addlinkedserver (Transact-SQL). Сведения о создании имен служб TNS см. в документации Oracle.

Возникает ошибка SQL Server 21617

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

"Не удается запустить SQL*PLUS. Убедитесь, что текущая версия клиентского кода Oracle установлена на сервере дистрибуции.

Постарайтесь найти SQL*PLUS на дистрибьюторе. Для установки клиента Oracle 10g имя этого исполняемого файла - sqlplus.exe. Обычно он устанавливается в %ORACLE_HOME%/bin. Чтобы убедиться, что путь SQL*PLUS отображается в системном пути, проверьте значение системной переменной Path:

  1. Щелкните правой кнопкой мыши Мой компьютер, затем выберите Свойства.

  2. Перейдите на вкладку "Дополнительно " и выберите переменные среды.

  3. В диалоговом окне "Переменные среды" в списке системных переменных выберите переменную path и нажмите кнопку "Изменить".

  4. В диалоговом окне "Изменить системную переменную ": если путь к папке, содержащей sqlplus.exe, отсутствует в текстовом поле значения переменной , измените строку, чтобы включить ее.

  5. Нажмите кнопку "ОК" для выхода и сохранения изменений.

Если на распространителе не удается найти sqlplus.exe, установите текущую версию клиентского программного обеспечения Oracle на распространителе. Дополнительные сведения см. в разделе "Настройка издателя Oracle".

Возникает ошибка SQL Server 21620

Если вы подключаетесь к базе данных Oracle ранее версии 8.1, требования системы публикации Oracle требуют, чтобы клиентское программное обеспечение Oracle, установленное на распространителе, было из версии 9. Если вы подключаетесь к базе данных Oracle версии 8.1 или более поздней, рекомендуется использовать клиентское программное обеспечение Oracle версии 10 или более поздней.

Прежде чем пытаться настроить издателя Oracle, публикация Oracle проверяет, доступна ли версия SQL*PLUS через системный путь распространителя версии 9 или более поздней. Если это не так, отображается следующее сообщение об ошибке:

Версия SQL*PLUS, доступная через переменную среды Path, недостаточно современна для поддержки публикации в Oracle. Убедитесь, что последняя версия клиентского кода Oracle установлена на распространителе.

Если на дистрибьюторе установлено несколько версий клиентского программного обеспечения Oracle, убедитесь, что самая последняя версия не ниже 9 и переменная системного пути в первую очередь указывает на эту версию (ссылки на другие версии могут появляться, пока самая последняя указывается первой). Для получения дополнительной информации об изменении переменной системного пути см. в ранее упомянутом разделе "Ошибка SQL Server 21617 вызывается" в этой теме.

Возникает ошибка SQL Server 21624 или ошибка 21629

Для публикации на 64-разрядных распространителях используется поставщик Oracle OLEDB для Oracle (OraOLEDB.Oracle). Убедитесь, что поставщик Oracle OLEDB установлен и зарегистрирован на дистрибьюторе. Если поставщик не установлен и зарегистрирован, отображается одно или оба из следующих сообщений об ошибках:

  • "Не удалось найти зарегистрированного поставщика Oracle OLEDB, OraOLEDB.Oracle, у распространителя%s". Убедитесь, что текущая версия поставщика Oracle OLEDB установлена и зарегистрирована на дистрибьюторе.

  • Раздел реестра CLSID, указывающий, что поставщик Oracle OLEDB для Oracle, OraOLEDB.Oracle, зарегистрирован, отсутствует у распространителя. Убедитесь, что поставщик Oracle OLEDB установлен и зарегистрирован на распространителе.

Если вы используете клиентское программное обеспечение Oracle версии 10g, поставщик OraOLEDB10.dll; для версии 9i OraOLEDB.dll. Драйвер устанавливается в %ORACLE_HOME%\BIN (например, C:\oracle\product\10.1.0\Client_1\bin). Если вы определили, что поставщик Oracle OLEDB не установлен на Дистрибьюторе, установите его с установочного диска клиентского программного обеспечения, предоставленного Oracle. Дополнительные сведения см. в разделе "Настройка издателя Oracle".

Если установлен поставщик OLEDB Oracle, убедитесь, что он зарегистрирован. Чтобы зарегистрировать библиотеку DLL поставщика, выполните следующую команду из каталога, в котором установлена библиотека DLL, а затем остановите и перезапустите экземпляр SQL Server:

  1. regsvr32 OraOLEDB10.dll или regsvr32 OraOLEDB.dll.

Возникает ошибка SQL Server 21626 или ошибка 21627

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

  • "Не удается подключиться к серверу базы данных Oracle "%s" с помощью поставщика Oracle OLEDB OraOLEDB.Oracle".

Если отображается это сообщение об ошибке, проверьте подключение к базе данных Oracle, запустив SQL*PLUS непосредственно с использованием того же имени входа и пароля, указанного во время настройки издателя Oracle. Для получения дополнительной информации см. раздел "Не удается подключить SQL Server Distributor к экземпляру базы данных Oracle", приведенный выше в этом разделе.

Возникает ошибка SQL Server 21628

Для 64-разрядных дистрибутивов Oracle публикация данных использует поставщик данных Oracle OLEDB для Oracle (OraOLEDB.Oracle). SQL Server создает запись реестра, чтобы разрешить поставщику Oracle выполняться в одном процессе с SQL Server. Если возникла проблема с чтением или записью этой записи реестра, отображается следующее сообщение об ошибке:

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

Для публикации Oracle требуется, чтобы запись реестра существовала и должна иметь значение 1 для 64-разрядных распространителей. Если запись не существует, SQL Server попытается создать ее. Если запись существует, но имеет значение 0, параметр не будет изменен; попытка настроить издателя Oracle не удастся.

Чтобы просмотреть и изменить параметр реестра, выполните следующие действия.

  1. Нажмите кнопку "Пуск" и нажмите кнопку "Выполнить".

  2. В диалоговом окне "Запуск" введите regedit и нажмите кнопку "ОК".

  3. Перейдите к HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<InstanceName>\Providers.

    В разделе "Поставщики" должна быть папка с именем OraOLEDB.Oracle. В этой папке должно быть имя значения DWORD AllowInProcess со значением 1.

  4. Если для параметра AllowInProcess задано значение 0, обновите запись реестра до 1:

    1. Щелкните правой кнопкой мыши запись и нажмите кнопку "Изменить".

    2. В диалоговом окне "Изменить строку" введите 1 в поле данных "Значение ".

Возникает ошибка SQL Server 21684

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

Разрешения, связанные с входом администратора для издателя Oracle '%s', недостаточны.

Чтобы проверить разрешения, предоставленные пользователю, выполните следующий запрос: SELECT * from session_privs Результат выполнения должен быть аналогичен следующему:

PRIVILEGE

------------------

CREATE SESSION

CREATE TABLE

CREATE PUBLIC SYNONYM

DROP PUBLIC SYNONYM

CREATE VIEW

CREATE SEQUENCE

CREATE PROCEDURE

CREATE TRIGGER

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

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

Ошибка Oracle ORA-01000

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

"ORA-01000: превышено максимальное количество открытых курсоров"

Чтобы избежать этой проблемы, убедитесь, что параметр max_open_cursors в базах данных Oracle установлен на достаточно высокое значение (не менее 1000). Дополнительные сведения об этом параметре см. в документации Oracle.

Ошибка Oracle ORA-01555

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

ORA-01555: снимок слишком старый

С помощью объектов, известных как сегменты отката, Oracle создает представления данных, согласованные для чтения, на момент выполнения инструкции SQL. Ошибка "слишком старого снимка" может возникнуть, если сведения об откате перезаписываются другими параллельными сеансами. До Oracle 9i рекомендуемый метод уменьшения частоты этой ошибки должен был увеличить размер и /или число сегментов отката, а также назначить большие транзакции конкретному сегменту отката.

В Oracle 9i Oracle представила концепцию пространства таблиц UNDO, которая заменяет сегмент отката. Чтобы предотвратить ошибку "моментальный снимок слишком старый" в Oracle 9i, рекомендуется:

  • Создайте пространство таблиц UNDO с соответствующим объемом свободного пространства.

  • Установите гарантию сохранения данных для табличного пространства (Oracle 10G и выше).

  • Настройте параметры инициализации Oracle UNDO_MANAGEMENT и UNDO_RETENTION.

Дополнительные сведения об ошибке "моментальный снимок слишком старый" см. в документации Oracle.

Ошибка Oracle ORA-22285

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

GRANT READ ON DIRECTORY <directory_name> TO <replication_administrative_user_schema>

Если доступ не предоставлен, агентом чтения журналов вызывается следующая ошибка:

"ORA-22285: несуществующий каталог или файл для операции FILEOPEN"

Внесены изменения, требующие перенастройки издателя.

Изменения в таблицах или процедурах метаданных репликации требуют удаления и перенастройки издателя. Чтобы перенастроить издателя, необходимо удалить издателя и снова настроить его с помощью SQL Server Management Studio, Transact-SQL или RMO. Сведения о настройке издателя см. в разделе "Настройка издателя Oracle".

Удаление издателя Oracle (SQL Server Management Studio)

  1. Подключитесь к распространителю издателя Oracle в SQL Server Management Studio и разверните узел сервера.

  2. Щелкните правой кнопкой мыши репликацию и выберите пункт "Свойства распространителя".

  3. На странице "Издатели " диалогового окна "Свойства распространителя " снимите флажок для издателя Oracle.

  4. Нажмите кнопку ОК.

Удаление издателя Oracle (Transact-SQL)

См. также

Настройка издателя Oracle
Обзор публикации Oracle