Диагностика издателей Oracle
В этой теме рассматривается ряд вопросов, которые могут возникнуть при настройке и использовании издателя Oracle.
Ошибка, касающаяся клиентского и сетевого программного обеспечения Oracle
Учетной записи, под которой в распространителе выполняется MicrosoftSQL 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 и пути. Даже если есть только один набор исполняемых файлов Oracle, установленных на распространителе SQL Server, проверьте, чтобы были правильно установлены переменные среды, относящиеся к Oracle Home. При изменении значений переменных среды необходимо остановить и перезапустить SQL Server, чтобы эти изменения вступили в действие.
Дополнительные сведения о настройке и проверке подключения см. в подразделе «Установка и настройка клиентского сетевого программного обеспечения Oracle на распространителе SQL Server» раздела Настройка издателя Oracle.
Издатель Oracle связан с другим распространителем
Издатель Oracle может быть связан только с одним распространителем SQL Server. Если с издателем Oracle связан иной распространитель, он должен быть удален перед использованием другого распространителя. Если вначале не удалить распространитель, выводится одно из следующих сообщений об ошибке:
«Экземпляр сервера Oracle "<ИмяИздателяOracle>" был ранее настроен на использование '<ИмяРаспространителяSQLServer>' в качестве своего распространителя. Для начала использования в качестве распространителя "<НовоеИмяРаспространителяSQLServer>" необходимо удалить текущую конфигурацию репликации на экземпляре сервера Oracle, при этом будут удалены все публикации на этом экземпляре сервера».
«Сервер Oracle "<ИмяСервераOracle>" уже определен в качестве издателя "<ИмяИздателяOracle>" на распространителе "<ИмяРаспространителяSQLServer>.<ИмяБазыДанныхРаспространителя>". Для повторного создания удалите издатель или общий синоним "<ИмяСинонима>".»
При удалении издателя Oracle объекты репликации в базе данных Oracle автоматически очищаются. Однако в некоторых случаях необходима ручная очистка объектов репликации Oracle. Для ручной очистки объектов репликации Oracle, созданных при репликации, выполните следующее:
Подключитесь к издателю Oracle с разрешениями администратора базы данных.
Выполните команду SQL DROP PUBLIC SYNONYM MSSQLSERVERDISTRIBUTOR;.
Выполните команду SQL DROP USER <replication_administrative_user_schema>CASCADE;.
Ошибка SQL Server 21663 возникает из-за отсутствия первичного ключа
Статьи в публикациях транзакций должны иметь правильный первичный ключ. Если они не имеют правильного первичного ключа, при попытке добавления статьи выдается следующее сообщение об ошибке:
«Допустимый первичный ключ для исходной таблицы [<ВладелецТаблицы>].[<ИмяТаблицы>] не найден»
Сведения о требованиях для первичных ключей см. в подразделе «Уникальные индексы и ограничения» раздела Рассмотрение структуры и ограничений издателей Oracle.
Ошибка SQL Server 21642, связанная с повторяющимся именем входа связанного сервера
При первоначальной настройке издателя Oracle создается запись связанного сервера для соединения издателя и распространителя. Связанный сервер имеет то же имя, что и служба Oracle TNS. При попытке создать связанный сервер с тем же именем выводится следующее сообщение об ошибке:
«Для разнородных издателей необходим связанный сервер. Связанный сервер с именем "<ИмяСвязанногоСервера>" уже существует. Удалите связанный сервер или выберите другое имя издателя».
Эта ошибка может возникнуть при попытке непосредственно создать связанный сервер, или если ранее была удалена связь между издателем Oracle и распространителем SQL Server, и теперь предпринимается попытка перенастроить издатель. Если эта ошибка возникает при попытке перенастроить издатель, удалите связанный сервер при помощи sp_dropserver (Transact-SQL).
Если необходимо подключиться к издателю Oracle через соединение связанного сервера, создайте другое имя службы TNS и затем используйте его имя при вызове sp_addlinkedserver (Transact-SQL). Сведения о создании имен службы TNS см. в документации Oracle.
Ошибка SQL Server 7395, связанная с вложенными транзакциями
При попытке выполнения вложенных транзакций по соединению связанного сервера с издателем Oracle выводится следующее сообщение об ошибке:
«Не удается запустить вложенную транзакцию для поставщика OLE DB "MSDAORA" для связанного сервера "<ИмяСервера>". Вложенная транзакция была необходима, т. к. параметр XACT_ABORT был установлен в OFF».
Если для настройки или обслуживания издателя 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:
Щелкните правой кнопкой мыши Мой компьютер, затем выберите Свойства.
Перейдите на вкладку Дополнительно, затем щелкните Переменные среды.
В диалоговом окне Переменные среды, в списке Системные переменные выберите переменную Path и щелкните Изменить.
В диалоговом окне Изменение системной переменной выполните следующие действия: если в текстовом поле Значение переменной путь к папке, содержащей sqlplus.exe, отсутствует, измените строку, чтобы она содержала этот путь.
Нажмите кнопку ОК в каждом открытом диалоговом окне, чтобы выйти и сохранить изменения.
Если на распространителе не удается найти sqlplus.exe, установите на распространителе текущую версию клиентского программного обеспечения Oracle. Дополнительные сведения см. в разделе Настройка издателя Oracle.
Возникает ошибка SQL Server 21620
При подключении к базе данных Oracle, версия которой предшествует версии 8.1, для публикации Oracle необходимо, чтобы версия клиентского программного обеспечения Oracle, установленного на распространителе, была не ниже 9. При подключении к базе данных Oracle 8.1 или более поздней версии рекомендуется, чтобы версия клиентского программного обеспечения Oracle была не ниже 10.
Перед попыткой настройки издателя Oracle выполняется проверка того, что версия SQL*PLUS, доступная по системному пути на распространителе, не ниже 9. Если это не так, выводится следующее сообщение об ошибке:
«Версия SQL*PLUS, доступная через переменную системного пути, в настоящее время недостаточна для поддержки публикации Oracle. Убедитесь, что на распространителе установлена текущая версия клиентской программы Oracle».
Если на распространителе установлено несколько версий клиентского программного обеспечения Oracle, убедитесь, что самая последняя версия не ниже 9, и что переменная системного пути ссылается вначале на эту версию (ссылки на другие версии могут использоваться, если самая последняя версия располагается первой). Дополнительные сведения о редактировании переменной системного пути см. в приводимом выше разделе «Ошибка SQL Server 21617».
Возникает ошибка SQL Server 21624 или 21629
Для 64-разрядных распространителей публикация Oracle использует поставщика Oracle OLEDB для Oracle (OraOLEDB.Oracle). Убедитесь, что поставщик OLEDB для Oracle установлен и зарегистрирован на распространителе. Если поставщик не установлен и не зарегистрирован, появляется одно из следующих сообщений, или оба эти сообщения:
«Не удается найти зарегистрированный поставщик OLEDB для Oracle (OraOLEDB.Oracle) на распространителе '%s'. Убедитесь, что на распространителе установлена и зарегистрирована текущая версия поставщика OLEDB для Oracle».
«Раздел реестра CLSID, указывающий, что поставщик OLEDB для Oracle (OraOLEDB.Oracle) был зарегистрирован, но отсутствует на распространителе. Убедитесь, что на распространителе установлен и зарегистрирован поставщик OLEDB для Oracle».
Если используется клиентское программное обеспечение Oracle версии 10g, поставщиком является OraOLEDB10.dll; для версии 9i — это OraOLEDB.dll. Поставщик устанавливается в каталог %ORACLE_HOME%\BIN (например, в «C:\oracle\product\10.1.0\Client_1\bin»). Если обнаружено, что поставщик Oracle OLEDB не установлен на распространителе, установите его с установочного диска клиентского программного обеспечения Oracle, предоставляемого корпорацией Oracle. Дополнительные сведения см. в разделе Настройка издателя Oracle.
Если поставщик Oracle OLEDB установлен, убедитесь, что он зарегистрирован. Для регистрации DLL-библиотеки поставщика выполните следующую команду из каталога, в котором установлена DLL-библиотека, а затем остановите и перезапустите экземпляр SQL Server:
- regsvr32 OraOLEDB10.dll или regsvr32 OraOLEDB.dll.
Возникает ошибка SQL Server 21626 или 21627
Чтобы убедиться, что издательская среда Oracle настроена верно, SQL Server пытается подключиться к издателю Oracle с учетными данными, которые были указаны во время настройки. Если распространителю SQL Server не удается подключиться к издателю Oracle, появляется одно из следующих сообщений:
«Невозможно подключиться к серверу базы данных Oracle "%s" с помощью поставщика OLEDB для Oracle (OraOLEDB.Oracle)».
«Не удается подключиться к серверу базы данных Oracle '%s', используя поставщик Microsoft OLEDB (MSDAORA).»
При появлении этих сообщений проверьте подключение к базе данных Oracle, непосредственно запустив SQL*PLUS при помощи тех же имени входа и пароля, которые были указаны во время настройки издателя Oracle. Дополнительные сведения см. выше, в подразделе «Распространителю SQL Server не удается подключиться к экземпляру базы данных Oracle» этого раздела.
Возникает ошибка SQL Server 21628
Для 64-разрядных распространителей система публикации 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 завершится неудачей.
Для просмотра и изменения установки реестра выполните следующие действия:
Нажмите кнопку Пуск, затем выберите пункт Выполнить.
В диалоговом окне Выполнить введите regedit, затем нажмите кнопку ОК.
Перейдите в папку HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<ИмяЭкземпляра>\Providers.
В папке для поставщиков (Providers) должна находиться папка с именем OraOLEDB.Oracle. В этой папке должна присутствовать DWORD-переменная с именем AllowInProcess, которой присвоено значение 1.
Если обнаружено, что переменная AllowInProcess установлена в 0, обновите запись реестра до 1:
Щелкните правой кнопкой мыши запись, затем щелкните Изменить.
В диалоговом окне Изменение строкового параметра введите 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 установлено достаточно большое число (по меньшей мере, 1 000). Дополнительные сведения об этой установке приводятся в документации 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**)**
Подключитесь к распространителю для издателя Oracle в среде SQL Server Management Studio, а затем раскройте узел сервера.
Щелкните правой кнопкой мыши Репликация, затем щелкните Свойства распространителя.
На странице Издатели диалогового окна Свойства распространителя снимите флажок для издателя Oracle.
Нажмите кнопку ОК.
Удаление издателя Oracle (Transact-SQL)
- Выполните sp_dropdistpublisher. Дополнительные сведения см. в разделе sp_dropdistpublisher (Transact-SQL).
См. также