Oracle data access
Oracle Data Access Components (ODAC) версия 5.0
Компоненты для доступа к Oracle. Поддержка Delphi 8 и Oracle 10g.
Oracle Data Access Components (ODAC) library offers some nonvisual components for Borland Delphi , C++ Builder and Kylix . They serve for access to Oracle RDBMS. ODAC is an alternative to standard way processing data by Borland Database Engine (BDE).
ODAC uses Oracle Call Interface (OCI) directly. The Oracle Call Interface is an application programming interface (API) that allows an application developer to use a third-generation language’s native procedure or function calls to access the Oracle database server and control all phases of SQL statement execution. The OCI provides a library of standard database access and retrieval functions in the form of a dynamic runtime library, ORA*.DLL, that can be linked in by the application.
Also with Net option ODAC allows to connect without Oracle client software installed on workstation. In such case ODAC requires only TCP/IP protocol and allows to build really thin database application.
Using BDE in Oracle oriented client/server applications has some deficiencies. So in consequence of BDE community get unable server specific features, use more resources, reduce speed of processing data, cumbrous distribution of an application and its administration.
In case of using BDE transfer way of data is:
[Oracle RDBMS] <> [SQL*Net] <> [OCI] <> [SQL Links] <> [BDE] <> [Application]
ODAC works directly through Oracle Call Interface. It allows to avoid using BDE and SQL Links. Thus transfer way reduces considerably:
[Oracle RDBMS] <> [SQL*Net] <> [OCI] <> [Application]
ODAC Net provides optimal transfer way:
[Oracle RDBMS] <> [TCP/IP] <> [Application]
ODAC includes following components:
- TOraSession — controls server connection;
- TOraQuery — queries execution, operates record set, flexible way updating database tables;
- TSmartQuery — easy in using and an alternative to TOraQuery, automatically builds INSERT, DELETE, UPDATE queries, automatic locking and refreshing records;
- TOraSQL — executes SQL statements, PL/SQL blocks, stored procedure;
- TOraTable — allows to retrieve and update data single table without writing SQL statement;
- TOraStoredProc — executes stored procedures and functions, allows to edit cursor data returned as parameter;
- TOraNestedTable — controls nested table’s data;
- TOraProvider — provides data to and applies updates from a client dataset;
- TOraScript — executes sequence of SQL and PL/SQL statements;
- TOraAlerter — allows to transfer messages between sessions;
- TOraLoader — provides quick loading data to Oracle database;
- TOraSQLMonitor — allows to monitor dynamic SQL executing in ODAC based applications;
- TOraErrorHandler — translates error messages;
- TBDESession — allows to integrate ODAC components into BDE based application;
- TConnectDialog — serves for enter username, password and server name;
- TVirtualTable — dataset stores data in memory.
Following list describes the main features of Oracle Data Access Components:
- Direct access to Oracle data. No distributing, installing and configuring the BDE and ODBC;
- Doesn’t require Oracle’s software on client side with Net option and works directly through TCP/IP;
- Extended Oracle data types support including XML types, LOB’s, objects, nested tables, references, timestamps and intervals;
- High performance controlled fetch of large data blocks;
- Optimized string and raw data storing;
- Easy work with Unicode data;
- Automatic data updating with TSmartQuery and TOraTable components;
- Automatic record locking and refreshing;
- NonBlocking mode allows to run long lasting background queries in separate threads;
- Oracle 9i scrollable cursors support;
- Transparent Application Failover support;
- Supports many Oracle specific features such as alerts, pipes and Direct Path interface;
- Separated run-time and GUI specific parts allow to create pure console applications such as CGI;
- SmartRefresh option allows two or more datasets to be synchronized automatically;
- Advanced design-time editors;
- OraTools Add-in extending design-time capabilities by set of tools to build and check queries, design and debug PL/SQL blocks and explore database schemas;
- Extended SQL tracing capabilities provided by TOraSQLMonitor component and DBMonitor application;
- Wide data-aware and reporting components support;
- Easy migration from BDE;
- Allows to use Professional Edition of Delphi, C++ Builder or Kylix to develop client/server applications.
ODAC supports Oracle 10g, 9i, 8i, 8.0 and 7.3 including Personal and Lite. Following IDE are supported by ODAC: Borland Delphi 8, 7, 6 and 5, C++ Builder 6 and 5, Kylix 3 and 2. Only Professional and Enterprise editions are supported. ODAC does not support Kylix Open Edition.
Почему Oracle.ManagedDataAccess не работает, когда Oracle.DataAccess работает?
Я разрабатываю очень простое приложение, которое собираюсь использовать для устранения неполадок, возникающих на нескольких машинах, но еще до того, как я добрался до этого места, я столкнулся с несколькими проблемами, включая различия в архитектуре cpu и библиотеки баз данных Oracle.
У меня есть сервер базы данных , указанный в tnsnames.ora , который находится в моем каталоге C:oracle11gnetworkadmin . Если я tnsping этот сервер я получаю желаемый ответ. Если я закодирую свою программу C# для подключения к этому серверу с помощью следующего кода, используя Oracle.DataAccess.Client,она работает.
Однако Oracle.DataAccess зависит от архитектуры системы, на которой он работает. Я видел, что есть еще одна библиотека Oracle.ManagedDataAccess, которая не зависит от архитектуры. Когда я использую эту библиотеку, она больше не может подключаться к серверу. Выбрасывается ORA-12545: Network Transport: Unable to resolve connect hostname .
Почему это так происходит? Что отличается между этими двумя библиотеками, потому что, основываясь на том, что я читал до сих пор, это не должно быть проблемой.
- %ORACLE_HOME% и %TNS_ADMIN% являются NOT определенными (помните, что tnsping и Oracle.DataAccess работают)
- PATH имеет C:oracle11gBIN определенное значение.
- На моей машине есть только один файл tnsnames.ora
Если я перемещаю tnsnames.ora в то же место, что и мой файл .exe, это работает. Почему Oracle.DataAccess может найти tnsnames.ora в каталоге C:oracle11gnetworkadmin , а Oracle.ManagedAccess-нет?
8 Ответов
Порядок приоритета для разрешения имен TNS в ODP.NET управляемом драйвере следующий (см. здесь ):
- псевдоним источника данных в разделе ‘dataSources’ под разделом в файле конфигурации .NET.
- псевдоним источника данных в файле tnsnames.ora в расположении, указанном параметром ‘TNS_ADMIN’ в файле конфигурации .NET.
- псевдоним источника данных в файле tnsnames.ora, находящемся в том же каталоге, что и файл .exe.
- псевдоним источника данных в файле tnsnames.ora присутствует в %TNS_ADMIN% (где %TNS_ADMIN%-это параметр переменной окружения).
- псевдоним источника данных в файле tnsnames.ora присутствует в %ORACLE_HOME%networkadmin (где %ORACLE_HOME%-параметр переменной окружения).
Я полагаю, что причина, по которой ваш пример работает с Oracle.DataAccess, но не с Oracle.ManagedDataAccess, заключается в том, что конфигурация на основе реестра Windows не поддерживается для последней (см. документацию ) — установка ODP.NET устанавливает ключ реестра ORACLE_HOME (HLKMSOFTWAREOracleKey_NAMEORACLE_HOME), который распознается только неуправляемой частью.
Попробуйте добавить путь к tnsnames.ora в конфигурационный файл:
Чтобы избежать всей путаницы с Oracle, не зная, где он ищет TNSNAMES.ORA (у меня есть добавленная путаница из нескольких версий Oracle и 32/64 бит), вы можете скопировать настройку из существующего TNSNAMES.ORA в свой собственный конфигурационный файл и использовать его для подключения.
Скажем, вы довольны ссылкой ‘DSDSDS’ в TNSNAMES.ORA, которая соответствует чему-то вроде:
Вы можете взять текст после первого ‘=’ и использовать его везде, где вы используете ‘DSDSDS’, и ему не нужно будет искать TNSNAMES.ORA, чтобы знать, как подключиться.
Теперь ваша строка подключения будет выглядеть следующим образом:
string connectionString = «Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(Host=DSDSDSHost)(Port=4521)))(CONNECT_DATA=(SERVICE_NAME=DSDSDSService)));User Id=UNUNUN;Password=PWPWPW;»;
Как только я нашел, какой формат он искал в строке подключения, он работал просто отлично, как это было с Oracle.ManagedDataAccess. Без необходимости возиться с чем-то отдельно.
У меня был похожий issue. to решить это то, что я сделал, чтобы удалить ODP. Net и переустановите в том же каталоге, что и oracle server. with server option вы заметите, что большинство продуктов уже установлены (в то время как установка базы данных 12c), поэтому просто выберите другие функции и, наконец, завершите установку.
Обратите внимание, что этот обходной путь работает только в том случае, если вы установили 12c на той же машине, т. е. на вашем ноутбуке.
Если ваша база данных находится на сервере, отличном от вашего ноутбука, то, Пожалуйста, выберите опцию клиент, а не сервер, а затем включите TNS_ADMIN в свой app.config и не забудьте указать версию.
так как моя установка находится на моем ноутбуке, так что мой App.config, как показано ниже:
A «little» опаздывает на вечеринку, но реальный ответ на это — если вы используете Oracle.ManagedDataAccess ODP.NET провайдера , вы должны забыть о таких вещах , как networkadmin , Oracle client , Oracle_Home и т. д.
Вот что вам нужно
- Загрузите и установите инструменты разработчика Oracle для VS или ODAC . Примечание-Dev tools установит ODAC для вас. Это создаст относительно небольшую установку под C:Program Files (x86) . С полным набором инструментов для разработки, менее 60 Мб
- В вашем проекте вы установите пакет Nuget с соответствующей версией ODP.net (Oracle.ManagedDataAccess.dll) , на которую вы будете ссылаться
На данный момент у вас есть 2 варианта подключения.
а) в строке подключения Установите datasource в следующем формате
DataSource=ServerName:Port/SID . . . или DataSource=IP:Port/SID . . .
b) создайте файл tnsnames.ora (только он будет отличаться от предыдущего опыта). У входа в нее:
AAA = (DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ServerNameOrIP)(PORT = 1521))
(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = SIDNAME)))
И поместите этот файл в папку bin, откуда запускается ваше приложение. Теперь вы можете подключиться, используя свое имя соединения- DataSource=AAA . . . так что, хотя у вас есть tnsnames.ora , с ODP.net управляемым он работает немного по — другому-вы создаете локальный файл TNS. И теперь им легко управлять.
Подводя итог — с управляемым, нет необходимости в тяжелом клиенте Oracle, Oracle_home или знании глубины папок установки oracle. Все может быть сделано в ваших структурах приложения .net.
В моем случае все сказанное выше было OK, но я все еще получал ORA-12545: Network Transport: Unable to resolve connect hostname
Я попытался пропинговать машину Oracle и обнаружил, что не могу ее видеть, и добавил ее в файл hosts. Затем я получил еще одно сообщение об ошибке ORA-12541: TNS:no listener . После расследования я понял, что пингуя одно и то же имя хоста с разных машин, получая разные адреса IP (я не знаю, почему), и я изменил адрес IP в моем файле хоста, что решило проблему на 100%.
Я беспокоюсь о том, чтобы написать свой опыт, как это кажется очевидным, но, хотя я был уверен, что проблема заключается в вышеуказанных настройках, я совершенно забыл проверить, действительно ли я вижу удаленную машину DB. Имейте это в виду, когда у вас нет идей, что происходит.
Эти ссылки мне очень помогли:
Я получил то же самое сообщение об ошибке. Чтобы решить эту проблему, я просто заменил Oracle.ManagedDataAccess assembly на более старый Oracle.DataAccess assembly. Это решение может не работать, если Вам требуются новые функции, найденные в новом assembly. В моем случае у меня есть еще много проблем с более высоким приоритетом, чем попытка настроить новый Oracle assembly.
Похожие вопросы:
У меня возникла странная проблема с момента установки последней версии ODAC, 11.2.0.2.1. Я установил как 32-битную, так и 64-битную версии, поскольку разрабатываю приложения для обеих архитектур.
Обзор Я хочу заменить Oracle.DataAccess на Orcale. Управляемый DataAccess, но открытие соединения с последним вызывает конец сетевого сеанса ORA-12537 исключения файла . Сообщение об исключении /.
Что именно является минимальным требованием, чтобы получить .NET 4.6 приложение работает с Oracle? Мы уже используем клиент Oracle.ManagedDataAccess. Мы используем Entity Framework, а также DataSets.
У меня возникли проблемы с Oracle.DataAccess в WPF . Я использовал Oracle.DataAccess v4.0 без каких-либо проблем. Но теперь он обновился до версии 4.112, и когда я добавляю ссылку на эту версию в.
Я делаю asp.net mvc3, и у меня есть проблема с ODP.NET, Oracle.DataAccess. Всякий раз, когда я пытаюсь сделать свой модульный тест, он бросает FileNotFoundException. Я думал, что установил и.
Я пишу приложение .Net, которое работает поверх базы данных Oracle 11.2.0.2.0, которая хранит даты в Столбцах типа TIMESTAMP(6) WITH LOCAL TIME ZONE. Если в столбце хранится дата и она попадает в.
База данных Oracle Database для начинающих: основы базы данных
Как Вам уже должно быть известно из предыдущих статей блога, материализованные представления очень полезны, но их создание и обслуживание — задача не тривиальная. Спроектировать оптимальное и наилучшее материализованное представление не так-то просто. Для определения того, какие нужно создать материализованные представления, журналы материализованных представлений, индексы и секционированные таблицы, можно с помощью SQL Access Advisor. Этот инструмент может также порекомендовать удаление определенных индексов для повышения производительности.
Для чего нужен SQL Access Advisor?
В дополнение к выдаче рекомендаций относительно создания новых материализованных представлений (а также индексов) и помощи в реализации этих рекомендаций, SQL Access Advisor также поможет оптимизировать материализованные представления, гарантируя переписывание запросов и делая материализованное представление быстро обновляемым.
Для определения идеальных материализованных представлений и индексов SQL Access Advisor может пользоваться одним из следующих источников SQL:
- гипотетическая рабочая нагрузка базы данных;
- действительная нагрузка, обеспеченная вами;
- кэш SQL.
Рабочую нагрузку можно также фильтровать в соответствии с критерием, например, иметь дело с запросами, которые содержат только определенную таблицу или таблицы.
Инструмент SQL Access Advisor можно применять вручную, вызывая определенные процедуры, относящиеся к пакету DBMS_ADVISOR. Вдобавок, можно воспользоваться “интеллектуальным” ярлыком, вызывая SQL Access Advisor через интерфейс OEM Database Control (или OEM Grid Control).
Получить быстрые рекомендации относительно отдельного оператора SQL легко с помощью процедуры QUICK_TUNE из DBMS_ADVISOR. В следующих разделах рассматриваются все три метода, начиная с простейшего — применения OEM Database Control.
Использование OEM Database Control
При вызове инструмента SQL Access Advisor из OEM Database Control он работает точно так же, как в случае обращения к нему напрямую через пакет DBMS_ADVISOR.Это объясняется тем, что внутренняя функциональность OEM полагается на пакет DBMS_ADVISOR. В качестве источника рабочей нагрузки SQL Access Advisor на вход можно передавать рабочую нагрузку, определенную пользователем, текущий и несколько последних SQL-операторов из кэша SQL или же репозиторий SQL.
Использование SQL Access Advisor через OEM приводит к созданию задач и просмотру рекомендаций с помощью интуитивно понятного мастера SQL Access Advisor. На нескольких страницах мастера вводятся операторы SQL, которые будут использовать материализованное представление. Вызов этого мастера осуществляется через ссылку Advisor Central на домашней странице Database Control (в разделе Related Links (Связанные ссылки), находящемся внизу страницы). Можно также обратиться к нему через ссылки, представленные на индивидуальных страницах сигналов (alerts) или производительности.
Совет. SQL Access Advisor может также работать в оценочном (evaluation) режиме. При этом он будет оценивать существующие индексы и материализованные представления, и сообщать о том, какие из них используются базой данных.
Для запуска SQL Access Advisor через Database Control выполните перечисленные ниже шаги.
- Очистите кэш SQL.
- Выдайте необходимые привилегии.
- Создайте кэш SQL.
- Получите рекомендации от SQL Access Advisor.
- Просмотрите эти рекомендации.
- Реализуйте их.
Создание кэша
Первый шаг предусматривает сброс разделяемого пула для очистки кэша от старых операторов SQL:
Выдача необходимых привилегий
Затем потребуется выдать пользователю привилегию ADVISOR, чтобы он мог обращаться к SQL Access Advisor:
Создание кэша SQL
Для предоставления нагрузка SQL можно воспользоваться одним из ранее упомянутых методов. В данном примере нагрузка создается тремя операторами SQL, которые становятся частью кэша SQL. Подключитесь как пользователь SH и запустите операторы SQL, показанные в листинге ниже.
Совет. SQL Access Advisor может оказаться довольно прожорливым по части ресурсов, и отрицательно повлиять на производительность рабочей базы данных. Чтобы избежать этого, просто соберите необходимые данные, касающиеся рабочей нагрузки, с рабочей базы данных и применяйте их на тестовой базе данных для запуска шагов анализа и выдачи рекомендаций SQL Access Advisor.
Получение рекомендаций SQL Access Advisor
На предыдущем шаге была создана рабочая нагрузка SQL. Используя эту нагрузку, SQL Access Advisor сформулирует рекомендации относительно необходимых материализованных представлений. Зайдите в OEM Database Control с привилегиями SYSDBA и выполните следующие шаги.
1. Перейдите на домашнюю страницу OEM, щелкните на ссылке Advisor Central (Центр советников) в разделе Related Links (Связанные ссылки) и затем на SQL Access Advisor (Советник по доступу SQL).
2. Отобразится страница Initial Options (Начальные параметры). Здесь можно выбирать из двух вариантов.
- Параметры по умолчанию. Ваша задача будет использовать параметры, рекомендованные Oracle.
- Унаследованные параметры. Ваша задача унаследует параметры от выбранной задачи или шаблона.Для рассматриваемого примера выберите Use Default Options (Использовать параметры по умолчанию) и щелкните на Next (Далее).
3. Отобразится страница Workload Source (Источник рабочей нагрузки). На этой странице потребуется выбрать один из следующих вариантов нагрузки SQL.
- Current and Recent SQL Activity (Текущая и недавняя активность SQL)
- Import Workload from SQL Repository (Импорт рабочей нагрузки из репозитория SQL)
- Create a Hypothetical Workload from the Following Schemas and Tables (Создание гипотетической рабочей нагрузки из следующих схем и таблиц) Вы уже выполнили три оператора SQL, которые хотите использовать в качестве рабочей нагрузки, поэтому выберите опцию Current and Recent SQL Activity.
4. Щелкните на Filter Options (Параметры фильтра) для тонкой настройки контекста рабочей нагрузки SQL. Выберите в Filter Options вариант Filter Workload (Рабочая нагрузка). В разделе USERS (Пользователи) выберите вариант Only SQL Statements Executed by These Users (Только SQL-операторы, выполненные этими пользователями). В поле Users (Пользователи) введите SH.
5. Отобразится страница Recommendation Types (Рекомендованные типы) с двумя разделами: Recommendation Types (Рекомендованные типы) и Advisor Mode (Режим советника). В разделе Recommendation Types потребуется выбрать один вариант из следующих:
- Indexes (Индексы)
- Materialized Views (Материализованные представления)
- Both Indexes and Materialized Views (Индексы и материализованные представления)
- Partitioned Tables (Секционированные таблицы)
- Evaluation Only (Только оценка)
Поскольку наша цель — создание материализованных представлений, выберем второй вариант.
В разделе Advisor Mode выберите один из следующих двух режимов для SQL Access Advisor.
- Limited Mode (Ограниченный режим). Этот режим быстрее и обрабатывает только запросы высокой стоимости.
- Comprehensive Mode (Полный режим). Этот режим длится дольше, но выполняет тщательный анализ. Полный режим требователен к ресурсам, поэтому не стоит запускать его на рабочей базе посреди дня.
Выберите вариант Limited Mode.
6. Отобразится страница Schedule (График). Эта страница позволит запустить анализ немедленно или запланировать его на запуск позднее, в определенное время. В поле Task Name (Имя задания) в верхней части страницы можно ввести имя задания SQL Access Advisor. Перейдите вниз страницы и выберите Immediately (Немедленно) под опцией Start (Запуск). Щелкните на Next.
7. Далее появится страница Review (Обзор), где можно подтвердить выбор перед тем, как Advisor начнет работу.
8. Затем отображается страница Advisor Central (Центр советников) с сообщением об успешном создании задания SQL Access Advisor.
Просмотр рекомендаций Access Advisor
Как только SQL Access Advisor успешно завершит свою работу, вы сможете просмотреть рекомендации и решить, имеет ли смысл их реализовывать. Выполните перечисленные ниже шаги.
- На странице Advisor Central (см. пункт 8 в предыдущем разделе) перейдите к разделу Results (Результаты) в нижней части страницы и выберите имя вашей задачи. Щелкните на View Result (Просмотреть результаты).
- Появится страница Results for Task: номер задания (Результаты для задания: номер задания). Щелкните на Recomendation ID 1 (Идентификатор 1 рекомендации), чтобы увидеть детальные рекомендации.
- Измените имя схемы для создания материализованного представления (Schema Name for the Create Materialized View) на SH и щелкните на OK.
- На следующей странице щелкните на Show SQL (Просмотреть SQL) для просмотра сценария генерации материализованного представления и затем на OK.
Реализация рекомендаций SQL Access Advisor
Чтобы реализовать полученные рекомендации, выполните следующие шаги.
- Щелкните на Schedule Implementation (Реализация рекомендации) на странице Results for Task.
- Введите имя задания и щелкните на Submit (Отправить).
- Щелкните на View (Просмотреть), чтобы увидеть, запущено ли ваше задание.
- Просмотрите итоги, щелкните на Materialized View (Материализованное представление), введите SH в поле схемы и щелкните на Go (Выполнить).
Использование пакета DBMS_ADVISOR
Поскольку OEM Database Control предлагает настолько интуитивно понятный интерфейс для использования SQL Access Advisor с целью генерации рекомендаций относительно индексов и материализованных представлений, трудоемкие шаги, которые нужно будет выполнить для вызова SQL Access Advisor непосредственно через пакет DBMS_ADVISOR, слишком подробно обсуждаться не будут. Ниже дано краткое резюме того, что потребуется сделать при таком подходе.
- Запустите операторы SQL, которые понадобятся для вашего задания.
- Создайте задание с помощью процедуры CREATE_TASK.
- Создайте рабочую нагрузку с использованием процедуры CREATE_SQLWKLD.
- Свяжите задание с рабочей нагрузкой посредством процедуры ADD_SQLWKLD_REF.
- Воспользуйтесь соответствующей процедурой для применения либо гипотетической рабочей нагрузки, либо нагрузки SQL-кэша, либо набора настройки SQL.
- Установите параметры задания с помощью процедуры SET_TASK_PARAMETER.
- Сгенерируйте рекомендации с использованием процедуры EXECUTE_TASK, указав ей имя задания.
- Просмотрите рекомендации в представлении USER_ADVISOR_RECOMENDATIONS.
- Приведем запрос, использующий представление USER_ADVISOR_RECOMENDATIONS для просмотра рекомендаций SQL Access Advisor:
Использование процедуры QUICK_TUNE
Процедуру QUICK_TUNE из пакета DBMS_ADVISOR применяется, когда необходимо настроить единственный оператор SQL. Для этого нужно лишь указать имя задания и сам оператор SQL в качестве параметров процедуры. Вот пример:
Это даст тот же результат, что и выполнение шагов, перечисленных в разделе “Использование пакета DBMS_ADVISOR”.
Как определить, какую версию «Oracle.DataAccess.dll» включить?
При развертывании моей формы Windows.NET 3.5 в разных средах мы запускали множество недопустимых проблем с поставщиком.
Он работает на некоторых и не работает на других.
Может кто-то, пожалуйста, помогите мне, как определить, какую версию «Oralce.DataAccess.dll» использовать, например, 9 или 10 или 11 или 9.1. * или 10.1. * или 11. * или 12 и т.д.
Это зависит от сервера, на котором я устанавливаю приложение? ИЛИ
Зависит ли он от базы данных оракулов на заднем конце?
Во-вторых, понятие использования 100% управляемого поставщика. Это устраняет необходимость знать детали, которые я собираюсь обсудить. Единственная проблема здесь, я думаю, вам может потребоваться перейти на .net 4.0.
- Вместо этого используйте управляемый провайдер 12c 100%.
- Короткий ответ — не смешивать поставщика (Oracle.DataAccess.dll) с другой версией неуправляемого клиента (по крайней мере, не назад).
- Подумайте о перепланировке, чтобы включить уровень обслуживания, который устраняет необходимость наличия поставщика Oracle на клиенте в первую очередь.
Во-первых, давайте позаботимся о том, чтобы понять компоненты старого невозмутируемого провайдера (а не нового 12c 100% управляемого провайдера). Он состоит из двух частей:
- управляемый компонент .net — Oracle.DataAccess.dll
- неуправляемый (не-сетевой) клиент
Проще говоря, Oracle.DataAccess.dll почти просто обертка, переводя команды .net в инструкции ORACLE-NET для неуправляемого клиента.
При этом, когда вы загружаете Oracle.DataAccess, есть порядок, в котором он пытается найти неуправляемые клиентские dll, которые ему нужны. Из Документация Oracle:
Oracle.DataAccess.dll ищет зависимые неуправляемые библиотеки DLL (такие как как клиент Oracle) на основе следующего порядка:
1.Directory приложения или исполняемого файла.
2.DllPath, заданный конфигурацией приложения или web.config.
3.DllPath, заданный machine.config.
4.DllPath, указанный в реестре Windows.
5.Directories, заданные переменной среды Windows PATH.
Это входит в игру, если на компьютере установлено более одного клиента, поэтому это может быть частью вашей проблемы. Если это так, попробуйте сделать это с помощью переменной конфигурации dllPath в вашей конфигурации:
Теперь, чтобы ответить на ваш вопрос напрямую — я не верю, что Oracle поддерживает несовпадение Oracle.DataAccess.dll с клиентом (по крайней мере, не назад). Лучше всего либо установить ODP.net с установкой приложения — xcopy version является самым маленьким и содержит «мгновенный клиент». Или, вы должны думать о минимальных системных требованиях — т.е. Система должна иметь как минимум версию X odp.net. Затем вы можете скомпилировать эту минимальную dll и полагаться на перенаправление политики издателя, когда целевая система имеет версию клиента NEWER.
Конечно, это также побуждает меня спрашивать об архитектуре. Планируете ли вы запросить пользователя для своей учетной записи Oracle? Если нет, вы должны быть осторожны в том, как вы защищаете общую учетную запись, которую будет использовать ваше приложение. Возможно, вам лучше позвонить в веб-сервис, который вызывает вызовы oracle от имени клиентов, — предоставить вам другой уровень безопасности и упростить развертывание вашего клиента.
Большинство версий ODP.net обратная совместимость с сервером базы данных — вы, безусловно, можете использовать поставщика 11g с базой данных 10g.
Прежде всего, уточнение: У вас есть Oracle Database Server (вы называете его «back end oracle database» ) и Oracle Client (независимо от того, установлен ли он на сервере приложений, с точки зрения Oracle, это клиент)
Версия ODP.NET(поставщик данных Oracle для .NET, то есть Oracle.DataAccess.dll и некоторые другие файлы) определяется Oracle Client. Вы можете использовать почти каждую версию ODP.NET для подключения к каждой версии базы данных Oracle — более или менее.
Сообщение об ошибке «Поставщик несовместим с версией клиента Oracle» также может означать, что провайдер ODP.NET не установлен вообще. В этом случае сообщение об ошибке действительно немного вводит в заблуждение. Итак, сначала проверьте, установлен ли ODP.NET вообще, он не включен в стандартную установку Oracle Instant Client.
Когда я проверяю все доступные загрузки из Oracle, у вас есть версия ODP.NET
9.? и 10.? относится к версии Oracle, 1.x, 2.0 и 4.0 относится к версии Microsoft.NET Framwork (странная нумерация, но вот как это). Версия 9.? и 10.? очень старые, я не думаю, что имеет смысл использовать их. 1.x поддерживается до версии клиента Oracle 11.1.
- Если ваш клиент Oracle равен 11,2 или выше, вы должны включить ODP.NET версии 2.0 или 4.0.
- Если ваш клиент Oracle находится между 10.2 и 11.1, вы можете использовать eiter ODP.NET версии 1.x или 2.0
- Если ваш клиент Oracle старше 10.2, я не знаю, как он работает — он устарел в любом случае.
Версия 1.x и 2.0 несовместимы друг с другом, то есть perhpaps вы должны предоставить вашему клиенту два разных файла настроек вашего приложения, и клиент должен выбрать правильный вариант в зависимости от его локальной установки клиента оракула.
Я не знаю ситуации для 2.0 против 4.0, я до сих пор не использовал 4.0.
Не требуется помещать локальную копию файла Oralce.DataAccess.dll в каталог приложения. Он будет взят из GAC (Global Assembly Cache), где он установлен.
В вашем развитии вам нужно только заботиться только об этой версии мэра, например 2.0. Тогда ваш зловредный GAC знает из-за файлов политик, которые загружают точную версию, например. 2.0.10.2.0.2.20 или 2.0.11.1.0.6.20 или 2.0.11.1.0.7.20 или 2.0.11.2.0.1.2 или что-то еще.
Кроме всего прочего, вы должны знать, является ли ваш клиент Oracle 32-битным или 64-битным и соответственно включает ODP.NET.
Здесь вы можете получить дополнительную информацию: Oracle Data Provider для .NET FAQ
Профессия — 1С
Запросы к базе Oracle через ADODB.Connection
рубрики: ADO | Дата: 24 марта, 2017
Недавно столкнулся с необходимостью делать из 1С прямые запросы к базе данных Oracle, используя ADODB.Connection. В этой статье хочу поделиться опытом и рассказать про некоторые особенности с которыми пришлось столкнуться.
Провайдер
Первое, что необходимо для использования ADODB.Connection это наличие в системе провайдера (драйвера), который позволяет подключаться к источнику данных. Для баз данных Oracle существует два драйвера.
Один от компании Microsoft — MSDAORA и второй от Oracle — OraOLEDB. Возможно есть и другие, но мне попадались описания только этих двух. Сразу возникает вопрос как можно проверить установлен ли хоть один из этих драйверов на компьютере. Чтобы понять это можно воспользоваться файлом c расширением *.udl. Если открыть этот файл и перейти на первую закладку — Поставщик данных, то мы увидим перечень всех провайдеров. Как видно на картинке у меня установлен провайдер от Microsoft Microsoft OLE DB Provider for Oracle.
Но я при подключении использовала драйвер от Oracle. Просто из тех соображений, что родной драйвер должен работать лучше. При необходимости можно скачать его с сайта Oracle. Выбираем закладку Downloads, в разделе Enterprise Management пункт See All…
Здесь в разделе Drivers нас интересует пакет Oracle Data Access Components for Windows
Дальше разберетесь сами. Нужно только выбрать правильную разрядность. Не надо только качать пакет где в названии есть Xcopy. В нем используется какая-то полуавтоматическая установка через .bat файлы.
В процессе установки можно выбрать только то, что нас интересует Oracle Provider For OLE DB
Также в процессе установки желательно указать параметры для подключения к серверу с оракловыми базами данных. Или это можно сделать позднее, но для этого придется самостоятельно отредактировать файл tnsnames.ora
После установки откроем наш файл *.udl и теперь мы видим, что на закладке Поставщик данных появилась еще одна строчка с провайдером Oracle Provider for OLE DB
На какой рабочей станции устанавливать драйвер
Теперь немного порассуждаем на каком компьютере должен быть установлен провайдер. Это может отразиться и на выборе разрядности драйвера, о чем говорилось в предыдущем пункте. Раз уж вы читаете эту статью вряд ли вы используете файловый вариант базы 1С, т.к. базы данных Oracle используются как правило очень крупными организациями. Скорее речь идет о клиент-серверном варианте базы 1С. Таким образом мы имеем два варианта.
Либо устанавливать драйвер на каждой клиентской машине, либо один раз на сервере, где физически установлен сервер 1С:Предприятия. Понятно, что ставить драйвер на каждую клиентскую машину это не вариант, тем более, что у разных пользователей могут быть установлены операционные системы с разной разрядностью. Да и само количество пользовательских станций может быть большим. Поэтому устанавливать драйвер будем на сервере 1С:Предприятия. Напомню, что код на сервере 1С:Предприятия выполняется от имени служебного пользователя USR1CV8. Соответственно у этого пользователя должны быть права на использование провайдера.
Процедура подключения
Так как драйвер мы установили на сервере, то и установка соединения должна выполняться на сервере, для этого процедуру подключения к оракловой базе разместим в серверном общем модуле ОбщегоНазначенияСервер.
Строки подключения самые примитивные. При необходимости можно добавить нужные параметры.
Примеры запросов к базе данных Oracle
В процессе отладки даже простейших запросов к базе данных Oracle пришлось неоднократно столкнуться с ошибкой вот такого типа ORA-00933: SQL command not properly ended. По сути она говорит о том, что некорректно написан текст запроса. Поскольку ранее я не сталкивался с языком PL/SQL, то пытался делать запросы по аналогии с Transact-SQL. Но как выяснилось есть много тонкостей, которые отличают один язык от другого.
Рассмотрим примеры выполнения запросов к базе данных оракл и возможные ошибки в синтаксисе.
Пусть у нас есть оракловая база данных по имени TEST, в которой есть таблица SAMPLE вот такого вида