Конференция "Базы" » Открытие/закрытие транзакции
 
  • мини-кодер (03.09.08 17:42) [0]
    БД Oracle, компоненты доступа DOA
    Как с помощью TOracleSession открыть и закрыть транзакцию?
    Нашел флаг InTransaction, но он только для чтения.
  • Johnmen © (03.09.08 17:45) [1]
    Искать дальше...
  • мини-кодер (03.09.08 17:46) [2]
    SavePoint/ RollbacktoSavePoint?
  • Johnmen © (03.09.08 17:46) [3]
    Английский знаешь?
  • мини-кодер (03.09.08 17:49) [4]
    Точка сохранения/Откатить к точке сохранения?
  • Johnmen © (03.09.08 17:51) [5]
    Ага
  • мини-кодер (03.09.08 17:59) [6]
    так [2] - это то, что мне нужно?
    Насколько я понимаю, транзакция открывается автоматически, если не открыта до этого и продолжает быть открытой, пока не произойдет комит или ролбек?
    Поправьте, плиз, потому как немного плаваю в этих вопросах
  • Медвежонок Пятачок © (03.09.08 18:01) [7]
    Насколько я понимаю, транзакция открывается автоматически, если не открыта до этого и продолжает быть открытой, пока не произойдет комит или ролбек?

    неа
  • мини-кодер (03.09.08 18:03) [8]
    тогда как?
  • Palladin © (03.09.08 18:20) [9]
    BeginTransaction или что то на подобие (Open, Start, bEgin, нАчать) существует?
  • мини-кодер (03.09.08 18:24) [10]
    нет
  • Palladin © (03.09.08 18:33) [11]
    значит ищи подобные методы в других компонентах TOracleXXX18+
  • Медвежонок Пятачок © (03.09.08 18:37) [12]
    тогда как?

    Если неявно начата, то сразу после выполнения обращения с клиента так же неявно коммитится
  • мини-кодер (03.09.08 18:50) [13]

    > значит ищи подобные методы в других компонентах TOracleXXX18+

    ни в TOracleDataset, ни в TOracleQuery нет никаких особых методов открытия закрытия транзакции. Разве что можно указать CommitOnPost, для датасета.
    То есть поведение транзации(тип транзакции, уровень изоляции) определяется в контексте транзакции.

    > Если неявно начата, то сразу после выполнения обращения с
    > клиента так же неявно коммитится

    Вопрос на засыпку: а как явно начать транзакцию? SavePoint?
  • мини-кодер (03.09.08 18:51) [14]

    > определяется в контексте транзакции.

    сорри, определяется в контексте сессии
  • Медвежонок Пятачок © (03.09.08 18:53) [15]
    Нашел флаг InTransaction, но он только для чтения.

    не могет такого быть, чтобы не было методов старта/коммита/роллбака
  • Petr V. Abramov © (03.09.08 23:38) [16]

    > Медвежонок Пятачок ©   (03.09.08 18:01) [7]

    да


    > мини-кодер   (03.09.08 17:42)  

    насколько я помню, commit и rollback для завершения, для старта ниче не надо, оно не BDE
  • Медвежонок Пятачок © (04.09.08 09:01) [17]
    > Медвежонок Пятачок ©   (03.09.08 18:01) [7]

    да


    Не да, а нет.
    Если транзакциями явно не управляют, то каждый SomeQuery.ExecSQL стартует и коммитит транзакцию.
    Она, неявно начавшись, не продолжается пока не будет вызван явный коммит/роллбак.
  • Sergey13 © (04.09.08 09:05) [18]
    > [0] мини-кодер   (03.09.08 17:42)

    В Оракле транзакция стартует со стартом сессии. Ее можно подтверждать или откатывать, после чего сразу как бы стартует новая. Для более сложного руления существуют точки отката (это то про что у тебя в [3]). Неявное завершение транзакции вызывает любой DDL запрос и завершение сессии.
    Т.е. работа должна строиться так - после каждого законченного действия по модификации БД делай подтверждение. Хотя теоретически можно подтвердить/откатить и всю сессию, но лучше этого не делать. 8-)
  • Johnmen © (04.09.08 09:07) [19]

    > Медвежонок Пятачок ©   (04.09.08 09:01) [17]

    Это что, так DOA устроен?
  • Медвежонок Пятачок © (04.09.08 09:30) [20]
    Это что, так DOA устроен?

    не только он
  • Игорь Шевченко © (04.09.08 09:43) [21]
    В оракле нет оператора "начать транзакцию". Транзакция неявно начинается с первого оператора, изменяющего данные и завершается операторами COMMIT или ROLLBACK.
  • Медвежонок Пятачок © (04.09.08 09:46) [22]
    В оракле нет

    Можно и так сказать. Если отвлечься от специфики вопроса.
  • Игорь Шевченко © (04.09.08 09:50) [23]

    > Если отвлечься от специфики вопроса.


    если принимать во внимание специфику вопроса, то у автора надо спросить - а нафига ему это ?
  • Johnmen © (04.09.08 09:56) [24]

    > не только он

    Кто ещё?
  • Медвежонок Пятачок © (04.09.08 10:11) [25]
    Кто ещё?

    bde,ado,odak .,......
  • Johnmen © (04.09.08 10:44) [26]

    > bde,ado,odak .,......

    Ну с бде ты погорячился.
  • Медвежонок Пятачок © (04.09.08 10:47) [27]
    в чем именно?
  • Медвежонок Пятачок © (04.09.08 10:48) [28]
    Берем бде, транзакциями не управляем.
    выполняем подряд три вызова экзекsql.
    будут последовательно стартованы три транзации.
    а не одна
  • Johnmen © (04.09.08 13:39) [29]

    > в чем именно?

    в [17]

    > будут последовательно стартованы три транзации.а не одна

    Где про это можно почитать?
  • evvcom © (05.09.08 08:53) [30]

    > Медвежонок Пятачок ©   (04.09.08 09:01) [17]
    >
    > > Медвежонок Пятачок ©   (03.09.08 18:01) [7]
    >
    > да
    >
    > Не да, а нет.
    > Если транзакциями явно не управляют, то каждый SomeQuery.
    > ExecSQL стартует и коммитит транзакцию.
    > Она, неявно начавшись, не продолжается пока не будет вызван
    > явный коммит/роллбак.


    Ты не прав.


    > Медвежонок Пятачок ©   (04.09.08 10:11) [25]
    >
    > Кто ещё?
    >
    > bde,ado,odak .,......
    >

    И с ODAC (заметь не odak) ты тоже погорячился
  • evvcom © (05.09.08 10:23) [31]
    Есть минутка, поясню про ODAC. В TOraSession и TOraDataSet есть проперть AutoCommit со значением по дефолту True. В этом случае компонент действительно ведет себя как ты описываешь, вот только поведение конкретной реализации какого-то компонента еще не говорит о том, что точно так же ведет себя и сервер. Где-то в недрах своего кода компонент ЯВНО вызывает Commit после любого изменения. А ты поставь AutoCommit в False и будешь разочарован в своей былой уверенности.
  • Petr V. Abramov © (05.09.08 12:04) [32]

    > evvcom ©   (05.09.08 10:23) [31]

    и в BDE по-моему какие-то похожие проперти были
  • evvcom © (05.09.08 12:16) [33]
    там CachedUpdates, в одаке такая проперть тоже есть, но это не коммит серверный. У БДЕ скорее всего какой-нить DbiCommit (такой вроде префикс там?) внутрях вызывается независимо от желания пользователя.
  • Игорь Шевченко © (05.09.08 12:39) [34]

    > У БДЕ скорее всего какой-нить DbiCommit (такой вроде префикс
    > там?) внутрях вызывается независимо от желания пользователя.
    >


    зависимо от желания. Это желание прописывается в настройках алиаса
 
Конференция "Базы" » Открытие/закрытие транзакции
Есть новые Нет новых   [134473   +28][b:0][p:0.001]