|
твой кролик написал...
|
|||
---|---|---|---|
#18+
вот такой псевдокод: Код: plaintext 1. 2. 3. 4. 5. 6.
я никак не могу определить между началом транзакции и set connection, доступен ли ресурс. когда я делаю set connection, a db2 не доступна, програмка или падает с виндовняным exception, или виснет и висит себе, в зависимости от версий db2 и MQ. когда db2 возвращается к жизни, программка не оживает. другие sql запросы к db2 отрабатывают ситуацию корректно, с sql ошибкой. потом при коммите транзакция откатывается. кто-нибудь сталкивался в подобным? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2004, 12:23 |
|
твой кролик написал...
|
|||
---|---|---|---|
#18+
solaris. after db2stop force did SET CONNECTION and checked sqlca.sqlcode, it was 0. next step OPEN CURSOR, got: sqlca.sqlcode -998 OPEN CURSOR SQL0998N Error occurred during transaction or heuristic processing. Reason Code = "9". Subcode = "". SQLSTATE=58005 Reason COde 9 means: registration (ax_reg) with the transaction manager failed. I am not sure the sqlcode == 0 is correct and expectable after SET CONNECTION, but it's still possible to catch the error after OPEN CURSOR (I'd prefer to catch it after SET CONNECTION though). MQBEGIN after error (when a database manager is stopped) returns reason 2128. Seems it differs a litle bit from what you have at windows. I may check aix/linux also. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2004, 15:14 |
|
твой кролик написал...
|
|||
---|---|---|---|
#18+
>I am not sure the sqlcode == 0 is correct and expectable after SET CONNECTION по-моему, нормально. >next step OPEN CURSOR, got: >sqlca.sqlcode -998 >OPEN CURSOR SQL0998N Error occurred during transaction or heuristic >processing. Reason Code = "9". Subcode = "". SQLSTATE=58005 у меня тот же sqlcode, если set connection выполнился еще до останова db2. на reason я правда не посмотрел. >Seems it differs a litle bit from what you have at windows. наверно просто баг >MQBEGIN after error (when a database manager is stopped) returns reason 2128. ? это вряд ли... должен быть warning 2122. а 2128 это ты либо 2 раза сказал MQBEGIN, и между ними не было коммита, или ты сделал PUT/GET с SYNCPOINT опцией, а потом MQBEGIN. на OS/390 и OS/400 такой ситуации не бывает -> там MQ не может быть координатором >I may check aix/linux also. давай :) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2004, 16:04 |
|
твой кролик написал...
|
|||
---|---|---|---|
#18+
>MQBEGIN after error (when a database manager is stopped) returns reason 2128. ? это вряд ли... должен быть warning 2122. а 2128 это ты либо 2 раза сказал MQBEGIN, и между ними не было коммита, или ты сделал PUT/GET с SYNCPOINT опцией, а потом MQBEGIN. -- oops, correct, after OPEN CURSOR failed I have inserted one more MQBEGIN without MQBACK/MQCMIT. Changed it, inserted MQBEGIN, SET CONNECTION, OPEN CURSOR, again got sqlcode -998 after open cursor failed. Second MQBEGIN returns CompCode == 0, Reason == 0 (when the dbm was stopped). And it is correct imho - it become a one-phase transaction. I'll check aix/linux later (the channel is too bad now, centrTelecom blin...) ... |
|||
:
Нравится:
Не нравится:
|
|||
23.06.2004, 16:23 |
|
твой кролик написал...
|
|||
---|---|---|---|
#18+
ggv, ты делал set connection или connect type 2? т.e. cтандартный или IBM-овский statement? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2004, 18:13 |
|
твой кролик написал...
|
|||
---|---|---|---|
#18+
SET CONNECTION. now checking at linux. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.06.2004, 22:50 |
|
твой кролик написал...
|
|||
---|---|---|---|
#18+
Linux - the same behavior as at solaris. Absolutely the same - SET CONNECTION works ok, OPEN CURSOR returns sqlcode -998. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2004, 00:15 |
|
твой кролик написал...
|
|||
---|---|---|---|
#18+
ок, спасибо. сегодня у меня ошибка поплыла: db2 доступна Begin MQHCONN CC=0 RC=0 MQBEGIN CC=0 RC=0 MQPUT1 CC=0 RC=0 Sleep(60000) db2stop force SET CONNECTION XXX SQLCODE = 0 -- этот set connection отработал. Sleep(60000) Begin INSERT INTO TEST VALUES('Q') INSERT INTO TEST VALUES('Q') SQLCODE = -998 Sleep(60000) INSERT INTO TEST VALUES('F') SQLCODE = -998 MQCMIT CC=0 RC=0 Sleep(60000) MQBACK CC=0 RC=0 MQDISC CC=0 RC=0 End Begin MQHCONN CC=0 RC=0 MQBEGIN CC=1 RC=2122 когда db2 не доступна MQPUT1 CC=0 RC=0 Sleep(60000) SET CONNECTION <здесь, на set connection, программка упала> memory could not be read. однако, MQBEGIN у меня возвращает 2122, когда db2 остановлена, как и сказано в документации. поэтому, я обхожу ситуацию, тестируя MQBEGIN на 2122, и делая set connection сразу после MQBEGIN. криво, конечно, но что делать :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2004, 12:18 |
|
твой кролик написал...
|
|||
---|---|---|---|
#18+
it's strange why at solaris/linux MQBEGIN does not return 2122 when db2 stopped. I'll check one more time. I do SET CONECTION immediatelly after MQBEGIN also. But since MQBEGIN always successfull, the single way to check db2 aveilability is to check sqlcode after any SQL execution. BTW I can't test on AIX - I don't have mqm on the available for me rs/6000, and do not have access to a server where it is installed. I have MQSeries for aix at CD< but I can't pay for it uploading. And could not find it somewhere on ftp to download from the server. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.06.2004, 13:23 |
|
твой кролик написал...
|
|||
---|---|---|---|
#18+
MQSEND accepts a varchar/clob. I could not find any way to pass a binary data to it. As for me, it is a restriction. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.06.2004, 20:51 |
|
твой кролик написал...
|
|||
---|---|---|---|
#18+
эти функции изначально ограничены. по-моему, они ни на что не годятся. почему бы тебе не переделать программку на MQI? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2004, 16:51 |
|
твой кролик написал...
|
|||
---|---|---|---|
#18+
the program IS using MQI. The question was almost 'theoretical'. Just imagine - triggered event, has to send a message, at the remote end the message has to be parsed/proceeded. I understand, XML, web-services, bla-bla-bla, everything nice and perfect. Until the triggered event launched hundreds/thousands times per second, and at the remote end one needs a really huge server to parse the fu$%ing XML. When I can just send a binary datagram by passing a pointer to C-structure (after converting to XDR) to MQPUT... But it is not about remote end only, the same at the database server. Ok, I could just concat fields with delimeters to a string, and parse the string at the remote end..... But still with C-structure it IS better/faster/simpler/whatever. MQSEND/MQRECEIVE is nice, imho, for realy rare launched triggers, like adding a new customer, something like that. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2004, 18:11 |
|
твой кролик написал...
|
|||
---|---|---|---|
#18+
ок, как ты увязал mqsend и commitment control? что если mq не доступна? я не знаю, как тут быть на workstation. что если программка, на которую сработал триггер, вообще однофазная? (и такие бывают) мы отсылали сообщения из триггера (db2), но это было на AS/400. там я по крайней мере знаю, как увязать зтот дурацкий триггер и двухфазную транзакцию. 1) программа жутко тормозила, особенно при массовых updates 2) заказчику очень не нравилось, что он не может остановить mq поэтому закончилось это так: триггер что-то ловит и записывает измерения в таблицу или capture что-то ловит и записывает изменения в CD-таблицу. а потом зти изменения обрабатываются специальной программкой. >When I can just send a binary datagram by passing a pointer to C-structure >after converting to XDR) to MQPUT... зачем xdr? можно exit-ы не написать. вообще-то, полько лишний гемой, что xdr, что ехит-ы. >Ok, I could just concat fields with delimeters to a string, and parse the string at >the remote end..... But still with C-structure it IS better/faster/simpler/whatever. вот структура на 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. 62. 63. 64. 65. 66. 67. 68. 69. 70.
какие проблемы, передавай указатель. в MQMD.Format ставишь MQFMT_STRING MQGET делаешь с MQGMO_CONVERT ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2004, 19:13 |
|
твой кролик написал...
|
|||
---|---|---|---|
#18+
"какие проблемы, передавай указатель. в MQMD.Format ставишь MQFMT_STRING MQGET делаешь с MQGMO_CONVERT" - the pointer to DB2MQ.MQSEND() ???? With MQI there is no problem, but I told about MQSEND/MQRECEIVE. ABout problems with triggers - agreed. About XDR vs Exit - imho XDR simpler. But you need something if you have and Intel and Sparc and ... so on. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.06.2004, 21:39 |
|
твой кролик написал...
|
|||
---|---|---|---|
#18+
as for me, I use MQSEND in a trigger only to catch the changes in a Directory server. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2004, 08:36 |
|
твой кролик написал...
|
|||
---|---|---|---|
#18+
>About XDR vs Exit - imho XDR simpler. по мне, строка все же проще. к тому же, как конвертировать ASCII/EBCDIC c XDR. например 1025->1251. или, чего доброго 37->866. и такое было. я пишу структуры для сообщений, как привел выше. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2004, 15:16 |
|
твой кролик написал...
|
|||
---|---|---|---|
#18+
"я пишу структуры для сообщений, как привел выше." - sorry, it has nothing to do with C, I guess, it is C++ XDR has nothing to do to codepage. man rpcgen. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.06.2004, 16:57 |
|
|
start [/forum/search_topic.php?author=maximkos&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
162ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 331ms |
total: | 626ms |
0 / 0 |