Надеюсь, найдутся люди, имеющие опыт работы с DTS в MS SQL 2000, которые подскажут ответ на вопрос. Имеется DTS пакет, запускающий хранимую процедуру на удаленном сервере. Процедура довольно сложная, имеет в своем тексте два BEGIN TRANSACTION и соответственно два COMMIT. Меня смущает галочка "Use transactions" в свойствах DTS пакета, не могу понять как она будет работать в случае, если внутри процедуры, вызываемой в пакете, явно прописаны начало и конец транзакции. Грубо говоря, если я оставлю эту галку включенной, DTS начнет транзакцию перед выполнением пакета, и мои транзакции в процедуре окажутся вложенными (что, насколько я понимаю, не очень хорошо), так? Как лучше поступить, оставить галку или снять?
Здравствуйте, alexm1202, Вы писали:
A>Добрый день. A>Надеюсь, найдутся люди, имеющие опыт работы с DTS в MS SQL 2000, которые подскажут ответ на вопрос. Имеется DTS пакет, запускающий хранимую процедуру на удаленном сервере. Процедура довольно сложная, имеет в своем тексте два BEGIN TRANSACTION и соответственно два COMMIT. Меня смущает галочка "Use transactions" в свойствах DTS пакета, не могу понять как она будет работать в случае, если внутри процедуры, вызываемой в пакете, явно прописаны начало и конец транзакции. Грубо говоря, если я оставлю эту галку включенной, DTS начнет транзакцию перед выполнением пакета, и мои транзакции в процедуре окажутся вложенными (что, насколько я понимаю, не очень хорошо), так? Как лучше поступить, оставить галку или снять?
Лучше или правильнее ?
в том то и дело — есть в DTS пакете транзактивные действия, которые ты бы хотел увязать с той транзакцией или нет ?
Если есть, то необходима галочка иначе нет.
Здравствуйте, terma, Вы писали:
T>Лучше нажать справку и увидеть: T>Use transactions T>Allow the definition and use of transactional units of work in the package.
Я это читал, конечно. Меня интересовало, будут ли в моем случае побочные эффекты — когда в пакете всего один юнит, этот юнит — вызов SP, в которой такой код:
BEGIN TRANSACTION
...
COMMIT
...
BEGIN TRANSACTION
...
COMMIT
Попробовал со снятой галкой, вроде работает как надо.
Здравствуйте, alexm1202, Вы писали:
A>Извини, с какой "той" транзакцией?
'хранимую процедуру на удаленном сервере. Процедура довольно сложная, имеет в своем тексте два BEGIN TRANSACTION и соответственно два COMMIT'
с транзакциями хранимой процедуры ...
TRANSACTION_DTS
...
BEGIN TRANSACTION_SQL1
COMMIT TRANSACTION_SQL1
BEGIN TRANSACTION_SQL2
COMMIT TRANSACTION_SQL2
...
COMMIT TRANSACTION_DTS
Вот сделай без галочки так, чтоб первая твоя нормально завершилась а вторая нет
BEGIN TRANSACTION_SQL1
COMMIT TRANSACTION_SQL1
BEGIN TRANSACTION_SQL2
ROLLBACK TRANSACTION_SQL2
и потом с галочкой, — отменит галочка первый COMMIT ?
Здравствуйте, KGP, Вы писали:
KGP>Вот сделай без галочки так, чтоб первая твоя нормально завершилась а вторая нет KGP>BEGIN TRANSACTION_SQL1 KGP>COMMIT TRANSACTION_SQL1
KGP>BEGIN TRANSACTION_SQL2 KGP>ROLLBACK TRANSACTION_SQL2 KGP>и потом с галочкой, — отменит галочка первый COMMIT ?
Честно говоря, проверять сейчас нет времени, но я думаю, что если галочка "Use transactions" будет стоять и во время выполнения пакета произойдет сбой, вне зависимости где — в первом блоке или во втором, то будут откачены все изменения — и сделаные в первом блоке и во втором. Я прав?
Здравствуйте, alexm1202, Вы писали:
A>Здравствуйте, KGP, Вы писали:
KGP>>Вот сделай без галочки так, чтоб первая твоя нормально завершилась а вторая нет KGP>>BEGIN TRANSACTION_SQL1 KGP>>COMMIT TRANSACTION_SQL1
KGP>>BEGIN TRANSACTION_SQL2 KGP>>ROLLBACK TRANSACTION_SQL2 KGP>>и потом с галочкой, — отменит галочка первый COMMIT ?
A>Честно говоря, проверять сейчас нет времени, но я думаю, что если галочка "Use transactions" будет стоять и во время выполнения пакета произойдет сбой, вне зависимости где — в первом блоке или во втором, то будут откачены все изменения — и сделаные в первом блоке и во втором. Я прав?
сам не проверял, но другого смысла я не наблюдаю, а по сути хез