Программизм
 
Программизм
На главную | Графомания | Программизм | Книги | Всячина | Скачать | Ъ?  

Два КСлова про Oracle — установка ODBC-драйвера

В наш грандиозный век* гигагерц и терабайт многие успели забыть о таком замечательном API как ODBC. Замечательность его в том, что программа может работать с любым сервером баз данных (или даже с локальными данными, например, файлами DBF) при помощи одних и тех же функций. Сегодня большинство программистов пишут приложения** на Delphi с использованием BDE или же на всевозможных платформах от Microsoft с использованием ADO, DAO, MDAC*** и прочих модных технологий. Однако, если копнуть поглубже, в основе всех технологий от Microsoft лежит именно ODBC.

Я использую ODBC для доступа к Oracle из Excel через DAO (это отдельная большая тема, к которой я ещё планирую вернуться). Да, я знаю, что есть Oracle Objects for OLE, но «так исторически сложилось».

Случилось так, что написав очередное приложение, я обнаружил, что оно не работает на большинстве компьютеров нашей компании. Почему? Ответ нашёлся достаточно быстро — клиент Oracle установлен некорректно, и ODBC-драйвер не работает. Казалось бы, какие проблемы? Драйвера свободно раздаются на OTN, скачиваешь и ставишь. Так-то оно так, но для того, чтобы установить эти драйвера, нужен Могучий Инструмент (mightful tool) под названием Oracle Universal Installer, который «весит» около 60 мегабайт, да ещё и написан на Java. Мало того, что один только запуск этого приложения отнимает добрых две-три минуты, так оно в добавок тоже не хотело работать на наших компьютерах. Пришлось разбираться, как обойтись без него.

Результаты потрясают воображение.

Итак, архив с драйвером занимает около 1.4 M. Те файлы, которые нам необходимы, в неархивированном виде занимают около 900 K. Всё остальное — загадочная служебная информация.

При выборе версии роль играют первые два числа. Так, для клиента 8.1.x я брал драйвер версии 8.1.7.8.10, а для клиента 9.2.x — 9.2.0.6.0. Все нужные нам файлы хранятся в трёх архивах, находящихся в одном из подкаталогов дерева, получившегося после разархивирования скачанного с OTN файла. Путь к этому подкаталогу (внимание!) — stage\Disk1\stage\Components\oracle.p2k.odbc\<версия>\1\DataFiles. Для удобства дальнейшей работы перепишем все файлы из этих архивов в отдельный каталог, а то, что осталось, безжалостно удалим. Мало того, даже из этих файлов нам понадобится не всё. Вот список файлов для драйвера версии 8.1.x:

14.05.2003  05:29       218 ORAODBC.INI
14.05.2003  05:29      2543 sqora.cnt
14.05.2003  05:30     95505 sqora.hlp
23.10.2003  14:21    507904 sqora32.dll
23.10.2003  14:22     61440 sqoras32.dll
23.10.2003  14:23     32768 sqresus.dll
14.05.2003  05:29     11776 DECKAN32.DLL
14.05.2003  05:30     12288 oraodbcus.msb

А вот тут — для версии 9.2.x:

13.05.2003  10:49       218 ORAODBC.INI
07.11.2003  13:14      2479 sqora.cnt
07.11.2003  13:14    112260 sqora.hlp
29.01.2004  09:50    425984 sqora32.dll
29.01.2004  09:50     61440 sqoras32.dll
29.01.2004  09:50     32768 sqresus.dll
13.05.2003  10:49     11776 DECKAN32.DLL
13.05.2003  11:49     13312 oraodbcus.msb

Списки файлов, как видно, не отличаются друг от друга.

Теперь надо во-первых, скопировать файлы туда, куда нужно, и во-вторых, сделать запись в реестре о том, что драйвер установлен. Обладатели Windows NT/2000/XP могут воспользоваться следующим batch-файлом:

@echo off

set INSTALLHELP=NO

regedit /ea %TEMP%\oh.reg HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0
for /F %%i in ('find """ORACLE_HOME""" ^< %TEMP%\oh.reg') do (
  set ALLKEY=%%i
)
set RKEY=%ALLKEY:~15,-1%
set KEY=%RKEY:\\=\%
copy /Y %~dp0oraodbc.reg %TEMP%\oh.reg > nul 2> nul
echo "Setup"="%RKEY%\\bin\\SQORAS32.DLL">>%TEMP%\oh.reg
echo "Driver"="%RKEY%\\bin\\SQORA32.DLL">>%TEMP%\oh.reg
regedit /s %TEMP%\oh.reg

copy /Y oraodbc.ini %WINDIR% > nul 2> nul

if %INSTALLHELP%==YES (
  for %%i in (%~dp0sqora.hlp %~dp0sqora.cnt) do (
    copy /Y %%i %WINDIR%\System32 > nul 2> nul
  )
)

