powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Множество телодвижений в транзакции && tempdb
11 сообщений из 11, страница 1 из 1
Множество телодвижений в транзакции && tempdb
    #36063187
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На пальцах это выглядит так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
begin transaction /*  на клиенте */
   result=spMain
   if result
     result&=update
if result
   commin
else
   rollback
В свою очередь в spMain делается выборка в #tmpTable, и потом курсором в цикле по ней дергаются еще две SP'шки. Сама по себе spMain отрабатывает без проблем. Но стоило только ее дернуть из приложения, как показано выше - внутри транзакции
DataDirect ADO Sybase Provider
ErrorCode: -2147217900
Native Error code: 2762
The 'CREATE TABLE' command is not allowed within a multi-statement transaction in the 'tempdb' database.

Лядно - дал allow DDL in tran для tempdb
DataDirect ADO Sybase Provider
ErrorCode: -2147217900
Native Error code: 277
There was a transaction active when exiting the stored procedure 'spMain'. The temporary table '#tmpTable' was dropped in this transaction either explicitly or implicitly. This transaction has been aborted to prevent database corruption.
Native Error code: 266
Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRAN is missing. Previous count = 1, Current count = 0.
Native Error code: 3624
Truncation error occurred.
Native Error code: 3621
Command has been aborted.

Ну и как по-людськи разрулить сие?

P.S. select @@version
Adaptive Server Enterprise/15.0.2/EBF 14332/P/NT (IX86)/Windows 2000/ase1502/2486/32-bit/OPT/Thu May 24 04:10:36 2007

_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Множество телодвижений в транзакции && tempdb
    #36063452
0rc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft,
а на tempdb стоит флаг "ddl in tran" ?
ЗЫЖ тапками типа "так делать нехорошо" не кидать :)
...
Рейтинг: 0 / 0
Множество телодвижений в транзакции && tempdb
    #36063732
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
0rc
а на tempdb стоит флаг "ddl in tran" ?

Ex_Soft
дал allow DDL in tran для tempdb

0rc
"так делать нехорошо"

почему?
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Множество телодвижений в транзакции && tempdb
    #36063828
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
0rc
"так делать нехорошо"

Ex_Soft
почему?


....Эти команды блокируют системные таблицы, такие как sysobjects . Поэтому транзакции, в которых есть эти команды, нужно делать короткими.
В частности, следует избегать использования этих команд в транзакциях, работающих с временной базой данных tempdb , чтобы система полностью не остановилась. Поэтому опция ddl in tran всегда должна быть в состоянии false в базе данных tempdb .

_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Множество телодвижений в транзакции && tempdb
    #36063841
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и как теперь выкрутиться?
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Множество телодвижений в транзакции && tempdb
    #36063946
Компостеров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_soft, мы у себя в PowerBuilder-приложениях выкручиваемся сл.образом:

<метод beforeretrieve () >
SQLCA.AutoCommit=True
....
<retrieve>

<метод afterretrieve ()>
SQLCA.AutoCommit=False
...
Рейтинг: 0 / 0
Множество телодвижений в транзакции && tempdb
    #36064412
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft
Ну и как теперь выкрутиться?
_________________
"Helo, word!" - 17 errors 56 warnings

создавать временные объекты перед вызовом, а не в самих процедурах
...
Рейтинг: 0 / 0
Множество телодвижений в транзакции && tempdb
    #36065244
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
komrad
создавать временные объекты перед вызовом, а не в самих процедурах

Гм... Как бы хотелось, чтобы все носило целостный характер, а не "...здесь играем, а здесь рыбу заворачивали..." Других таблеток - нЭт?
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Множество телодвижений в транзакции && tempdb
    #36067923
blzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если позволяет место - можно посмотреть на отдельнаю user created tempdb,
create temporary database my_tempdb on ...
sp_tempdb 'bind'...
...
Рейтинг: 0 / 0
Множество телодвижений в транзакции && tempdb
    #36073325
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ex_Soft wrote:

> В свою очередь в spMain делается выборка в #tmpTable, и потом курсором в
> цикле по ней дергаются еще две SP'шки. Сама по себе spMain отрабатывает
> без проблем. Но стоило только ее дернуть из приложения, как показано
> выше - внутри транзакции

> There was a transaction active when exiting the stored procedure
> 'spMain'. The temporary table '#tmpTable' was dropped in this
> transaction either explicitly or implicitly. This transaction has been
> aborted to prevent database corruption.

> Native Error code: 266
> Transaction count after EXECUTE indicates that a COMMIT or ROLLBACK TRAN
> is missing. Previous count = 1, Current count = 0.
> Native Error code: 3624
> Truncation error occurred.
> Native Error code: 3621
> Command has been aborted.
>
>
> Ну и как по-людськи разрулить сие?

Это ты нарушаеш старое негласное правило работы в процедурах под транзакцией
с временными таблицами. Негласное -- потому что оно нигде не написано.

Звучит так:

[fix]
Если процедура создаёт временную таблицу внутри многооператорной транзакции,
то она должна сама реально начинать эту транзакцию, т.е. содержать оператор
BEGIN TRANSACTION
который приводит к изменению @@trancount из значения 0 в значение 1.
[/fix]

Следствие из этого такое:
[fix]
Если у вас есть процедура, использующая временную таблицу, созданную внутри
многооператорной транзакции, её НЕЛЬЗЯ вызывать из охватывающих её транзакций.
[/fix]

Выходов из ситуации много, главная идея -- не использовать временные таблицы
(использовать псевдовременные или постоянные, в главной БД или в tempdb)
или не создавать их в этой процедуре, а создавать в главной вызывающей.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Множество телодвижений в транзакции && tempdb
    #36073336
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да уже разрулил путем, таки, рихтовки клиента с упаковыванием всего-всего в SP, в коей явно и стартуется транзакция...
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Множество телодвижений в транзакции && tempdb
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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