These topics introduce Oracle Provider for OLE DB (OraOLEDB).
Overview of OLE DB
OLE DB is an open standard data access methodology which utilizes a set of Component Object Model (COM) interfaces for accessing and manipulating different types of data. These interfaces are available from various database providers.
OLE DB Design
The design of OLE DB centers around the concept of a consumer and a provider . Figure 1-1 is an illustration of the OLE DB system. The consumer represents the traditional client. The provider places data into a tabular format and returns it to the consumer.
Figure 1-1 OLE DB Flow
Description of «Figure 1-1 OLE DB Flow»
OLE DB Data Providers
OLE DB data providers are a set of COM components that transfer data from a data source to a consumer . An OLE DB Provider places that data in a tabular format in response to calls from a consumer. Providers can be simple or complex. A provider may return a table, it may allow the consumer to determine the format of that table, and it may perform operations on the data.
Each provider implements a standard set of COM interfaces to handle requests from the consumer. A provider may implement optional COM interfaces to provide additional functionality.
With the standard interfaces, any OLE DB consumer can access data from any provider. Because of COM components, consumers can access them in any programming language that supports COM, such as C++, Visual Basic, and Java.
OLE DB Data Consumers
The OLE DB data consumer is any application or tool that utilizes OLE DB interfaces of a provider to access a broad range of data.
Overview of OraOLEDB
Oracle Provider for OLE DB (OraOLEDB) is an OLE DB data provider that offers high performance and efficient access to Oracle data by OLE DB consumers.
In general, this developer’s guide assumes that you are using OraOLEDB through OLE DB or ADO.
With the advent of the .NET framework, support has been provided for using the OLEDB.NET Data Provider with OraOLEDB. With the proper connection attribute setting, an OLEDB.NET Data Provider can utilize OraOLEDB to access Oracle Database.
«OLEDB.NET Data Provider Compatibility» for further information on support for OLEDB.NET Data Provider
System Requirements
The following items are required on a system to use Oracle Provider for OLE DB:
Windows Operating System:
64-bit: Windows 8.1 (Pro and Enterprise Editions), Windows 10 x64 (Pro, Enterprise, and Education Editions), Windows Server 2012 R2 x64 (Standard, Datacenter, Essentials, and Foundation Editions), Windows Server 2016 x64 (Standard, Datacenter, and Essentials Editions), or Windows Server 2019 x64 (Standard, Datacenter, and Essentials Editions).
Oracle supports 32-bit Oracle Provider for OLE DB and 64-bit Oracle Provider for OLE DB for Windows x64 on these operating systems.
Access to an Oracle Database (Oracle 11.2 or later)
Oracle Client and Oracle Net Services (included with Oracle Provider for OLE DB installation).
Redistributable files provided with Microsoft Data Access Components (MDAC) 2.1 or higher are required by the provider. These files are available at the Microsoft Web site:
Oracle Services for Microsoft Transaction Server. This is required for consumers using Microsoft Transaction Server (MTS) or COM+.
OraOLEDB Installation
Oracle Provider for OLE DB is included as part of your Oracle installation. It contains the features and demos that illustrate how to use this product to solve real-world problems.
During the installation process, the following files are installed on the system. Some files have ver in their name to indicate the release version.
Table 1-1 Oracle Provider for OLE DB Files
File
Description
Location
OraOLEDB ver .dll
Oracle Provider for OLE DB
OraOLEDBrfc ver .dll
Oracle rowset file cache manager
OraOLEDBrmc ver .dll
Oracle rowset memory cache manager
OraOLEDBrst ver .dll
OraOLEDBgmr ver .dll
Oracle ODBC SQL parser
OraOLEDB lang ver .dll
where lang is the required language
Language-specific resource DLL
OraOLEDBpus ver .dll
OraOLEDButl ver .dll
OraOLEDB utility DLL
OraOLEDB ver .tlb
OraOLEDB type library
OraOLEDB header file
OraOLEDB ver .lib
OraOLEDB library file
OraOLEDB lang .msb
where lang is the required language
Language-specific message file
Component Certifications
Oracle provides support information for components on various platforms, lists compatible client and database versions, and identifies patches and workaround information.
Find the latest certification information at My Oracle Support (formerly Oracle MetaLink ):
Connecting to Oracle Database Exadata Express Cloud Service
Oracle Provider for OLE DB supports connecting to Oracle Database Exadata Express Cloud Service.
Oracle Provider for OLE DB does not support the following features when connecting to Oracle Database Exadata Express Cloud Service:
Contributing Authors: Janis Greenberg, Alex Keh, Eric Belden, Riaz Ahmed, Kiminari Akiyama, Christian Shay, Valarie Moore, Neeraj Gupta, Sinclair Hsu, Gopal Kirsur, Sunil Mushran, Rajendra Pingte, Helen Slattery, Vikhram Shetty, Sujith Somanathan, Mark Williams
This software and related documentation are provided under a license agreement containing restrictions on use and disclosure and are protected by intellectual property laws. Except as expressly permitted in your license agreement or allowed by law, you may not use, copy, reproduce, translate, broadcast, modify, license, transmit, distribute, exhibit, perform, publish, or display any part, in any form, or by any means. Reverse engineering, disassembly, or decompilation of this software, unless required by law for interoperability, is prohibited.
The information contained herein is subject to change without notice and is not warranted to be error-free. If you find any errors, please report them to us in writing.
If this is software or related documentation that is delivered to the U.S. Government or anyone licensing it on behalf of the U.S. Government, then the following notice is applicable:
U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are «commercial computer software» pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs. No other rights are granted to the U.S. Government.
This software or hardware is developed for general use in a variety of information management applications. It is not developed or intended for use in any inherently dangerous applications, including applications that may create a risk of personal injury. If you use this software or hardware in dangerous applications, then you shall be responsible to take all appropriate fail-safe, backup, redundancy, and other measures to ensure its safe use. Oracle Corporation and its affiliates disclaim any liability for any damages caused by use of this software or hardware in dangerous applications.
Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.
Intel and Intel Xeon are trademarks or registered trademarks of Intel Corporation. All SPARC trademarks are used under license and are trademarks or registered trademarks of SPARC International, Inc. AMD, Opteron, the AMD logo, and the AMD Opteron logo are trademarks or registered trademarks of Advanced Micro Devices. UNIX is a registered trademark of The Open Group.
This software or hardware and documentation may provide access to or information about content, products, and services from third parties. Oracle Corporation and its affiliates are not responsible for and expressly disclaim all warranties of any kind with respect to third-party content, products, and services unless otherwise set forth in an applicable agreement between you and Oracle. Oracle Corporation and its affiliates will not be responsible for any loss, costs, or damages incurred due to your access to or use of third-party content, products, or services, except as set forth in an applicable agreement between you and Oracle.
Настройка связанного сервера с Oracle в Microsoft SQL Server
В Microsoft SQL Server есть возможность обращения к различным источникам данных, которые расположены вне SQL сервера, это возможно благодаря технологии связанных серверов и сегодня мы с Вами рассмотрим пример настройки связанного сервера с СУБД Oracle.
Подробно о том, что такое связанный сервер, а также простые примеры настройки связанных серверов мы с Вами рассматривали в материале – Связанные серверы в MS SQL Server 2014.
Сейчас как я уже сказал, мы будем настраивать связанный сервер, источником данных которого будет выступать СУБД Oracle.
Прежде чем начать хотелось бы сказать, что для настройки связанных серверов используются так называемые «Провайдеры» или «Поставщики», которых на самом деле много. Для связи с Oracle существует несколько поставщиков, например:
Microsoft OLE DB Provider for Oracle (MSDAORA) – как не трудно догадаться его разработчиком является компания Microsoft;
Oracle Provider for OLE DB (OraOLEDB.Oracle) – данный провайдер разработала сама компания Oracle для связи со своей СУБД.
Все рекомендуют использовать провайдер от Oracle, в том числе и я, основываясь на собственном опыте. Так как OraOLEDB.Oracle более оптимизирован для работы с Oracle, например, как-то раз при использовании провайдера MSDAORA текстовые данные на русском языке (VARCHAR2) с сервера Oracle приходили мне в виде «. », после недолгого шаманства пришлось сменить провайдера.
Поэтому сегодня мы будем рассматривать пример настройки связанного сервера с использованием Oracle Provider for OLE DB (OraOLEDB.Oracle) от компании Oracle.
Практически для любого поставщика требуются какие-то инструменты, чтобы он функционировал, в том числе и для OraOLEDB.Oracle.
Для того чтобы провайдер OraOLEDB.Oracle работал его необходимо установить, предварительно скачав с официального сайта Oracle.
Как скачать Oracle Provider for OLE DB (OraOLEDB.Oracle)?
Oracle Provider for OLE DB на текущий момент распространяется в составе инструмента для разработчиков ODAC.
Oracle Data Access Components (ODAC) – это набор компонентов для разработчиков, который предоставляет им доступ к данным Oracle.
Чтобы его скачать, необходимо зарегистрироваться на сайте Oracle или если Вы уже зарегистрированы, то войти в аккаунт. Затем переходите на страницу загрузки ODAC вот она.
Потом в зависимости от Вашей системы (т.е. на которой установлен MS SQL Server), Вы выбираете 32 битную версию или 64 битную. У меня система 64 битная, поэтому я нажимаю на ссылку 64-bit ODAC Downloads.
После перехода на следующую страницу сразу соглашаетесь с условиями лицензионного соглашения, т.е. отмечаете пункт «Accept License Agreement».
Далее Вы выбираете версию ODAC, которая соответствует версии СУБД Oracle.
При этом название файлов с префиксом «Xcopy» означает, что установка будет осуществляться посредством пакетных файлов (батников). Если такого префикса нет, то в данном архиве присутствует некий дистрибутив с графическим интерфейсом.
Итак, как я уже сказал у меня версия Oracle Express Edition 11g, поэтому я выбираю 64-bit ODAC 11.2 Release 5 (11.2.0.3.20) for Windows x64 – это вариант с установкой через графический интерфейс.
В итоге у меня загрузился файл ODAC1120320_x64.zip
Установка Oracle Data Access Components (ODAC)
Распаковываем архив и запускам файл setup.exe.
Шаг 1
Запустится программа установки ODAC, на первом окне мы нажимаем «Next».
Шаг 2
Затем оставляем по умолчанию, т.е. нам нужна установка клиентской части, жмем «Next».
Шаг 3
Далее, если хотите, можете указать каталог для установки ODAC, я предварительно создал папку «OracleOleDB» на диске C специально для этих целей, поэтому я ее и выбираю, жмем «Next».
Шаг 4
Теперь нам необходимо выбрать компоненты, которые мы хотим установить, в нашем случае нам нужен только Oracle Provider for OLE DB и, конечно же, Oracle Instant Client, с остальных компонентов снимаем галочку и жмем «Next».
Шаг 5
Проверяем все параметры установки и жмем «Install».
В итоге начнется процесс установки.
Он будет завершен, когда появится следующее сообщение, жмем «Exit».
Шаг 6
После того как установился провайдер Oracle Provider for OLE DB нам необходимо в каталог «C:\OracleOleDB\product\11.2.0\client_1\Network\Admin» (в моем случае) скопировать файл tnsnames.ora с сервера Oracle (из каталога …\network\ADMIN) или создать самим такой файлик и вписать в него настройки подключения, которые нам сообщит администратор Oracle, например, у меня для Express Edition они вот такие.
В данном каталоге есть папка Sample, в которой есть пример заполнения файла tnsnames.ora.
После установки Oracle Provider for OLE DB необходимо перезагрузить сервер.
Проверка работы провайдера OraOLEDB.Oracle
Перед тем как переходить к созданию связанного сервера на Microsoft SQL Server необходимо проверить правильно ли мы установили провайдера. Это можно сделать следующим образом. Создайте на рабочем столе простой текстовый файл, например, TestConnect.txt, затем измените его расширение на TestConnect.udl
Запустите его, и у Вас откроется окно «Свойства канала передачи данных». Далее Вам необходимо на вкладке «Поставщик данных» выбрать поставщика, т.е. в нашем случае это «Oracle Provider for OLE DB» и нажать «Далее».
После чего Вы перейдете на вкладку «Соединение», где нужно заполнить параметры подключения:
Источник данных — адрес сервера Oracle;
Пользователь – это пользователь для подключения к СУБД Oracle;
Пароль – соответственно пароль для подключения к СУБД Oracle.
И для проверки связи нажимаем «Проверить соединение».
Если у Вас появилось сообщение «Проверка соединения выполнена», то можете переходить к созданию связанного сервера, если нет, то у Вас что-то с провайдером или с сервером Oracle.
Создание связанного сервера с использованием провайдера OraOLEDB.Oracle
Для того чтобы создать связанный сервер в Microsoft SQL Server запустите среду Management Studio.
Сначала давайте у провайдера изменим один параметр под названием «AllowInProcess» или «Допускать в ходе процесса», так как этого требует провайдер OraOLEDB.Oracle. В остальных случаях не рекомендуется использовать данную опцию, так как в этом случае если произойдет сбой провайдера, то и весь SQL сервер даст сбой.
Для этого в обозревателе объектов найдите контейнер «Объекты сервера -> Связанные серверы-> Поставщики», откройте его и найдите наш провайдер OraOLEDB.Oracle. Щелкните правой кнопкой мыши и откройте «Свойства».
Отметьте вышеуказанный параметр, т.е. «Допускать в ходе процесса» и нажмите «ОК».
Теперь переходим непосредственно к созданию так называемого Linked-сервера.
Щелкаем правой кнопкой мыши по контейнеру «Связанные серверы» и выбираем «Создать связанный сервер».
Затем вводим параметры связанного сервера, а именно:
Связанный сервер – имя сервера, т.е. название объекта к которому мы будем обращаться из своих SQL инструкций;
Поставщик – провайдер, т.е. Oracle Provider for OLE DB;
Название продукта – Oracle;
Источник данных – это SID, к которому мы будем подключаться на сервере Oracle (должен быть прописан в файле TNSNAMES.ORA);
Потом переходим на вкладку «Безопасность», выбираем пункт «Устанавливать с использованием следующего контекста безопасности» и вводим логин и пароль от СУБД Oracle. Жмем «ОК».
Все готово, связанный сервер мы создали, и он у нас отобразился в списке связанных серверов в Management Studio. Теперь мы можем обращаться (посылать запросы) к этому связанному серверу, например, у меня на сервере Oracle есть таблица ORACLETABLE, которая содержит просто какой-то список товаров, и для того чтобы осуществить выборку данных из этой таблицы с помощью Management Studio SQL сервера, можно использовать следующие запросы.
Если Вы предпочитаете пользоваться SQL инструкциями, то ниже представлена инструкция, которая делает ровно то же самое что и мы чуть ранее в графическом интерфейсе SSMS.
Устранение возможных ошибок при создании связанного сервера с Oracle в Microsoft SQL Server
Ошибка 7302
«Не удалось создать экземпляр поставщика OLE DB «OraOLEDB.Oracle» для связанного сервера …»
Возможно, отсутствует (или некорректный) путь к каталогу с Instant Client (каталог в который Вы установили ODAC) в системной переменной PATH. Необходимо его прописать и перезапустить SQL сервер. Также возможно параметр ORACLE_HOME задан неверно.
Ошибка 7303
Данная ошибка возвращается SQL сервером в случае, когда не удалось проинициализировать объект источника данных поставщика OLE DB, например, в нашем случае «OraOLEDB.Oracle». Причин, по которым она появляется много, поэтому нам необходимо смотреть ошибку, которую вернул сам провайдер.
Ошибки при инициализации провайдера OraOLEDB.Oracle
ORA-12154: TNS:could not resolve the connect identifier specified
Файл tnsnames.ora отсутствует или в нем указан несуществующий SID и SERVICE_NAME. Также возможно Вы неправильно ввели его при создании связанного сервера в строке «Источник данных».
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
В файле tnsnames.ora неправильно введен SERVICE_NAME
ORA-12533: TNS:illegal ADDRESS parameters
Некорректное название параметров в файле tnsnames.ora (например, ADDRESS).
ORA-12541: TNS:no listener
Ошибка означает, что у Вас в файле tnsnames.ora неправильно указан PORT, на котором работает сервер Oracle. Необходимо узнать на каком порту работает сервер Oracle, и указать его в этом параметре.
ORA-12545: Connect failed because target host or object does not exist
Данная ошибка возвращается тогда, когда в файле tnsnames.ora неправильно указан (или просто недоступен) сервер Oracle, т.е. параметр HOST. В данном случае необходимо: проверить данный параметр, проверить доступность сервера.
В случае если у Вас в каких-нибудь сообщениях выскакивает провайдер OLE DB «MSDAORA» (или любой другой провайдер или вообще он не указан), то это означает, что Вы неправильно выбрали провайдера при создании связанного сервера. MSDAORA – это провайдер от компании Microsoft. OraOLEDB.Oracle – от компании Oracle, как я говорил, рекомендовано использовать провайдер от Oracle.
Теперь давайте рассмотрим несколько ошибок, которые могут возникнуть уже после создания связанного сервера, т.е. связанный сервер создан, но при обращении к его объектам возникает ошибка.
Ошибка 7314
«Поставщик OLE DB «OraOLEDB.Oracle» для связанного сервера «Название сервера» не содержит таблицы «Название таблицы». Таблица либо не существует, либо текущий пользователь не имеет разрешения на доступ к ней.»
Здесь Вы, наверное, ошиблись в написании самого объекта, например, написали имя объекта в неправильном регистре. Oracle чувствителен к регистру, если к нему обращаться через ссылку связанного сервера, например
В этом случае если таблица OracleTable на сервере Oracle создана как ORACLETABLE, у Вас возникнет ошибка. Чтобы этого избежать, можно указать правильный регистр или использовать конструкцию OPENQUERY, например
Также не исключено что объекта действительно нет или у Вас отсутствуют необходимые разрешения.
Для того чтобы посмотреть, какие объекты и в каком регистре есть на сервере (т.е. узнать точное имя) можно использовать процедуру sp_tables_ex, например
Ошибка 7356
«Поставщик OLE DB «MSDAORA» для связанного сервера «Название сервера» предоставил несогласованные метаданные для столбца.»
Данную ошибку я встречал у поставщика MSDAORA, когда пытался обратиться к таблице, в которой нет данных, т.е. она пустая (нет строк). Эту ошибку можно избежать, если использовать конструкцию OPENQUERY.
Ошибка 7357
«Не удалось обработать объект «Название объекта». Поставщик OLE DB «OraOLEDB.Oracle» для связанного сервера «Название сервера» обнаружил, что у объекта либо нет ни одного столбца, либо текущий пользователь не имеет разрешения на доступ к объекту.»
В данном случае скорей всего Вы пытаетесь обратиться к таблице (или другому объекту) от имени пользователя, который не имеет разрешения на доступ к ней. Другими словами, у пользователя, которого Вы указывали при создании связанного сервера, нет необходимых прав.
Заметка! Если Вас интересует язык SQL, рекомендую почитать мою книгу «SQL код», которая ориентирована на изучение SQL как стандарта, после прочтения книги Вы сможете писать SQL запросы в любой системе управления базами данных.