Ниже приводятся дополнительные инструкции по настройке среды DB2 при установке.
Для поддержки процедур SQL необходимо установить клиент разработки программ на сервере. Информацию об установке клиента разработки программ смотрите в книге Быстрый старт для вашей платформы. Информацию о компиляторах C и C++, поддерживаемых DB2 на вашей платформе, смотрите в разделе "Supported Software by Platform".
Прим.: | В файловой системе OS/2 FAT имя схемы для процедур SQL ограничено 8 символами. Для имен схем длиннее 8 символов необходимо использовать файловую систему HPFS. |
Конфигурирование компилятора состоит из двух частей: настройка переменных среды для компилятора и определение команды компиляции. Эти переменные среды задают пути к двоичным файлам, библиотекам и включаемым файлам компилятора. Команда компиляции - это полнофункциональная команда, которую DB2 будет использовать для компиляции файлов на языке C, сгенерированных для процедур SQL.
Правила конфигурирования среды в OS/2, Windows и в системах на базе UNIX отличаются, как описано ниже. В некоторых случаях никакого конфигурирования не требуется; в других случаях в переменной реестра DB2 DB2_SQLROUTINE_COMPILER_PATH нужно указать путь к исполняемому сценарию, который сконфигурирует данную среду должным образом.
Прим.: | Для задания значения этой переменной реестра DB2 можно использовать либо команду db2set, либо диалоговое окно Опции построения хранимых процедур SQL. Использование окна Опции построения хранимых процедур позволяет обойтись без физического обращения к серверу баз данных для ввода команды, а также без перезапуска сервера для вступления изменений в силу. |
В OS/2:
для IBM VisualAge C++ for OS/2 Версии 3.6: db2set DB2_SQLROUTINE_COMPILER_PATH="c:\ibmcxxo\bin\setenv.cmd" для IBM VisualAge C++ for OS/2 Версии 4: db2set DB2_SQLROUTINE_COMPILER_PATH="c:\ibmcpp40\bin\setenv.cmd"
Прим.: | В этих командах предполагается, что компилятор C++ установлен на диске c:. Если нужно, измените диск или путь, чтобы отразить положение компилятора C++ в вашей системе. |
В 32-битных операционных системах Windows, если переменные среды компилятора заданы как системные переменные, никакого конфигурирования не требуется. Иначе задайте переменную реестра DB2 DB2_SQLROUTINE_COMPILER_PATH DB2:
для Microsoft Visual C++ Версии 5.0: db2set DB2_SQLROUTINE_COMPILER_PATH="c:\devstudio\vc\bin\vcvars32.bat" для Microsoft Visual C++ Версии 6.0: db2set DB2_SQLROUTINE_COMPILER_PATH="c:\Micros~1\vc98\bin\vcvars32.bat" для IBM VisualAge C++ for Windows Версии 3.6: db2set DB2_SQLROUTINE_COMPILER_PATH="c:\ibmcxxw\bin\setenv.bat" для IBM VisualAge C++ for Windows Версии 4: db2set DB2_SQLROUTINE_COMPILER_PATH="c:\ibmcppw40\bin\setenv.bat"
Прим.: | В этих командах предполагается, что компилятор C++ установлен на диске c:. Если нужно, измените диск или путь, чтобы отразить положение компилятора C++ в вашей системе. |
В системах на базе UNIX DB2 сгенерирует файл исполняемого сценария $HOME/sqllib/function/routine/sr_cpath (который содержит для переменных среды компилятора значения по умолчанию) при первой компиляции хранимой процедуры. Если значения по умолчанию не подходят для вашего компилятора, этот файл можно отредактировать. Другой вариант - указать в переменной реестра DB2 DB2_SQLROUTINE_COMPILER_PATH полное имя другого исполняемого сценария, где задаются желаемые параметры (смотрите вышеприведенные примеры).
При установке клиента разработки программ по умолчанию предоставляется команда компиляции, которая работает как минимум для одного из компиляторов, поддерживаемых на каждой платформе:
AIX: IBM C Set++ for AIX, Версии 3.6.6 Solaris: SPARCompiler C++ Версия 4.2 и 5.0 HP-UX: HP-UX C++ Версия A.12.00 Linux: GNU/Linux g++ Версия egcs-2.90.27 980315 (выпуск egcs-1.0.2) PTX: ptx/C++ Версия 5.2 OS/2: IBM VisualAge C++ for OS/2 Версия 3 Windows NT и Windows 2000: Microsoft Visual C++ Версия 5.0 и 6.0
Чтобы использовать другие компиляторы или чтобы настроить данную команду по умолчанию, нужно указать в переменной реестра DB2 DB2_SQLROUTINE_COMPILE_COMMAND следующую команду:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=команда_компиляции
где команда_компиляции - команда компиляции C или C++ с опциями и параметрами, требуемыми для создания хранимых процедур.
В команде компиляции при помощи ключевого слова SQLROUTINE_FILENAME замените имена файлов для сгенерированных SQC, C, PDB, DEF, EXP, журнала сообщений и файлов совместно используемых библиотек. Только в AIX: при помощи ключевого слова SQLROUTINE_ENTRY измените имя точки входа.
Прим.: | Для задания значения этой переменной реестра DB2 можно использовать либо команду db2set, либо диалоговое окно Опции построения хранимых процедур SQL. Использование окна Опции построения хранимых процедур позволяет обойтись без физического обращения к серверу баз данных для ввода команды, а также без перезапуска сервера для вступления изменений в силу. |
Ниже показаны значения по умолчанию для DB2_SQLROUTINE_COMPILE_COMMAND для компиляторов C или C++ на поддерживаемых платформах серверов.
AIX
Чтобы использовать IBM C for AIX Версии 3.6.6:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=xlc -H512 -T512 \ -I$HOME/sqllib/include SQLROUTINE_FILENAME.c -bE:SQLROUTINE_FILENAME.exp \ -e SQLROUTINE_ENTRY -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -lc -ldb2
Чтобы использовать IBM C Set++ for AIX Версии 3.6.6:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=xlC -H512 -T512 \ -I$HOME/sqllib/include SQLROUTINE_FILENAME.c -bE:SQLROUTINE_FILENAME.exp \ -e SQLROUTINE_ENTRY -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -lc -ldb2
Это команда компилятора по умолчанию, используемая, если не задана переменная реестра DB2 DB2_SQLROUTINE_COMPILE_COMMAND.
Прим.: | Для компиляции в AIX 64-битных процедур SQL добавьте в показанные выше команды опцию -q64. |
db2set DB2_SQLROUTINE_COMPILE_COMMAND="vacbld"
Если после команды vacbld не задан файл конфигурации, DB2 создаст следующий файл конфигурации по умолчанию при первой попытке создания какой-либо процедуры SQL:
$HOME/sqllib/function/routine/sqlproc.icc
Если нужно использовать другой файл конфигурации, можно задать его при задании переменной реестра DB2 DB2_SQLROUTINE_COMPILE_COMMAND:
db2set DB2_SQLROUTINE_COMPILE_COMMAND="vacbld %DB2PATH%/function/sqlproc.icc"
HP-UX
Чтобы использовать компилятор HP C Версии A.11.00.03:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=cc +DAportable +ul -Aa +z \ -I$HOME/sqllib/include -c SQLROUTINE_FILENAME.c; \ ld -b -o SQLROUTINE_FILENAME SQLROUTINE_FILENAME.o \ -L$HOME/sqllib/lib -ldb2
Чтобы использовать HP-UX C++ Версии A.12.00:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=CC +DAportable +a1 +z -ext \ -I$HOME/sqllib/include -c SQLROUTINE_FILENAME.c; \ ld -b -o SQLROUTINE_FILENAME SQLROUTINE_FILENAME.o \ -L$HOME/sqllib/lib -ldb2
Это команда компилятора по умолчанию, используемая, если не задана переменная реестра DB2 DB2_SQLROUTINE_COMPILE_COMMAND.
Linux
Чтобы использовать GNU/Linux gcc Версии 2.7.2.3:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=cc \ -I$HOME/sqllib/include SQLROUTINE_FILENAME.c \ -shared -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -ldb2
Чтобы использовать GNU/Linux g++ Версии egcs-2.90.27 980315 (выпуск egcs-1.0.2):
db2set DB2_SQLROUTINE_COMPILE_COMMAND=g++ \ -I$HOME/sqllib/include SQLROUTINE_FILENAME.c \ -shared -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -ldb2
Это команда компилятора по умолчанию, используемая, если не задана переменная реестра DB2 DB2_SQLROUTINE_COMPILE_COMMAND.
PTX
Чтобы использовать ptx/C Версии 4.5:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=cc -KPIC \ -I$HOME/sqllib/include SQLROUTINE_FILENAME.c \ -G -o SQLROUTINE_FILENAME.so -L$HOME/sqllib/lib -ldb2 ; \ cp SQLROUTINE_FILENAME.so SQLROUTINE_FILENAME
Чтобы использовать ptx/C++ Версии 5.2:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=c++ -KPIC \ -D_RWSTD_COMPILE_INSTANTIATE=0 -I$HOME/sqllib/include SQLROUTINE_FILENAME.c \ -G -o SQLROUTINE_FILENAME.so -L$HOME/sqllib/lib -ldb2 ; \ cp SQLROUTINE_FILENAME.so SQLROUTINE_FILENAME
Это команда компилятора по умолчанию, используемая, если не задана переменная реестра DB2 DB2_SQLROUTINE_COMPILE_COMMAND.
OS/2
Чтобы использовать IBM VisualAge C++ for OS/2 Версии 3:
db2set DB2_SQLROUTINE_COMPILE_COMMAND="icc -Ge- -Gm+ -W2 -I%DB2PATH%\include SQLROUTINE_FILENAME.c /B\"/NOFREE /NOI /ST:64000\" SQLROUTINE_FILENAME.def %DB2PATH%\lib\db2api.lib"
Это команда компилятора по умолчанию, используемая, если не задана переменная реестра DB2 DB2_SQLROUTINE_COMPILE_COMMAND.
Чтобы использовать IBM VisualAge C++ for OS/2 Версии 4:
db2set DB2_SQLROUTINE_COMPILE_COMMAND="vacbld"
Если после команды vacbld не задан файл конфигурации, DB2 создаст следующий файл конфигурации по умолчанию при первой попытке создания какой-либо процедуры SQL:
%DB2PATH%\function\routine\sqlproc.icc
Если нужно использовать другой файл конфигурации, можно задать его при задании переменной реестра DB2 DB2_SQLROUTINE_COMPILE_COMMAND:
db2set DB2_SQLROUTINE_COMPILE_COMMAND="vacbld %DB2PATH%\function\sqlproc.icc"
Solaris
Чтобы использовать SPARCompiler C Версий 4.2 и 5.0:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=cc -xarch=v8plusa -Kpic \ -I$HOME/sqllib/include SQLROUTINE_FILENAME.c \ -G -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib \ -R$HOME/sqllib/lib -ldb2
Чтобы использовать SPARCompiler C++ Версий 4.2 и 5.0:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=CC -xarch=v8plusa -Kpic \ -I$HOME/sqllib/include SQLROUTINE_FILENAME.c \ -G -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib \ -R$HOME/sqllib/lib -ldb2
Это команда компилятора по умолчанию, используемая, если не задана переменная реестра DB2 DB2_SQLROUTINE_COMPILE_COMMAND.
Примечания:
Windows NT и Windows 2000
Прим.: | В Windows 98 и Windows 95 процедуры SQL не поддерживаются. |
Чтобы использовать Microsoft Visual C++ Версий 5.0 и 6.0:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=cl -Od -W2 /TC -D_X86_=1 -I%DB2PATH%\include SQLROUTINE_FILENAME.c /link -dll -def:SQLROUTINE_FILENAME.def /out:SQLROUTINE_FILENAME.dll %DB2PATH%\lib\db2api.lib
Это команда компилятора по умолчанию, используемая, если не задана переменная реестра DB2 DB2_SQLROUTINE_COMPILE_COMMAND.
Чтобы использовать IBM VisualAge C++ for Windows Версии 3.6:
db2set DB2_SQLROUTINE_COMPILE_COMMAND="ilib /GI SQLROUTINE_FILENAME.def &icc -Ti -Ge- -Gm+ -W2 -I%DB2PATH%\include SQLROUTINE_FILENAME.c /B\"/ST:64000 /PM:VIO /DLL\" SQLROUTINE_FILENAME.exp %DB2PATH%\lib\db2api.lib"
Чтобы использовать IBM VisualAge C++ for Windows Версии 4:
db2set DB2_SQLROUTINE_COMPILE_COMMAND="vacbld"
Если после команды vacbld не задан файл конфигурации, DB2 создаст следующий файл конфигурации по умолчанию при первой попытке создания какой-либо процедуры SQL:
%DB2PATH%\function\routine\sqlproc.icc
Если нужно использовать другой файл конфигурации, можно задать его при задании переменной реестра DB2 DB2_SQLROUTINE_COMPILE_COMMAND:
db2set DB2_SQLROUTINE_COMPILE_COMMAND="vacbld %DB2PATH%\function\sqlproc.icc"
Чтобы вернуться к опциям компилятора по умолчанию, с помощью следующей команды задайте пустое значение для переменной реестра DB2 DB2_SQLROUTINE_COMPILE_COMMAND:
db2set DB2_SQLROUTINE_COMPILE_COMMAND=
Необходимо вручную удалить промежуточные файлы, которые могут остаться при неудачном завершении процедуры SQL. Эти файлы находятся в следующих каталогах:
где $DB2PATH - каталог, в котором был создан этот экземпляр, $DATABASE представляет имя базы данных, а $SCHEMA - имя схемы, с которым были созданы процедуры SQL.
где %DATAPATH% - каталог, в котором был создан этот экземпляр, %DATABASE% - имя базы данных, а %SCHEMA% - имя схемы, с которым были созданы процедуры SQL.
При создании процедуры SQL сгенерированная совместно используемая библиотека DLL сохраняется в таблице каталога, если она меньше 2 Мбайт. При резервном копировании и восстановлении базы данных любая процедура SQL со сгенерированной библиотекой DLL меньше 2 Мбайт будет скопирована и восстановлена вместе с версией, хранимой в этой таблице каталога. Если имеются процедуры SQL со сгенерированной библиотекой DLL больше 2 Мбайт, убедитесь, что вместе с резервным копированием и восстановлением базы данных происходит также копирование и восстановление файловой системы. Если это не так, надо воссоздать совместно используемую библиотеку DLL процедуры SQL вручную, воспользовавшись исходной библиотекой в таблице каталога syscat.procedures.
Прим.: | Во время восстановления базы данных все выполняемые процедуры SQL в файловой системе, принадлежащей восстанавливаемой базе данных, будут удалены. Если для параметра конфигурации создания индекса (indexrec) задано значение RESTART, все выполняемые процедуры SQL будут извлечены из таблицы каталога и помещены назад в файловую систему при следующем соединении. Иначе выполняемые программы SQL будут извлечены при первом выполнении процедур SQL. |
где $DB2PATH - каталог, в котором был создан этот экземпляр, а $DATABASE - имя базы данных, с которым были созданы процедуры SQL.
где %DB2PATH% - каталог, в котором создавался экземпляр, а %DATABASE% - имя базы данных, с которым создавались процедуры SQL.
При разработке процедур SQL задайте для параметра конфигурации менеджера баз данных KEEPDARI значение 'NO'. Если процедура SQL остается загруженной после выполнения, могут возникнуть проблемы при отбрасывании и создании новой хранимой процедуры с тем же именем, так как нельзя будет обновить библиотеку и удалить выполняемые файлы из файловой системы. Могут также возникнуть проблемы при попытке выполнить откат изменений или отбросить базу данных, так как нельзя будет удалить выполняемые файлы.
Дополнительную информацию о задании параметра KEEPDARI смотрите в разделе 'Updating the Database Manager Configuration File' Главы 2 "Setup" руководства 'Application Building Guide'.
Прим.: | Процедуры SQL не поддерживают для параметров следующие типы данных:
|
Первый абзац в разделе 'Using the CALL Command' должен выглядеть так:
Для использования команды CALL нужно ввести имя хранимой процедуры, все параметры IN или INOUT, а также '?' вместо каждого параметра OUT. Подробное описание синтаксиса команды CALL смотрите в разделе 10.14, "CALL".
Прим.: | Чтобы распространить скомпилированные процедуры SQL по серверамDB2 надо
выполнить описанные ниже шаги на каждом сервере DB2, который служит как
источник или назначение скомпилированной процедуры SQL:
|
Когда вы определяете процедуру SQL, она преобразуется в программу C, прекомпилируется, связывается с базой данных назначения, компилируется и компонуется для создания совместно используемой библиотеки. Для шагов компиляции и компоновки нужно, чтобы на компьютере сервера баз данных был доступен компилятор C или C++. Однако, определив процедуру SQL, вы можете распространить ее в скомпилированной форме на базы данных DB2 той же платформы, не обязательно имеющие доступ к компилятору C или C++. DB2 позволяет пользователю извлекать процедуры SQL в скомпилированной форме из одной базы данных и устанавливать их в другую базу данных.
Для извлечения и установки в DB2 есть и интерфейс командной строки, и программный интерфейс. Интерфейс командной строки состоит из двух команд: GET ROUTINE и PUT ROUTINE. Программный интерфейс состоит из двух встроенных хранимых процедур: GET_ROUTINE_SAR и PUT_ROUTINE_SAR. Дополнительную информацию об интерфейсе командной строки смотрите в справочнике Command Reference. Дополнительную информацию о программном интерфейсе смотрите в справочнике SQL Reference.
Чтобы распространить скомпилированную процедуру SQL с одного сервера баз данных на другой, выполните следующие действия:
Шаг 1. | Разработайте программу и определите, как ее часть, процедуры SQL. |
Проверив эти процедуры, извлеките скомпилированную версию каждой процедуры в отдельный файл. Дополнительную информацию смотрите в описании команды GET ROUTINE в справочнике Command Reference или хранимой процедуры GET_ROUTINE_SAR в справочнике SQL Reference. | |
Шаг 3. | Вставьте скомпилированную версию каждой процедуры на каждый сервер либо при помощи команды PUT ROUTINE, либо вызвав хранимую процедуру PUT_ROUTINE_SAR; используйте файлы, созданные на шаге 2. На каждом сервере баз данных должна быть та же операционная система и тот же уровень DB2.
|