TransactionTimeout с Oracle 11g - PullRequest
1 голос
/ 18 мая 2009

Использование базы данных Oracle 11g. У меня есть сервис с тегом:

[ServiceBehavior (InstanceContextMode = InstanceContextMode.PerCall, TransactionTimeout = "00:00:10")]

Сам метод выглядит так:

    [OperationBehavior(TransactionScopeRequired = true)]
    [TransactionFlow(TransactionFlowOption.NotAllowed)]
    public OrderMessage AddOrder(OrderMessage orderMessage)
    {
        ValidateMessage(orderMessage);
        return this.orderBusiness.Add(orderMessage);
    }

Если я установлю точку останова в методе orderBusiness.Add и подожду 10 секунд, время транзакции истечет. Если я уберу точку останова, но затем заблокирую таблицу, участвующую в транзакции, она будет ждать намного дольше 10 секунд, по крайней мере, до истечения времени ожидания службы в 60 секунд. Любые идеи, как получить транзакцию для тайм-аута через указанный интервал, если таблица заблокирована?

Ответы [ 2 ]

0 голосов
/ 19 мая 2009

Вот что я должен был сделать в этом случае. Я обнаружил, что время ожидания транзакции не имело никакого эффекта, потому что я ждал блокировки для транзакции. Хотя я этого не знал, потому что для моей распределенной_переменной установлено значение 60 секунд по умолчанию, а служба до этого истекала. Так как я не мог изменить в распределенном времени ожидания, я увеличил время ожидания службы, а затем начал видеть:

InnerException: Oracle.DataAccess.Client.OracleException
Message="ORA-02049: timeout: distributed transaction waiting for lock"

Итак, в общем, время ожидания транзакции сработало, когда у меня была точка останова, потому что оно заботится о том, сколько времени фактически требуется для выполнения транзакции. Это не имело никакого эффекта, когда таблица была заблокирована, потому что она не начала выполняться. Я должен использовать попытку, чтобы убедиться, что ресурс не заблокирован перед началом моей транзакционной работы.

0 голосов
/ 19 мая 2009

Вы можете использовать вставку с NOWAIT, чтобы немедленно вернуть вам управление, если оно заблокировано, и обработать его в своем коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...