Подключение oracle client к базе

Обновлено: 04.07.2024

При разработке программного обеспечения всегда руководствовался простым правилом, чем меньше в развивающемся проекте используется сторонних компонентов, платформ, технологий, тем лучше. Почти все гениальное — просто. К сожалению, у разработчика не всегда есть возможность свободного выбора средств и систем, с которыми он работает. Вот и мне достался проект Windows Forms + ODAC + Oracle DB Server.

С большой радостью узнал о выходе Oracle Data Access Components (ODAC) for Microsoft Entity Framework and LINQ to Entities (Beta2). Очень ждал этого момента и вот свершилось! Можно не использовать сторонние ORM — все под ключ.

Как научить приложение использовать Entity Framework через установленный на конечных машинах клиент ODAC — описано в пошаговой инструкции от Oracle. Кому интересно, как избавиться от необходимости установки клиента Oracle на машинах пользователей, прошу под кат.

Общие требования

  1. Visual Studio 2010 Service Pack 1
  2. Oracle Database server 9.2 или выше
  3. ODAC for Microsoft Entity Framework and LINQ to Entities
Подключаемые библиотеки

1.4 MB)) подключить как Reference и присвоить свойству “Copy local” значение “true”.

    «путь к клиенту»\client_1\oci.dll (

Этого достаточно для обеспечения доступа к БД без установки клиента на машине пользователя:

private bool TestConnect()
try
var oracleConnection = new OracleConnection
ConnectionString =
"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=ServerNameOrIP)(PORT=PortNumber)))(CONNECT_DATA=(SERVICE_NAME=DBName)));User >
>;
oracleConnection.Open();
var oracleCommand = new OracleCommand
CommandText = "select sysdate from dual" ,
Connection = oracleConnection,
Transaction = null
>;
var oracleDataAdapter = new OracleDataAdapter ;
var sysDateDataSet = new DataSet( "SomeName" );
oracleDataAdapter.Fill(sysDateDataSet, "dateTimeTable" );
return sysDateDataSet.Tables[0].Rows.Count > 0;
>
catch (Exception exx)
MessageBox.Show( string .Format( "Could not connect directly to an Oracle database: \n " , exx.Message));
return false ;
>
* This source code was highlighted with Source Code Highlighter .
Что необходимо сделать для использования Entity Framework Model без установки клиента Oracle

В файл конфигурации проекта (App.Config/Web.Config) будет автоматически (если вы выберете данный соответствующий пункт в мастере) добавлена строка подключения к БД Oracle:

< add name ="HREntities" connectionString ="metadata=res://*/HRModel.csdl|res://*/HRModel.ssdl|res://*/HRModel.msl;provider=Oracle.DataAccess.Client;provider connection string="Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=ServerNameOrIP)(PORT=PortNumber)))(CONNECT_DATA=(SERVICE_NAME=DBName)));User > providerName ="System.Data.EntityClient" />

Тут стоит обратить особое внимание на то, что значение, присвоенное атрибуту «provider connection string» обязательно должно быть в двойных кавычках (для их обозначения необходимо использовать код &_q_u_o_t). Это также стоит учесть при динамическом формировании строки подключения.

< system.data >
< DbProviderFactories > <br> < remove invariant ="Oracle.DataAccess.Client" />

< add name ="Oracle.DataAccess.Client" invariant ="Oracle.DataAccess.Client" description ="Oracle Data Provider for .NET" type ="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=4.112.2.40, Culture=neutral, PublicKeyToken=89b483f429c47342" />

</ DbProviderFactories >
</ system.data >
Тонкости

При динамическом подключении модели к БД «правильным» методом от MS, следует обратить внимание на не совсем корректное формирование строки подключения через объект EntityConnectionStringBuilder
string providerName = "Oracle.DataAccess.Client" ;
string dataSourse = (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=ServerNameOrIP)(PORT=PortNumber)))(CONNECT_DATA=(SERVICE_NAME=DBName)));User > var sqlBuilder =
new SqlConnectionStringBuilder
DataSource = dataSourse
>;
string providerString = sqlBuilder.ToString();
var entityBuilder =
new EntityConnectionStringBuilder
Provider = providerName,
ProviderConnectionString = providerString,
Metadata =
@"res://*/HRModel.csdl|res://*/HRModel.ssdl|res://*/HRModel.msl"
>;
using ( var conn =
new EntityConnection(entityBuilder.ToString()))
conn.Open();
Console .WriteLine( "Just testing the connection." );
conn.Close();
>

