powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / твой кролик написал...
18 сообщений из 18, страница 1 из 1
твой кролик написал...
    #32573459
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот такой псевдокод:

Код: plaintext
1.
2.
3.
4.
5.
6.
begin transaction (MQ)
<some actions>
<db2stop mode force>
<some actions>
set connection
...............

я никак не могу определить между началом транзакции и set connection, доступен ли ресурс.

когда я делаю set connection, a db2 не доступна, програмка или падает с виндовняным exception, или виснет и висит себе, в зависимости от версий db2 и MQ. когда db2 возвращается к жизни, программка не оживает.

другие sql запросы к db2 отрабатывают ситуацию корректно, с sql ошибкой. потом при коммите транзакция откатывается.

кто-нибудь сталкивался в подобным?
...
Рейтинг: 0 / 0
твой кролик написал...
    #32574009
ggv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ggv
Гость
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.
...
Рейтинг: 0 / 0
твой кролик написал...
    #32574178
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>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.
давай :)
...
Рейтинг: 0 / 0
твой кролик написал...
    #32574232
ggv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ggv
Гость
>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...)
...
Рейтинг: 0 / 0
твой кролик написал...
    #32576265
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ggv,
ты делал set connection или connect type 2? т.e. cтандартный или IBM-овский statement?
...
Рейтинг: 0 / 0
твой кролик написал...
    #32576478
ggv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ggv
Гость
SET CONNECTION.
now checking at linux.
...
Рейтинг: 0 / 0
твой кролик написал...
    #32576500
ggv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ggv
Гость
Linux - the same behavior as at solaris. Absolutely the same - SET CONNECTION works ok, OPEN CURSOR returns sqlcode -998.
...
Рейтинг: 0 / 0
твой кролик написал...
    #32577136
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ок, спасибо.


сегодня у меня ошибка поплыла:

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. криво, конечно, но что делать :)
...
Рейтинг: 0 / 0
твой кролик написал...
    #32577384
ggv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ggv
Гость
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.
...
Рейтинг: 0 / 0
твой кролик написал...
    #32580059
ggv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ggv
Гость
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.
...
Рейтинг: 0 / 0
твой кролик написал...
    #32581713
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
эти функции изначально ограничены. по-моему, они ни на что не годятся. почему бы тебе не переделать программку на MQI?
...
Рейтинг: 0 / 0
твой кролик написал...
    #32581966
ggv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ggv
Гость
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.
...
Рейтинг: 0 / 0
твой кролик написал...
    #32582073
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ок, как ты увязал 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.
template <unsigned int N>
class CHA
{
public:
	char    str[N];
    CHA(const char* s =  0 )
    { assign(s); }
	
    CHA<N>& operator=(const char* s)
    {
		assign(s);
		return *this; 
	}
	
    CHA<N>& operator=(const CHA<N> s)
    {
		assign(s.str);
		return *this; 
	}
	operator const char* ()      { return str; }
    char    operator[](unsigned int i) { return str[i]; }
    const
		char*   operator+ (unsigned int i)  { return str + i; }
	
    unsigned int    length() const;
 int     eq(const char* exp_str) // bool;
 
	
private:
  ....

};


template <unsigned int N>
class NUM
{
public:
    char    str[N];
    NUM(unsigned int n =  0 )
    { assign(n); }
	
    NUM<N>& operator=(unsigned int n);

    operator const char* ()      { return str; }
    char    operator[](unsigned int i) { return str[i]; }
    const
		char*   operator+ (unsigned int i)  { return str + i; }
	
    operator unsigned int();
   	int valid(void) const;
	}
private:
 ......
};

struct BLALBALBA
{
    CHA< 4 >      CC1;
    NUM< 9 >      NN1;
    NUM< 9 >      NN2;
    CHA< 1 >      CC2;
    CHA< 1 >      CC3;
    CHA< 1 >      CC4;
    CHA< 1025 >   CC5;
    BLALBALBA() {};
};





какие проблемы, передавай указатель. в MQMD.Format ставишь MQFMT_STRING
MQGET делаешь с MQGMO_CONVERT
...
Рейтинг: 0 / 0
твой кролик написал...
    #32582173
ggv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ggv
Гость
"какие проблемы, передавай указатель. в 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.
...
Рейтинг: 0 / 0
твой кролик написал...
    #32582341
ggv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ggv
Гость
as for me, I use MQSEND in a trigger only to catch the changes in a Directory server.
...
Рейтинг: 0 / 0
твой кролик написал...
    #32583577
Фотография NewYear
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>About XDR vs Exit - imho XDR simpler.
по мне, строка все же проще. к тому же, как конвертировать ASCII/EBCDIC c XDR. например 1025->1251. или, чего доброго 37->866. и такое было.

я пишу структуры для сообщений, как привел выше.
...
Рейтинг: 0 / 0
твой кролик написал...
    #32583845
ggv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ggv
Гость
"я пишу структуры для сообщений, как привел выше." - sorry, it has nothing to do with C, I guess, it is C++

XDR has nothing to do to codepage. man rpcgen.
...
Рейтинг: 0 / 0
твой кролик написал...
    #32583848
ggv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ggv
Гость
IMHO.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / твой кролик написал...
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]