for %%i in (%~dp0sqora32.dll %~dp0sqoras32.dll %~dp0sqresus.dll) do (
  copy /Y %%i %KEY%\bin > nul 2> nul
)
mkdir %KEY%\ODBC > nul 2> nul
copy /Y %~dp0DECKAN32.DLL %KEY%\ODBC > nul 2> nul

mkdir %KEY%\ODBC\mesg > nul 2> nul
copy /Y %~dp0oraodbcus.msb %KEY%\ODBC\mesg > nul 2> nul

echo Oracle ODBC Driver is installed

Обладатели же Windows 95/98/ME могут снести свою оболочку и установить нормальную систему или же скопировать sq*.dll в каталог ORACLE_HOME\bin, oraodbc.ini в каталог C:\WINDOWS, deckan32.dll в ORACLE_HOME\ODBC, а oraodbcus.msb — в ORACLE_HOME\ODBC\Mesg.

В batch-файле упоминается файл oraodbc.reg. Вот он:

REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers]
"Oracle ODBC Driver"="Installed"

[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\Oracle ODBC Driver]
"APILevel"="1"
"CPTimeout"="60"
"ConnectFunctions"="YYY"
"DriverODBCVer"="03.51"
"FileUsage"="0"
"SQLLevel"="1"

Пользователям Windows семейства NT беспокоиться не о чем — batch сам выполнит всю необходимую работу, а вот поклонникам/заложникам 9x придётся вручную добавить к этому файлу две строки:

"Setup"="ORACLE_HOME\\bin\\SQORAS32.DLL"
"Driver"="ORACLE_HOME\\bin\\SQORA32.DLL"

разумеется, подставив вместо ORACLE_HOME имя каталога, куда установлен клиент Oracle.

Ну, и наконец, финальный аккорд — создание Data Source, то есть источника данных. Обычно это делается через панель управления, но в конечном счёте, всё сводится к записи в реестр. Вот пример такой записи:

REGEDIT4

[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources]
"ora92"="Oracle ODBC Driver"

[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ora92]
"Driver"="C:\\progra~1\\oracle\\ora92\\BIN\\SQORA32.DLL"
"Translation DLL"=""
"Translation Option"="0"
"Attributes"="W"
"PrefetchCount"="10"
"ForceWCHAR"="F"
"FailoverDelay"="10"
"FailoverRetryCount"="10"
"MetadataIdDefault"="F"
"Longs"="F"
"CloseCursor"="T"
"EXECSchemaOpt"=""
"EXECSyntax"="F"
"Application Attributes"="T"
"SQLGetData extensions"="F"
"ResultSets"="T"
"QueryTimeout"="F"
"Failover"="F"
"Lobs"="T"
"DisableMTS"="F"
"BatchAutocommitMode"="IfAllSuccessful"
"Description"="ORACLE 9.2"
"ServerName"=""
"Password"=""
"UserID"=""
"DSN"="ora92"

В данном случае ora92 — имя источника. Оно встречается трижды — как название переменной в ключе ODBC Data Sources, как название ключа и как значение переменной DSN в этом ключе. В переменной Driver указывается полный путь к драйверу — пользователям Windows NT не составит труда получить его тем же способом, что и в инсталляторе. Обратите внимание, что клиент Oracle не воспринимает пробелы в путях, поэтому надо использовать короткие имена. Ну, и наконец, переменные ServerName, Password и UserId я не заполняю — предпочитаю делать это в вызывающей программе, но вы можете заполнить их прямо в реестре.

Дочитавшим эту статью до конца желаю надёжных дисков и достоверных данных!

10.03.2004


* Для тех, кто понимает: цитата из повести Юрия Сотника «Эликсир Купрума Эса»
** Говорят, что программа не должна быть больше, чем 64 К. Всё, что больше, уже не программа, а приложение.
*** Бытует шутка, что в недрах Microsoft уже готова новая разработка — Microsoft Universal Data Access Components.
Поиск
См. также

Именно им призван помочь описанный здесь скрипт, сохраняющий письма с бесплатных ящиков на локальный диск.... »»»

архив с драйвером занимает около 1.4 M. Те файлы, которые нам необходимы, в неархивированном виде занимают около 900 K... »»»

во-первых, процедуру копирования нужно вызвать из программы на VisualBasic, а во-вторых, у пользователя нет прав на запись в каталог... »»»

Рекомендую

e.g.Orius’
Игорь Иртеньев
Вячеслав Шевченко

Copyright notice

ъ) Все материалы, размещённые на странице, являются неотъемлемой собственностью автора с вытекающими отсюда правами, как ©, так и (ъ). Некоммерческое их распространение всячески приветствуется, разумеется, при условии сохранения ссылки на оригинал. Что касается коммерческого использования — пишите письма, договориться можно всегда.

Удивительное рядом

lj userhardsign
Закладки Карта Королёва

Пишите письма

Счётчики

XPEHOMETP™ Рейтинг@Mail.ru