* This source code was highlighted with Source Code Highlighter .

В результате entityBuilder.ToString() вернет строку подключения с лишними одинарными кавычками, в которые заключено полностью значение атрибута provider connection string
metadata=…;provider=Oracle.DataAccess.Client;provider connection string= ' Data Source= \" (DESCRIPTION=(… ); User color="red">\"'

В то время как провайдер Oracle требует строку подключения следующего формата:
metadata=…;provider=Oracle.DataAccess.Client;provider connection string= \" Data Source=(DESCRIPTION(…); User color="red">\"

– иначе выдает ошибку.
Пока можно формировать строку подключения некрасиво:

private bool DynamicConnect()
const string providerName = "Oracle.DataAccess.Client" ;
const string serverName = "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=ServerNameOrIP)(PORT=PortNumber)))(CONNECT_DATA=(SERVICE_NAME=DBName)));User >;
const string metadata = "metadata=res://*/HRModel.csdl|res://*/HRModel.ssdl|res://*/HRModel.msl" ;
var entBild = string .Format( "metadata=;provider=;provider connection string=\"Data Source=\";" , metadata, providerName, serverName);
try
var conn = new EntityConnection(entBild);
conn.Open();
var hrEntities = new HREntities(conn);
var tmpResult = hrEntities.BRIDGE.Count();
conn.Close();
return true ;
>
catch (Exception exx)
MessageBox.Show( string .Format( "Could not connect directly to an Oracle database: \n " , exx.Message));
return false ;
>
>

* This source code was highlighted with Source Code Highlighter .

Быть может это отголоски бета версии – посмотрим как будет в релизе, который, как обещает Oracle, состоится в четвертом квартале 2011 года.


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

1- Что такое Oracle Client?

Если у вас есть 2 компьютера A и B. На компьютере B установлен Oracle Database. Если на компьютере A вы хотите работать с базой данных Oracle компьютера B, компьютер A должен установить Oracle Client.


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

Примечание: Oracle Database и есть Oracle Client.

2- Download Oracle Client

Самая новая версия Oracle Client является 12.x, она может работать с разными версиями Oracle Database (10, 11, 12), поэтому вам стоит скачать данную версию.

Чтобы скачать Oracle Client, перейдите по данной ссылке:



Здесь у вас есть 2 выбора для скачивания, это Oracle Client 32bit или Oracle Client 64bit, если вы хотите работать с такими визуальными инструментами как PL/SQL Developer, Toad, .. вам стоит скачать и установить версию 32bit.

Здесь я скачаю версию 32bit. Чтобы скачать требуется зарегистрироваться с аккаунтом, если у вас его нет, вы можете зарегистрироваться бесплатно.



3- Установка Oracle Client


Данный вид установки устанавливает только разделенные библиотеки требуемые для "Приложений интерфеса вызовов Oracle" (Oracle Call Interface Applications), это приложения использующие свойство Instant Client. Оно требует намного меньше пространства на диске, чем другие виды установок Oracle Client.

Примечание: Если вы выбрали установку Instant Client, то вы не можете применить обновления программного обеспечения за все время сеанса установки. Чтобы скачать и применить новейшие обновления программного обеспечения, вам нужно выбрать вид установки Administrator, Runtime, или Custom.

Этот вид установки устанавливает Oracle Enterprise Manager Standalone Console, сетевые службы Oracle и программное обеспечение Client позволяет приложениям или персональным приложениям подключиться к базе данных Oracle. Он так же устанавливает инструменты разработки, которые вы можете использовать для разработки приложений.

Этот вид установки устанавливает ограниченное количество компонентов для пользователя, использующего приложение базы данных. За исключением Oracle Enterprise Manager Standalone Console, который будет устанавливать компоненты идентично виду установки Administrator.

Этот вид установки позволяет вам выбрать приложение Client и утилиты, которые вы хотите установить.

