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

Два КСлова про 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.
Поиск
См. также

Пользователи всех клонов *nix давно уже могут писать командные файлы на любом языке. Для этого надо лишь указать в первой строке имя интерпретатора... »»»

я попытаюсь по возможности просто рассказать о семействе алгоритмов Брезенхема, а также приведу готовый к использованию код на JavaScript... »»»

Очевидно, что char поместится в int. Во многих моделях памяти размер указателя также равен размеру int. Следовательно, структуру можно заменить массивом... »»»

Рекомендую

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

Copyright notice

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

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

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

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

Счётчики

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