Можно ли совершить транзакцию, которая будет разрешать запросы ReadOnly? - PullRequest
0 голосов
/ 21 июня 2011

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

У меня транзакция обернута вокруг всего этого, поэтому, если что-то пойдет не так, я откатюсь.

Можно ли выполнить эту транзакцию, чтобы она блокировала только запросы, которые записывают в базу данных, а не только для чтения? Если нет, то почему? Это просто естественное ограничение базы данных?

Я нахожусь в .net 4.0 и использую TransactionScope для этой задачи.

Ответы [ 2 ]

1 голос
/ 21 июня 2011

Не делай этого. Загрузите в промежуточный стол. После завершения операции массово перенесите ее в фактическую таблицу.

0 голосов
/ 21 июня 2011

Как правило, что-то подобное не будет успешным вообще; большинство менеджеров ресурсов по умолчанию не позволяют транзакции продолжаться так долго, и если они это сделали (и если задействовано несколько менеджеров ресурсов), то в зависимости от объема данных, которые обновляются / модифицируются, акт совершения транзакции может занять очень долгое время.

Если вы просто хотите заблокировать доступ к базе данных во время вашего процесса, вам лучше установить флаг в базе данных, а затем, если другие функции в вашем приложении не будут работать, если этот флаг установлен.

Область вашего приложения может повлиять на то, где хранится флаг; если у вас работает только один экземпляр, вы можете сохранить флаг в памяти, но если имеется несколько экземпляров, вам, вероятно, придется каждый раз проверять базу данных.

...