IDE NetBeans включает встроенную поддержку для баз данных Oracle. Пользователь может без труда установить подключение к ней из среды IDE и начать работу в базе данных. В данном учебном курсе показано, как использовать локально установленный экземпляр базы данных Oracle 10_g_ Express Edition (Oracle Database XE), упрощенной базы данных, открытой для бесплатных развертывания, распространения и разработки для нее.

В этом документе описывается настройка соединения для локальной установки базы данных Oracle XE из IDE NetBeans, использования встроенного редактора SQL IDE для обработки данных базы данных, а также включения расширения PHP OCI 8 для написания кода PHP, выполняющего соединения с базой данных Oracle.

Для работы с этим учебным курсом требуется следующее программное обеспечение и ресурсы.

7.2, 7.3, 7.4, 8.0, пакет Java EE

10 g Express Edition

Перед началом работы

Перед началом прохождения данного учебного курса обратите внимание на следующее:

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

Существуют две категории драйверов JDBC Oracle: OCI и JDBC Thin.

Драйвер Oracle JDBC Thin основан на Java и не зависит от платформы. Этот автономный драйвер не требует присутствия других библиотек Oracle и обеспечивает прямое подключение к базе данных Oracle. Он используется для подключения к базе данных Oracle в данном учебном курсе. Перед прохождением данного учебного курса необходимо загрузить файл ojdbc6.jar и сохранить его на своей системе.

Windows может изменить расширение загруженного файла с .jar на .zip. Но он при этом остается файлом .jar. Расширение можно просто заменить на .jar.

Драйвер OCI Oracle использует встроенные клиентские библиотеки Oracle для связи с базами данных. Эти библиотеки входят в состав Oracle Instant Client. Хотя драйвер Thin являеся достаточным в большей части случаев, также рекомендуется использовать драйвер OCI путем выполнения шагов, описанных в разделе Использование драйвера OCI JDBC с IDE NetBeans. Хорошим примером использования драйвера OCI является подключение к удаленной базе данных Oracle из приложения PHP с помощью библиотек Oracle Instant Client. Дополнительные сведения о включении расширения OCI8 для PHP см. в разделе этого учебного руководства OCI 8 и IDE NetBeans для PHP.

Если вы не использовали базу данных Oracle XE ранее, прочитайте Руководство по началу работы с базой данных Oracle XE.

Предупреждение для пользователей GlassFish. Домашняя страница базы данных Oracle XE, используемая для администрирования базы данных, использует по умолчанию порт 8080. Oracle GlassFish Application Server также использует по умолчанию 8080. Если запустить обе программы одновременно, база данных Oracle XE заблокирует доступ браузеров к GlassFish на localhost:8080. В этом случае все приложения, развернутые на GlassFish, будут возвращать ошибку 404. Проще всего отключать базу данных Oracle XE, если она не нужна во время работы с GlassFish. Если нужно использовать обе эти программы одновременно, измените порт по умолчанию, используемый базой данных Oracle XE. Это проще, чем изменить порт GlassFish по умолчанию. В Интернете можно найти много описаний процесса изменения порта базы данных Oracle XE по умолчанию, включая одно на форумах Oracle.

Установка подключения к базе данных Oracle

В этом упражнении мы создадим и протестируем новое подключение к базе данных.

Запустите базу данных Oracle.

Откройте окно "Службы", выбрав меню "Окно" > "Службы" или Ctrl-5;⌘-5 в Mac. В окне 'Службы' щелкните правой кнопкой мыши узел 'Базы данных' и выберите 'Создать подключение'.

new connection

В мастере создания подключений выберите Oracle Thin из раскрывающегося списка Driver ("Драйвер").

На панели Customize Connection ("Настроить подключение") мастера введите следующие значения и нажмите кнопку Next ("Далее").

Oracle Thin (с идентификатором службы (SID))

localhost или 127.0.0.1. Примечание. В случае удаленного соединения, укажите IP-адрес или разрешаемое имя узла компьютера, на котором установлена ​​база данных.

1521 (по умолчанию)

Идентификатор службы (SID)

XE (SID по умолчанию для базы данных Oracle XE). Примечание. В случае подключения к удаленной базе данных запросите SID у администратора базы данных.

