Вопрос базы данных - Транзакции - PullRequest
0 голосов
/ 27 мая 2011

Что означает, что база данных находится в несогласованном состоянии?

Я знаю, что это относительно транзакций, но не совсем уверена, что это значит?

Ответы [ 4 ]

2 голосов
/ 27 мая 2011

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

0 голосов
/ 27 мая 2011

Типовая ситуация возникает в транзакционной среде с параллельными процессами и объясняется следующим образом:

  • данные запроса процесса 1 из таблицы A
  • данные запроса процесса 2 из таблицы A
  • процесс 1 обновляет данные в таблице A
  • процесс 2 использует необновленные данные в таблице A для своей разработки

Это приводит к несогласованности в результате процесса 2.

Например, процесс 2 может попытаться обновить данные в таблице A: поэтому обновление, выполненное процессом 1. потеряно.

Типичным решением этой проблемы является введение блокировки в таблице A на первом шаге, пока не завершится процесс 1 (либо с COMMIT, либо с ROLLBACK), так что другой процесс не сможет использовать этот ресурс, пока не будет снята блокировка.

0 голосов
/ 27 мая 2011

Допустим, у вас есть банковское приложение, и вы не используете транзакции. Вы намереваетесь перевести деньги с одного счета на другой, и сначала вы делаете что-то вроде update balance set value = value + $20 where account = account2, а затем update balance set value = value - $20 where account = account1. Теперь предположим, что между этими запросами происходит что-то плохое (сбой сервера, сбой при отправке запроса, или даже другой клиент получает запросы посередине и все портит) ... ваша база данных имеет проблемы.

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

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

0 голосов
/ 27 мая 2011

В целом это может означать несколько вещей: поврежденный файл базы данных (что часто случается в Access), или что транзакции все еще находятся в процессе или не завершены, или файл, связанный с базой данных, находится в открытом состоянии.Как только «работа» завершится, статус должен вернуться в «непротиворечивый».

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