|
ASA: autocommit при вызове прокси процедуры
|
|||
---|---|---|---|
#18+
Ситуация следующая: сервер SQL Anywhere x64 12.0.1.3457, установленный на Windows 2008 x64. При вызове из ASA прокси процедуры, смотрящей на Oracle, происходит неявный commit на стороне Oracle. Аналогичная ситуация при вызове прокси процедуры, которая смотрит на ASE 15.5: неявный commit на строне ASE. Если кто сталкивался, подскажите, пожалуйста: можно ли как-нибудь на SQL Anywhere отключить AUTOCOMMIT при вызове прокси процедур? Возможно, данное поведение регулируется настройкой сервера... Или это особенность работы сервера ASA с Remote Серверами? На стороне ASA создана прокси процедура: Код: plaintext 1.
На стороне Oracle создана таблица и процедура, которая в эту таблицу пишет: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Вызов на стороне ASA осуществляется следующим образом: Код: plaintext 1. 2. 3.
После вызова видим новую строку в таблице t_remote_proc: Код: plaintext 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.10.2011, 22:26 |
|
ASA: autocommit при вызове прокси процедуры
|
|||
---|---|---|---|
#18+
iiv77 Код: plaintext 1.
Смотри на строку коннекта к удаленой базе. Как oracle_odbc объявлен? Где-то там оно и включено. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2011, 01:35 |
|
ASA: autocommit при вызове прокси процедуры
|
|||
---|---|---|---|
#18+
На ASA Remote Server oracle_odbc объявлен так: Код: plaintext 1.
iAnywhere Solutions 12 - Oracle - этот драйвер поставился вместе с ASA; Oracle in OraClient11g_home1 - это родной драйвер Oracle. Результат одинаковый. При этом, если создать на ASA прокси таблицу на t_remote_call_param и изменять данные напрямую, то все проходит ожидаемо: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Проверил на ASA x64 9.0.2.3951, ASA x64 10.0.1.4239, ASA x64 11.0.1.2680 и ASA x64 12.0.1.3457. Это все доступные мне версии ASA x64 с последними EBF'ами. На всех версиях серверов после вызова прокси процедуры вызывается комит на стороне удаленного сервера. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2011, 12:27 |
|
ASA: autocommit при вызове прокси процедуры
|
|||
---|---|---|---|
#18+
ASA выполняет коммит только, если опция chained установленна 'Off'. В ODBC по умолчанию включен AUTOCOMMIT. Вот что в материалах Оракла: Autocommit is enabled by default as defined by the Microsoft ODBC specification. With Autocommit, a transaction is committed as soon as it is executed. While this increases user concurrency in some databases, it does not allow the programmer to control when a transaction is committed nor does it allow a transaction to be rolled back. To disable Autocommit, call SQLSetConnectOption with the SQL_AUTOCOMMIT_OFF qualifier. Взято отсюда: http://apex.oracle.com/pls/otn/f?p=100:11:0::NO::P11_QUESTION_ID:314816776423 Выхода вижу 3: Попробовать отключить автокоммит в ODBC Не пользоваться процедурами Написать процедуры на АСА, используя в них remote таблицы ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2011, 15:54 |
|
ASA: autocommit при вызове прокси процедуры
|
|||
---|---|---|---|
#18+
авторПопробовать отключить автокоммит в ODBC Не пользоваться процедурами Написать процедуры на АСА, используя в них remote таблицы К сожалению, эти варианты не реализуемы: Пробовал использовать ODBC драйвер от DataDirect, у которого есть опция "Отключить Autocommit" - не помогло. Думаю, что дело не в ODBC: если подключиться SQL консолью непосредственно к ODBC источнику oracle_odbc_x64 (указан в качестве источника данных при создании Remote Server'а на ASA), то неявный commit не происходит. На стороне Oracle многомиллионные таблицы и сложная логика обработки: переписать на ASA не представляется возможным. Предлагаю зайти с другой стороны: у кого-нибудь есть возможность проверить на схожей конфигурации? Если ошибка только на моей конфигурации - буду как-то искать что именно приводит к commit'у. А если такая работа с прокси таблицами - штатная для сервера SQL Anywhere (например, описанная в документации), то решение будет совсем другое. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2011, 18:48 |
|
ASA: autocommit при вызове прокси процедуры
|
|||
---|---|---|---|
#18+
попробуйте еще задать вопрос на http://sqlanywhere-forum.sybase.com/ ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2011, 19:49 |
|
ASA: autocommit при вызове прокси процедуры
|
|||
---|---|---|---|
#18+
iiv77А если такая работа с прокси таблицами - штатная для сервера SQL Anywhere (например, описанная в документации), то решение будет совсем другое.Нет, в документации написано обратное: http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.sqlanywhere.12.0.0/dbusage/rpc-omni-using.html Using remote procedure calls (RPCs) SQL Anywhere users can issue procedure calls to remote servers that support the feature. This functionality is supported by SQL Anywhere, Adaptive Server Enterprise, Oracle, and IBM DB2. Issuing a remote procedure call is similar to using a local procedure call. SQL Anywhere supports fetching result sets from remote procedures, including fetching multiple result sets. As well, remote functions can be used to fetch return values from remote procedures and functions. Remote procedures can be used in the FROM clause of a SELECT statement. А кстати, ты уверен что внутри самой процедуры (которая на Оракле) нету commit? По хорошему, его быть не должно, но ты уверен что его действительно нет? Сделай на Oracle тестовую микропроцедурку на тестовой микро-табличке. Убедись что она нормально откатывает если запускается из самого Оракла. Потом сделай прокси-процедуру на нее в SA и попробуй позапускать уже из SA. Будет делать autocommit или она нормально отработает rollback? Если увидишь autocommit - значит явный баг о котором надо сообщать разработчикам. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2011, 20:07 |
|
ASA: autocommit при вызове прокси процедуры
|
|||
---|---|---|---|
#18+
Ggg_old... Спасибо за ссылку. Попробую спросить там... White Owl...А кстати, ты уверен что внутри самой процедуры (которая на Оракле) нету commit... Да, уверен. Текст тестовых процедуры и таблицы, на которых проверял, приведены в моем первом сообщении: (см. t_remote_proc ( param varchar2 )) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.10.2011, 20:55 |
|
|
start [/forum/topic.php?fid=55&msg=37503443&tid=2010221]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
152ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 246ms |
total: | 491ms |
0 / 0 |