Введите имя пользователя. В целях данного учебного курса введите system (учетная запись по умолчанию администратора базы данных) и пароль, использованный во время установки базы данных.

Введите пароль для выбранного имени пользователя.

customize conn

До получения доступа к NetBeans необходимо разблокировать схему HR. Разблокирование базы данных HR описано в Руководстве по началу работы с базой данных Oracle XE.

Новое подключение появится в узле Databases ("Базы данных") окна Services ("Службы"). Его можно будет развернуть и приступить к просмотру структуры объекта базы данных. Измените отображаемое имя для узла подключения: выберите Properties ("Свойства") из всплывающего меню узла и нажмите кнопку многоточия, чтобы вывести свойство Display Name ("Отображаемое имя"). Введите OracleDB в качестве отображаемого имени и нажмите кнопку OK.

connection

Хотя приведенные выше шаги описывают случай подключения к экземпляру локальной базы данных, шаги для подключения к удаленной базе данных такие же. Единственное отличие состоит в том, что вместо указания localhost как имени узла следует ввести IP-адрес или имя узла удаленного компьютера, на котором установлена база данных Oracle.

Управление данными в базе данных Oracle

Обычными способами взаимодействия с базами данных является выполнение команд SQL в редакторе SQL или использование интерфейсов управления базами данных. Например, у базы данных Oracle XE имеется интерфейс на основе браузера, посредством которого можно осуществлять администрирование базы данных, управлять объектами базы данных и манипулировать данными.

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

Создание пользователя

Давайте создадим новую учетную запись пользователя базы данных для управления таблицами и данными в базе данных. Чтобы создать нового пользователя, необходимо войти в систему, используя учетную запись администратора базы данных, в нашем случае учетную запись по умолчанию system , созданную при установке базы данных.

В окне 'Службы' щелкните правой кнопкой мыши узел подключения OracleDB и выберите 'Выполнить команду'. При этом открывается редактор SQL IDE NetBeans, в котором можно указать команды, которые будут отправлены базе данных.

execute

Чтобы создать нового пользователя, введите приведенную ниже команду в окне редактора SQL и нажмите кнопку Run SQL ("Выполнить SQL") на панели инструментов.

create user

В результате выполнения данной команды будет создан новый пользователь jim с паролем mypassword . Табличным пространством по умолчанию является users , а выделенное пространство не ограничено.

Следующий этап – предоставить jim права учетной записи пользователя на выполнение действий с базой данных. Необходимо разрешить пользователю подключаться к базе данных, создавать и изменять таблицы в табличном пространстве пользователя по умолчанию и выполнять доступ к таблице Employees в примере базы данных hr .

На практике администратор базы данных обычно создает особые роли и аккуратно настраивает полномочия для каждой из них. Но в целях нашего учебного курса мы можем использовать заранее определенную роль, такую как CONNECT . Дополнительные сведения о ролях и полномочиях приведены в документе Oracle Database Security Guide ("Руководство по безопасности базы данных Oracle").

Табличные пространства в базах данных Oracle

Табличное пространство – это блок логической памяти во всех базах данных Oracle. На самом деле, все данные баз данных хранятся в табличных пространствах. Таблицы создаются внутри выделенных табличных пространств. Если табличное пространство по умолчанию не выделяется пользователю напрямую, то, по умолчанию, используется табличное пространство системы (этой ситуации лучше избегать).

Дополнительные сведения о концепции табличного пространства см. Часто задаваемые вопросы по Oracle: табличные простнранства

Создание таблицы

Существует несколько способов создания таблицы в базе данных с помощью IDE NetBeans. Например, можно запустить файл SQL (щелкните правой кнопкой мыши файл и выберите 'Запустить файл'), выполните команду SQL (щелкните правой кнопкой мыши узел подключения и выберите 'Выполнить команду') или используйте диалоговое окно 'Создать таблицу' (щелкните правой кнопкой мыши узел 'Таблицы' и выберите 'Создать таблицу'). В этом упражнении мы воссоздадим таблицу, используя структуру другой таблицы.

В данном примере нам нужно, чтобы пользователь jim создал копию таблицы Departments в своей схеме, воссоздав таблицу из базы данных hr . Перед созданием таблицы будет необходимо отключиться от сервера и войти в систему как пользователь jim .

