Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
SQL0444N rc 99 - при обращении к польз.функции С++
|
|||
|---|---|---|---|
|
#18+
Перенес БД с DB2 v8 x86 на DB2 Express-C 9.7 x64... Отказываются работать пользовательские функции... Возвращает SQL0444N rc 99... Что может быть? Функции в свое время компилировались еще VS 6... Может быть дело в древности? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2013, 17:17 |
|
||
|
SQL0444N rc 99 - при обращении к польз.функции С++
|
|||
|---|---|---|---|
|
#18+
2013-02-09-22.52.01.045000+240 E13534F548 LEVEL: Error (OS) PID : 1800 TID : 2676 PROC : db2syscs.exe INSTANCE: DB2 NODE : 000 DB : DATA1 APPHDL : 0-7 APPID: *LOCAL.DB2.130209185141 AUTHID : ADMIN EDUID : 2676 EDUNAME: db2agent (DATA1) FUNCTION: DB2 UDB, oper system services, sqloloadmodule, probe:43 MESSAGE : ZRC=0x830000C1=-2097151807 CALLED : OS, -, unspecified_system_function OSERR : 193 "%1 не является приложением Win32." Вот такое в db2diag.log пишется... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2013, 23:06 |
|
||
|
SQL0444N rc 99 - при обращении к польз.функции С++
|
|||
|---|---|---|---|
|
#18+
1. Установил VS2005.... 2. Установил Express-C 9.7... 3. Взял исходники и собрал dll заново.... Подключил функцию... Результат тот же.... OS ERR 193..... Ну ткните же носом где я туплю... Ведь чую тут какой-то мой косяк очевидный... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2013, 10:07 |
|
||
|
SQL0444N rc 99 - при обращении к польз.функции С++
|
|||
|---|---|---|---|
|
#18+
стандартный батником BLDRTN через командную строку собирать модуль отказывается... ругается на LNK2001 __DllMainCRTStartup@12 .... Взял cxx-файл, который получился после embprep.bat... И собрал по нему dll прямо в среде VS2005... Результат тот же... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2013, 10:26 |
|
||
|
SQL0444N rc 99 - при обращении к польз.функции С++
|
|||
|---|---|---|---|
|
#18+
Итак... В среде VS 2005 dll собирается... подключаю ее к базе... при вызове функции получаю SQL0444N rc 99.... Мысли закончились... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2013, 11:36 |
|
||
|
SQL0444N rc 99 - при обращении к польз.функции С++
|
|||
|---|---|---|---|
|
#18+
TORT, DLL точно получается 32-битный? Опции компиляции совпадают? Windows C and C++ routine compile and link options Нужно попробовать скомпилировать (при помощи bldrtn) и запустить любую функцию из примеров. Если будет работать - сравнить исходный код примера и собственный код. Если нет - разбираться с процессом компиляции. Возможно, имеет смысл использовать более свежий Visual Studio for C++. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2013, 11:43 |
|
||
|
SQL0444N rc 99 - при обращении к польз.функции С++
|
|||
|---|---|---|---|
|
#18+
А почему dll должна быть 32-битная? У меня и Win7 x64, и Express-C 9.7 x64.... Дело в dll-ке... Если ее удалить, то получаю стандартный код SQL0444N rc 4 Насчет примеров... Сейчас попробую... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2013, 11:48 |
|
||
|
SQL0444N rc 99 - при обращении к польз.функции С++
|
|||
|---|---|---|---|
|
#18+
В опции компилятора cl.exe указано -DWIN32... Это нормально для моего случая? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2013, 11:51 |
|
||
|
SQL0444N rc 99 - при обращении к польз.функции С++
|
|||
|---|---|---|---|
|
#18+
TORT, Попробуйте раскомментировать следующую строку (37) в bldrtn rem set BITWIDTH=32onWin64 Полностью блок строк должен выглядеть так: Код: powershell 1. 2. 3. Это влияет на определение путей к библиотекам, должно вылечить ошибку линковки. Вот условный блок Код: powershell 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2013, 11:57 |
|
||
|
SQL0444N rc 99 - при обращении к польз.функции С++
|
|||
|---|---|---|---|
|
#18+
Спасибо за наводки... Есть хорошая новость... Пример собрался и заработал... Уже хлеб... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2013, 12:05 |
|
||
|
SQL0444N rc 99 - при обращении к польз.функции С++
|
|||
|---|---|---|---|
|
#18+
все... разобрался... дело было в PROGRAM TYPE SUB при создании функции... По умолчанию, похоже, ставится PROGRAM TYPE MAIN и СУБД ищет исполняемый файл, а не библиотеку DLL... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2013, 12:20 |
|
||
|
SQL0444N rc 99 - при обращении к польз.функции С++
|
|||
|---|---|---|---|
|
#18+
Прошло несколько дней... Попытался вновь пересоздать функцию... Устанавливаю PROGRAM TYPE SUB, а функция опять за старое... SQL0444N RC=99 Что же это может быть все-таки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2013, 10:41 |
|
||
|
SQL0444N rc 99 - при обращении к польз.функции С++
|
|||
|---|---|---|---|
|
#18+
TORT, Если функция из примеров нормально компилируется и работает, и процесс компиляции кода из примера и кода проблемной функции 100% совпадает, то искать отличия в самом коде. Если анализ db2diag.log ничего нового не принес, то по порядку: 1. С помощью Dependency Walker проверить список внешних DLL, на которые есть ссылки из модуля функции. Там есть опция (кнопка) показывать полные пути. Сравнить список зависимостей для примера и для проблемного кода. Если функция использует внешние библиотеки, то убедиться что для них совпадает режим битности. 2. При помощи Sysinternals Process Monitor или File Monitor выяснить какие DLL-модули и откуда пытается подгрузить DB2 при вызове функции. Там нужно правильно задать фильтр, например по номеру процесса, т.к. по умолчанию мониторится все, а это весьма плотный поток информации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2013, 10:43 |
|
||
|
SQL0444N rc 99 - при обращении к польз.функции С++
|
|||
|---|---|---|---|
|
#18+
Чтобы не плодить тем тут напишу... Продолжение истории... Вчера ловил глюк... Вызываю свою функцию (ту, которую выше в теме подключал)... До какого-то времени все работало нормально... Вчера пробую вызов values(myfunc(...)) выдает неправильное значение... Ну просто от фонаря, но стабильно неправильное... Причем... Если функцию вызывать локально, то все корректно... Если через клиента, то неправильное... Далее ньюанс... Если пробую вызов в связке v9.7 x64 Exc-C - v9.7 x64 Exc-C, то все корректно... А если клиент v8.1.9 x32, а сервер v9.7 x64 Exc-C , тогда не корректное значение.... Все вылечилось перезагрузкой сервера... Что это могло быть? Что-то с совместимостью? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2013, 16:40 |
|
||
|
SQL0444N rc 99 - при обращении к польз.функции С++
|
|||
|---|---|---|---|
|
#18+
Функция зарегистрирована как FENCED и NOT THREADSAFE.... Если вызвать ее сначала с x32 клиента, то работает... Если вызвать ее с x64 клиента, то на x32 клиентах перестает работать адекватно... Очень на это похоже... Может же такое быть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2013, 17:33 |
|
||
|
SQL0444N rc 99 - при обращении к польз.функции С++
|
|||
|---|---|---|---|
|
#18+
Взял пример... Собрал udfsrv.dll... Подключил функции, результат все тот же... rc99.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2013, 14:20 |
|
||
|
SQL0444N rc 99 - при обращении к польз.функции С++
|
|||
|---|---|---|---|
|
#18+
Краткая выжимка.... Есть Win7 x64.... Есть DB2 Express-C v 9.7 x64 Есть VS2005 x86.... Примеры udfsrv.c собираю в dll... Создаю функцию... Потом пытаюсь запустить values(myfunc()) и получаю SQL0444N Reason Code 99 Все... Куда копать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2013, 15:14 |
|
||
|
SQL0444N rc 99 - при обращении к польз.функции С++
|
|||
|---|---|---|---|
|
#18+
Что же за взрыв мозга....?!?! Истроия 1: 1. Рестарт сервера DB2 x64... 2. Клиент DB2 x32 (на Win7 x64 или WinXP x32 без разницы) вызывает myfunc... Результат правильный... 3. Клиент DB2 x64 (на Win7 x64) вызывает myfunc... Результат правильный... 4. Клиент DB2 x32 (на Win7 x64 или WinXP x32 без разницы) вызывает myfunc... Результат НЕ правильный... 5. Клиент DB2 x64 (на Win7 x64) вызывает myfunc... Результат правильный... Истроия 2: 1. Рестарт сервера DB2 x64... 2. Клиент DB2 x64 (на Win7 x64) вызывает myfunc... Результат правильный... 3. Клиент DB2 x32 (на Win7 x64 или WinXP x32 без разницы) вызывает myfunc... Результат НЕ правильный... 4. Клиент DB2 x64 (на Win7 x64) вызывает myfunc... Результат правильный... Что за треш? Получается, что DB2 x32 клиенты не могут работать с DB2 x64 клиентами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.03.2013, 16:51 |
|
||
|
SQL0444N rc 99 - при обращении к польз.функции С++
|
|||
|---|---|---|---|
|
#18+
Не пойму... Как же такое в принципе возможно?!?! Функция возвращает разные результаты в зависимости от разрядности клиента и ОС клиента... Разве это должно быть? Переставил сервер... Теперь он DB2 Express-C 9.7.6 x32 на Win7 x64... Проблема немного видоизменилась... Теперь башню серверу сносит вызов функции с 32-разрядного клиента на Win7 x64 машине.... Пошлите, где копать-то? Как же функция может возвращать разные результаты??? Функция DETERMINISTIC, входные параметры идентичны... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.03.2013, 15:10 |
|
||
|
SQL0444N rc 99 - при обращении к польз.функции С++
|
|||
|---|---|---|---|
|
#18+
TORT, Тут нужна конкретика. Нужно как минимум DDL-определение функции и хотя бы часть исходного кода, в котором описан заголовок функции. Если возвращаются разные результаты в разных режимах, нужно в код функции ставить диагностический вывод в файл, чтобы фиксировать что пришло на вход и что вернулось на выход. Нужно понять, в каком месте происходит искажение информации. Либо это происходит в теле функции, тогда вопрос к отладке этого кода, либо это происходит на этапе передачи между DB2 и кодом функции, и с этим нужно разбираться отдельно. Возможно также, что искажение информации происходит на этапе взаимодействия клиент/сервер. Отдельный вопрос насколько сложная логика заложена в функцию? Не проще ли будет переписать ее на NativeSQL и забыть про компиляцию вообще? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 09:45 |
|
||
|
SQL0444N rc 99 - при обращении к польз.функции С++
|
|||
|---|---|---|---|
|
#18+
Евгений ХабаровTORT, Тут нужна конкретика. Нужно как минимум DDL-определение функции и хотя бы часть исходного кода, в котором описан заголовок функции. Если возвращаются разные результаты в разных режимах, нужно в код функции ставить диагностический вывод в файл, чтобы фиксировать что пришло на вход и что вернулось на выход. Нужно понять, в каком месте происходит искажение информации. Либо это происходит в теле функции, тогда вопрос к отладке этого кода, либо это происходит на этапе передачи между DB2 и кодом функции, и с этим нужно разбираться отдельно. Возможно также, что искажение информации происходит на этапе взаимодействия клиент/сервер. Отдельный вопрос насколько сложная логика заложена в функцию? Не проще ли будет переписать ее на NativeSQL и забыть про компиляцию вообще? Конкретика... Функция считает crc32 для входной строки... Написана на С... Алгоритм расчета, да и сами исходники идентичны вот этим http://www.sql.ru/forum/actualthread.aspx?tid=854674 .... ddl функции... CREATE FUNCTION "DBASE"."CRC32" ( STR VARCHAR(100), L INTEGER ) RETURNS BIGINT SPECIFIC CRC32 EXTERNAL NAME 'c:\database\crc32!crc32' LANGUAGE C PARAMETER STYLE SQL VARIANT FENCED NOT THREADSAFE NULL CALL READS SQL DATA EXTERNAL ACTION NO SCRATCHPAD NO FINAL CALL DISALLOW PARALLEL NO DBINFO; За идею с логами отдельное спасибо... Попробую реализовать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 10:26 |
|
||
|
SQL0444N rc 99 - при обращении к польз.функции С++
|
|||
|---|---|---|---|
|
#18+
TORT, Есть db2 ese 9.7.6 x64. Пробовал по-разному и с windows x64, и с x86 (10.1 linux, 9.7 windows) в разных комбинациях. Не смог добиться разных результатов. Алгоритм взял отсюда: Cyclic redundancy check crc32.c Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. bldrtn.bat Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 14:07 |
|
||
|
SQL0444N rc 99 - при обращении к польз.функции С++
|
|||
|---|---|---|---|
|
#18+
TORT, Вношу свой вариант. 1. Согласно документации, если DB2 сервер работает в 64-битном режиме, то и функцию желательно компилировать в режиме 64-бит. Так будет работать быстрее. 2. Сам алгоритм CRC32 работает по таблице. Генерировать таблицу при каждом вызове функции не есть правильно, т.к. ее можно просчитать заранее. Поэтому взят код с готовой таблицей, размещенный в википедии Циклический избыточный код , а именно: "Пример программы табличного (быстрого) расчёта CRC-32 на языке Си". В код добавлено описание функции в виде, совместимом с СУБД DB2. Код скомпилирован на рабочей станции следующей конфигурации: Операционная система: Windows 7 Professional x64 DB2: Client V9.7 FP7 (x64) Компилятор: Microsoft (R) C/C++ Optimizing Compiler Version 16.00.30319.01 for x64 Целевая платформа: /Release /x64 /2003 Компилятор установлен в комплекте с Microsoft Windows SDK for Windows 7 and .NET Framework 4 (ISO) . Взят дистрибутив для платформы x64: GRMSDKX_EN_DVD.iso Компилировал с помощью команды "udf_compile.cmd crc32" В итоге получил dll, скопировал на сервер (Windows 2003 Server SP2 (x64), DB2 V10.1 FP2 (x64)) в подкаталог FUNCTION После этого создал в базе описание функции (cre_CRC32.ddl). Проблем с работой пока не обнаружил. Запрашивал с разных клиентов. Выкладываю архив, включая готовую DLL-библиотеку.Надеюсь поможет разобраться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2013, 17:19 |
|
||
|
SQL0444N rc 99 - при обращении к польз.функции С++
|
|||
|---|---|---|---|
|
#18+
TORT, Еще вопрос, для каких целей используется эта функция? Для создания уникальных хешей можно использовать и другие алгоритмы, например MD5. PS: В DB2 9.7 есть встроенная функция хеширования, правда сам пока ее нигде не применял. Правда эта функция, как и другие из раздела System-defined Modules, недоступна на DB2 Express-C. GET_HASH_VALUE function - Compute a hash value for a given string . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2013, 07:29 |
|
||
|
SQL0444N rc 99 - при обращении к польз.функции С++
|
|||
|---|---|---|---|
|
#18+
Евгений ХабаровTORT, Еще вопрос, для каких целей используется эта функция? Для создания уникальных хешей можно использовать и другие алгоритмы, например MD5. PS: В DB2 9.7 есть встроенная функция хеширования, правда сам пока ее нигде не применял. Правда эта функция, как и другие из раздела System-defined Modules, недоступна на DB2 Express-C. GET_HASH_VALUE function - Compute a hash value for a given string . Спасибо, что отвечаете... И Вам, и Mark Barinstein .... С другими алгоритмами хеширования пока не хочется заморачиваться... Мне в принципе непонятно было отчего функция возвращала разные результаты... Ведь на WSE v.8 работает без проблем... Потестирую Ваши примеры... Напишу, в чем там я заблуждался... Кстати, с правами доступа в Win7 не может быть каких-нибудь бедствий? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2013, 17:38 |
|
||
|
|

start [/forum/topic.php?fid=43&msg=38187192&tid=1601495]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
87ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 258ms |
| total: | 432ms |

| 0 / 0 |
