пятница, 17 февраля 2012 г.

Oracle дома. Быстрый старт. Часть 3: установка и настройка oracle-клиента

Предыдущие посты: Часть 1 и Часть 2.

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

Прошу обратить внимание – Windows

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

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

 

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

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

192.168.56.101 oracle

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

HINT: Для редактирования файла hosts понадобятся права администратора. Можно сделать так: Пуск \ Все программы \ Стандартные, правой кнопкой мыши на Блокнот, выбрать пункт Запуск от имени администратора:

image_thumb[10]

И в блокноте уже меню Файл \ Открыть… –> C:\Windows\System32\drivers\etc\hosts

 

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

Для работы с СУБД Oracle на локальном компьютере должен быть установлен так называемый oracle-клиент. Oracle-клиент – это библиотека OCI.DLL плюс ещё несколько библиотек, необходимых для работы программ с СУБД. (Отмечу правда, что возможны случаи обхода этого правила, однако я настоятельно не рекомендую их использовать.)

HINT: Oracle-клиент – это отдельный продукт, развиваемый разработчиками Oracle параллельно развитию СУБД. Oracle-клиент, как и СУБД, имеет свою версию. Как правило с выходом новой версии СУБД Oracle, в свет появляется соответствующая версия oracle-клиента. Так например, на нашей Oracle Developer Days установлена СУБД Oracle 11g, так же доступна версия 11 для oracle-клиента. Oracle рекомендует поддерживать эту параллель и своим клиентам, однако Вы можете использовать и предыдущую версию oracle-клиента для подключения к текущей версии СУБД (и наоборот).

HINT: Кроме разных версий, oracle-клиент может входить в разные дистрибутивы. Если Вы установите на своём компьютере (на хосте) СУБД Oracle, то установщик автоматически установит и Oracle-клиент. Мы же СУБД запускаем в виртуальной машине, для хоста (либо другой виртуальной машины) нам понадобиться Oracle Instant Client.

Итак, скачиваем Instant Client – выбираем версию: так как мы будем запускать Win32 приложения, то и клиент должен быть Win32: Instant Client for Microsoft Windows (32-bit).

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

Далее соглашаемся с лицензионным соглашением и выбираем версию *Instant Client Package - Basic Lite (18,4 Мб) – лайт версии нам вполне хватит. При желании можете скачать ещё *Instant Client Package - SQL*Plus – SQL Plus это консольная утилита для исполнения SQL-запросов, именно она чаще всего используется для иллюстрации примеров в книгах, документации и на форумах. Однако я буду использовать другую бесплатную утилиту, об этом чуть ниже.

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

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

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

 

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

Для того, чтобы приложения смогли найти oci.dll, необходимо произвести одну настройку. На самом деле, можно поступить разными способами: есть приложения, у которых в настройках можно явно задать путь к oci.dll, но в основном приложения ищут библиотеку по некоторым правилам – сначала в реестре, затем в путях, указанных в переменной среды окружения Path. Сделаем именно это: жамкаем Win+Pause  и далее находим слева пункт “Дополнительные параметры системы” (это для Windows 7, для Windows XP просто выбираем вкладку “Дополнительно”):

image

Жамкаем кнопку “Переменные среды…” и добавляем в переменную Path (через точку с запятой) путь к каталогу, куда мы распаковали архив (C:\Oracle\InstantClient). Сюда же добавляем переменную: TNS_ADMIN = C:\Oracle\InstantClient – это ссылка на каталог, где у нас будет лежать файл tnsnames.ora. Пусть это будет тот же каталог, где лежит oci.dll. У меня это всё выглядит так:

image

Здесь ещё можно указать NLS-параметры, подробнее о них можно почитать … мм, хотел вставить ссылку из своих закладок на хорошее описание, однако ресурс уже недоступен. На скорую руку нашёл такую интересную статью (ссылка). И ещё (ссылка).

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

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

 

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

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

orcl = //oracle/orcl

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

<alias> = //<host>[:port]/<sid>

где alias – это имя, которое могут использовать приложения для подключения к БД (помните мы выбирали параметр Network Alias в предыдущей заметке, когда настраивали подключение к БД в Oracle SQL Developer?), host – IP-адрес сервера, я указал слово oracle, т.к. именно его мы прописали в файле hosts (а если не прописали, то здесь можно указать IP-адрес 192.168.56.101 явно), port – необязательный параметр, если не указать, то будет использован порт по-умолчанию 1521, sid – имя экземпляра БД, в нашем случае это orcl.