Щелкните правой кнопкой мыши узел подключения OracleDB в окне Services ("Службы") и выберите Disconnect ("Отключить").

Щелкните правой кнопкой мыши узел подключения OracleDB , выберите Connect ("Подключить") и войдите как jim .

Разверните узел Tables ("Таблицы") под схемой HR и убедитесь, что только таблица Departments доступна пользователю jim .

При создании пользователя jim право выполнения выбора было ограничено таблицей Departments .

hr view

Щелкните правой кнопкой мыши узел таблицы Departments и выберите Grab Structure ("Копировать структуру"). Сохраните файл .grab у себя на диске.

Раверните схему JIM , щелкните правой кнопкой мыши узел Таблицы и выберите 'Повторно создать таблицу'. Укажите на созданный файл .grab .

recreate

nametable

При нажатии кнопки "ОК" новая таблица DEPARTMENTS будет создана и появится под узлом схемы JIM . При щелчке правой кнопкой мыши узла таблицы и выборе 'Просмотреть данные' будет видно, что таблица пустая.

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

Для ввода данных вручную выполните следующие действия.

Щелкните правой кнопкой мыши таблицу DEPARTMENTS в схеме JIM и выберите View Data ("Просмотр данных").

Щелкните значок Insert Records ("Вставить записи") на панели инструментов View Data ("Просмотр данных"), чтобы открыть окно вставления записей.

insert rec

Например, можно ввести следующие значения из исходной таблицы DEPARTMENTS .

В этой заметке я расскажу как установить и настроить oracle-клиент в ОС Windows. Плюс немного расскажу об инструменте, который можно использовать для работы с СУБД.

Т.к. в конечном итоге у нас задача написать Windows приложение в Delphi, то далее описываемые мной действия относятся в основном к Windows 7. Если у Вас Windows XP, то отличия будут минимальны.

Описываемые далее действия Вы можете выполнить либо для хост-системы, либо для другой виртуальной машины с установленной ОС Windows. Версия и разрядность ОС принципиального значения не имеют.

Настройка файла hosts (не обязательно)

Для удобства можно дописать в файл hosts такую строку:

Это позволит использовать указанное имя oracle вместо указанного IP адреса при подключении к серверу. Например, вместо ping 192.168.56.101 можно будет писать ping oracle, результат будет одинаковым.

Уcтановка Oracle Instant Client

HINT: Даже если у вас ОС 64-битная, всё равно качаем 32-битную версию клиента; в будущем, если Вы будете делать сборки приложений под Win64, то можно также скачать и Win64 версию клиента.

Скачиваем zip-архив, однако из всего архива нам достаточно будет извлечь всего три файла (это легко выявляется экспериментальным путём):

  • oci.dll
  • orannzsbb11.dll
  • oraociicus11.dll

Сохраняем их в отдельный каталог, например в C:\Oracle\InstantClient.

Настройка Oracle Instant Client

image

image

Сохраняем изменения (ОК), для Windows XP Sp2 и ниже необходимо сделать выход из системы, чтобы эти переменные применились (ну или перезагрузить компьютер), для Windows XP Sp3 и Windows7 эти настройки применяются к текущему окружению сразу же (нужно лишь перезапустить файловый менеджер или проводник).

В принципе, на этом настройка Oracle Instant Client завершена, однако для удобства сделаем ещё одну вещь.

Настройка файла tnsnames.ora (не обязательно)

Создаём обычный текстовый файл под названием tnsnames.ora и сохраняем в каталог, на который ссылается переменная TNS_ADMIN. У нас этот файл будет содержать всего одну строку:

У меня приведён вариант с использованием упрощённого синтаксиса:

Подключаемся к БД и выполняем запросы

image

Если же Вы не редактировали файл hosts и не создавали файл tnsnames.ora, то можно указать такие параметры:

image

Кнопка Test проверяет, можно ли подключиться к БД. Кнопка Save сохраняет введённые параметры в список слева. Кнопка Connect выполняет подключение к БД и закрывает диалог.

Выполняем простейший запрос:

И нажимаем F5, должно получиться примерно следующее:

image

Постскриптум

Читайте также: