Гость
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / two-phase transaction MQSeries and DB2 / 19 сообщений из 19, страница 1 из 1
16.04.2004, 12:26
    #32484081
ggv
ggv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
two-phase transaction MQSeries and DB2
Does anybody have an experience with subj?
I'd like to ask a few question, but since it's an off-topic here we may use email.
...
Рейтинг: 0 / 0
16.04.2004, 12:45
    #32484126
NewYear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
two-phase transaction MQSeries and DB2
я все знаю про w2k OS/400 и OS/390. под юникс только в теории
...
Рейтинг: 0 / 0
16.04.2004, 12:47
    #32484128
NewYear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
two-phase transaction MQSeries and DB2
какой вопрос?
...
Рейтинг: 0 / 0
16.04.2004, 14:07
    #32484308
ggv
ggv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
two-phase transaction MQSeries and DB2
I know nothing about windows, as/400 and OS/390 :)
But as/400 is my close target, OS/390 is my future targent, windows is not a target at all :)
NewYear: shell we go off-line? Email or?
Or is it ok to talk here? it's a DB2 forum, not dedicated for MQSeries.
...
Рейтинг: 0 / 0
16.04.2004, 14:17
    #32484335
riman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
two-phase transaction MQSeries and DB2
It is not a DB2 forum already :). It is an "IBM and IBM-technology near DB2" forum IMHO.

Post here, please, it would be usefull for me and the others, i think.
...
Рейтинг: 0 / 0
16.04.2004, 14:24
    #32484346
NewYear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
two-phase transaction MQSeries and DB2
...
Рейтинг: 0 / 0
19.04.2004, 10:57
    #32485949
ggv
ggv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
two-phase transaction MQSeries and DB2
1) qm.ini :
XAResourceManager:
Name=sms
SwitchFile=/opt/IBM/db2/V8.1/function/db2swit
XAOpenString=sms,mqm,droolt-Er
ThreadOfControl=THREAD

2) CLI code :

// Allocate a connection handler
sqlret = SQLAllocHandle(SQL_HANDLE_DBC, henv,
&(hcon->hdbc));

// Set AUTOCOMMIT off
sqlret = SQLSetConnectAttr(hcon->hdbc, SQL_ATTR_AUTOCOMMIT,
( void * ) SQL_AUTOCOMMIT_OFF, SQL_NTS);

// Connect the new connection
sqlret = SQLConnect(hcon->hdbc, server, SQL_NTS,
NULL, 0, NULL, 0);


// Set Cusrsor Close Behavior
sqlret = SQLSetConnectAttr(hcon->hdbc, SQL_ATTR_CLOSE_BEHAVIOR,
( void * ) SQL_CC_RELEASE, SQL_NTS);

// Set Isolation Level
sqlret = SQLSetConnectAttr(hcon->hdbc, SQL_ATTR_TXN_ISOLATION,
( void * ) SQL_TXN_READ_COMMITTED, SQL_NTS);

MQCONN(qmgr,
hcon,
&CompCode,
&Reason);

MQOPEN(*hcon,
&(obj->od),
obj->O_options,
&(obj->hobj),
&CompCode,
&Reason);

/* Start a UOW */
MQBEGIN (hcon.mqcon, &bo, &CompCode, &Reason);

MQGET(hcon.mqcon,
obj.hobj,
&(obj.md),
&(obj.op.gmo),
sizeof(struct SMS),
&sSMS,
&messlen,
&CompCode,
&Reason);

/* A set of SQL statements here */
.............................

MQCMIT(*mqcon, &CompCode, &Reason);

And at this point the UOF is commited in the queue only, and is not commited in the database. If I, for example, do "select" from another connection I will get timeout. When the program finished the queue is empty, the database is rolled back.

The question is - what I do wrong, and why firt phase (queue's commit/rollback) works but the second phase (database's commit/rollback) does not work?
...
Рейтинг: 0 / 0
19.04.2004, 11:21
    #32485989
NewYear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
two-phase transaction MQSeries and DB2
в программе не должно быть connect к db2, потому что коннект делает queue manager. это происходит во время MQBEGIN() вызова.
т.е.

программа должна выглядеть так

MQCONN()
MQBEGIN()
EXEC SQL SET CONNECTION;
.............

ДВУХФАЗНЫЕ ТРАНЗАКЦИИ
..............

MQCMIT();


у тебя получилось разные коннекты в y queue mаnager и в программе?

к сожалению, здесь cli, а не esql.
...
Рейтинг: 0 / 0
19.04.2004, 11:34
    #32486011
NewYear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
two-phase transaction MQSeries and DB2
если 2 раза подконнектиться к db2 что будет? вернется ли тот же самый handle если ThreadOfControl=PROCESS ?

в MQ именно так и происходит и возвращается MQRC_ALREDY_CONNECTED warning.

токжа ты сможешь сделать connect уже после MQBEGIN() и получить handle.
...
Рейтинг: 0 / 0
19.04.2004, 11:47
    #32486047
ggv
ggv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
two-phase transaction MQSeries and DB2
Ok, I may change to esql.
But looking at /opt/mqm/samp/xatm/
I see at amqsxag0.c the sequence:
MQCONN
MQOPEN
MQBEGIN
MQGET
EXEC SQL CONNECT TO
different sql statements and multiple EXEC SQL CONNECT to different databases
MQCMIT

In the example IBM shows EXEC SQL CONNECT between MQBEGIN and MQCMIT....
it confuses me....
And I read in the doc somewhere (now will find it) that a working program has two connection - one from the program itself and another from MQ.... But I am not sure and will check it now.
...
Рейтинг: 0 / 0
19.04.2004, 12:14
    #32486118
NewYear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
two-phase transaction MQSeries and DB2
you are alredy connected after MQBEGIN, why connect?

in additional, specify
db2 prep acces.sqc bindfile CONNECT 2 SYNCPOINT TWOPHASE SQLRULES STD
...
Рейтинг: 0 / 0
19.04.2004, 12:58
    #32486230
NewYear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
two-phase transaction MQSeries and DB2
я понил про что ты говоришь.

EXEC SQL CONNECT TO
different sql statements and multiple EXEC SQL CONNECT to different databases

считай что это set connection. это не connect к базе.
...
Рейтинг: 0 / 0
19.04.2004, 13:00
    #32486245
ggv
ggv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
two-phase transaction MQSeries and DB2
I can read russian perfectly, I just can not type.

I understand that after MQBEGIN we get connected to a database.
I just told that IBM examples from /opt/mqm/sampl/xatm confuses me.
Now I change to embedded SQL, because does not see any way how to handle global UOW with CLI, and you NewYear may have a look at IBM example, I send it now by email :)
I don't know why, but IBM has EXEC SQL CONNECT between MQBEGIN and MQCMIT in their example.
Email's been sent.
...
Рейтинг: 0 / 0
19.04.2004, 13:07
    #32486261
ggv
ggv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
two-phase transaction MQSeries and DB2
Ok, thanks, got it, now rewriting it to embedded SQL, (but I believe it must work with CLI)
...
Рейтинг: 0 / 0
19.04.2004, 13:43
    #32486327
NewYear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
two-phase transaction MQSeries and DB2
from manual

If the CONNECT is for an application server on a dormant connection, it becomes the current connection.
Connecting to a dormant connection using CONNECT is only allowed if SQLRULES(DB2) was specified. If SQLRULES(STD) was specified, then the SET CONNECTION statement must be used instead.

то что в exaple это dormant connection, отсюда путаница. сделал IBM один и тот же statement, хотя для разных целей.

>but I believe it must work with CLI
ну, я не такой оптимист, что-то не помню, чтоб можно было писать на cli. а может просто я не помню.
...
Рейтинг: 0 / 0
19.04.2004, 14:38
    #32486440
ggv
ggv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
two-phase transaction MQSeries and DB2
yeah, thanks. I did not find anything about distributed transaction an CLI.
Seems I have to rewrite a huge legacy multithreaded application written on CLI for v7.1.
Now I'm rewriting a small part, just to get sure it works all together.
...
Рейтинг: 0 / 0
20.04.2004, 10:28
    #32487317
ggv
ggv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
two-phase transaction MQSeries and DB2
After rewriting to Embedded SQL and without explicit CONNECT as NewYear suggested two-phase transaction works perfectly.
But the next issue is in place:
/* pseudo-code */
EXEC SQL DECLARE...
while(1){
MQBEGIN
GET
EXEC SQL SET CONNECTION
EXEC SQL PREPARE
EXEC SQL .......
MQCMIT
}

PREPARE is in cycle.... as well as SET CONNECTION.

The single solution I see is :
if(first_loop_in_cycle){
EXEC SQL SET CONNECTION
EXEC SQL PREPARE
}

I thought I could insert MQSEND/MQRECEIVE into CLI code instead to rewrite everything to embedded SQL, but MQSEND/MQRECEIVE functions are based on AMI, it is restriction itself, and it is not so flexible.. Seems it is not an option. I have a message body a struct{} with many fields, and don't see yet how could I handle it with AMI.
Any AMI users?

But with 'context' usage (appeared in v8.1) I may rewrite CLI multithreaded to ESQL multithreaded.
...
Рейтинг: 0 / 0
20.04.2004, 11:10
    #32487391
NewYear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
two-phase transaction MQSeries and DB2
я ничего не помял что тебя смущает.
причем message body?
AMI - suxx, MQI forever.
...
Рейтинг: 0 / 0
21.04.2004, 11:05
    #32489156
ggv
ggv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
two-phase transaction MQSeries and DB2
AMI - suxx, MQI forever --- yes, but MQSEND/MQRECEIVE in DB2 uses AMI...

I thought to use MQSEND/MQSEREIVE, but seems I won't... Prefer to use MQI and control SQL transaction from it, than to use MQSEND/MQRECEIVE...


But I'm in doubt.

sqleBeginCtx()
MQBEGIN()
EXEC SQL SET CONNECTION

will we get here a connection under defined context ?

I think we will, usually we use
sqleBeginCtx()
EXEC SQL CONNECT

but MQBEGIN & SET CONNECTION replace CONNECT...

Because as I said it's a multithreaded program.
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / two-phase transaction MQSeries and DB2 / 19 сообщений из 19, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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