Более подробно об этом файле и как его конфигурировать – здесь.

 

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

Итак, Instant Client установлен и сконфигурирован. Скачиваем бесплатную утилиту SQLTools (сайт программы - http://www.sqltools.net/). Устанавливаем. Запускаем. При первом запуске программа предложит ввести пароль – это можно сделать, если Вы хотите, чтобы другие пользователи Вашего компьютера не смогли воспользоваться подключениями, которые будут сконфигурированы в SQL Tools, я же отказался от такой возможности. А далее мы увидим окно, в котором можно создавать подключения к базам данных. Здесь параметры аналогичны параметрам подключения программы Oracle SQL Developer (пароль – oracle):

image

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

image

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

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

select * from emp

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

image

 

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

Вы наверное заметили, что “быстрый старт” – это мягко сказано: нам пришлось сделать как минимум три вещи. Если Вы не хотите заниматься всеми этими настройками, то можно поступить очень просто: скачать и установить дистрибутив СУБД Oralce для Windows, например бесплатную версию Oracle Database Express Edition 11g Release 2. При этом установщик автоматически за Вас сделает необходимую настройку Oracle-клиента. И Вам останется только запустить службу СУБД.

Однако я сознательно решил воспользоваться именно виртуальной машиной, чтобы показать на примере, с какими трудностями может столкнуться разработчик приложений под эту СУБД. Плюс, возможность использования виртуальных машин позволяет ставить СУБД (и другие виртуальные машины) на паузу, что происходит быстрее, чем остановка и запуск службы СУБД. Плюс это нам даёт такой “бонус” как перенос виртуальных машин с одной физической машины на другую. И ещё плюс – мы не “засоряем” хост-систему – “поигравшись” в разработчиков, достаточно удалить виртуальную машину и всё. Минус всей этой темы только один: СУБД в виртуальной машине работает чуть медленнее, чем на реальной физической машине, однако на сегодня, когда процессоры поддерживают виртуализацию на аппаратном уровне, это не существенно.

4 коммент.:

Aleksey Timohin комментирует...

Ох и помучался я в своё время, когда писал бакалаврскую по Delphi и Oracle и пытался в первый раз из Vista подключиться к Oracle 10 Express установленному на VirtualBox. Пару дней пытался понять что я делаю не так. Оказалось - Firewall забыл открыть. Ну и дополнительно там ещё приколы были с установкой 10-го клиента Oracle на Висту - установщик в какой-то момент вылетал с ошибкой.

Ох и пригодился бы мне тогда такой пост. =)

Анонимный комментирует...

Если Оракл клиент уже был установлен, то SQL Tools ругается

Please make a post about this problem in the forum:
http://www.sqltools.net/cgi-bin/yabb25/YaBB.pl
We need the stack trace (see below) and short description
what were you doing when this problem occurred (desirable but optional).

OCI8: Cannot allocate OCI handle.
See http://sqltools.net/cgi-bin/yabb2/YaBB.pl?board=sqlt_faq

Program: SQLTools 1.6 Beta build 15
Location: .\SQLTools.cpp(272).
Platform: Professional, Service Pack 1 (Build 7601)
COMCTL32.DLL: 6.10.7601.17514
OCI.DLL: 11.2.0.1.0 Production

TNS_ADMIN = C:\Oracle\InstantClient

Stack at the catch point:
0x778270b4 KiFastSystemCallRet() + 0

помогло удаление ветки
HKEY_LOCAL_MACHINE \ SOFTWARE \ ORACLE

Николай Зверев комментирует...

> Если Оракл клиент уже был установлен, то SQL Tools ругается

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

Судя по ошибке:
> OCI8: Cannot allocate OCI handle
у Вас был установлен клиент 8й версии, а он не умеет распознавать сокращённый вариант описания алиасов в tnsnames.ora, отсюда и ошибка (полный вариант описания есть в документации по ссылке из заметки)

Т.е. получилось так, что SQL Tools нашёл в реестре ветку ORACLE и использовал её для нахождения файла oci.dll - попали на старую версию. А дальше oci.dll увидела переменную среды окружения TNS_ADMIN и по ней нашла tnsnames.ora с новым синтаксисом.

Анонимный комментирует...

Пятерка! Очень подробно и лаконично.

Отправить комментарий

.

.