2009-07-21 2 views
1

Я использую SQL 2000 для своего приложения. Мое приложение использует N таблиц. Мое приложение имеет оболочку для SQL-сервера, называемого сервером базы данных. Он работает как служба окон 24/7.Блокировка таблицы базы данных

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

Просьба указать ваше предложение, как решить эту проблему.

+0

Это постоянная проблема, или это разовая блокировка, которая никогда не была выпущена? На шаге обслуживания CHECK INTEGRITY блокируется база данных исключительно, что может вызвать проблемы с конкуренцией. Если у вас есть SQL Server Enterprise, он может выполнять такие операции, оставаясь в сети, но Standard не так хорош в обмене. – SqlRyan

ответ

1

Что делать, если у вас есть тайм-аут команды на стороне клиента? А блокировки - это ваши собственные блокировки в результате DBCC?

Ваш код истечет, ожидая завершения DBCC, но все блокировки, которые уже выпущены, не откатны.

Тайм-аут команды указывает SQL Server просто прекратить обработку. Чтобы освободить блокировки, вам нужно либо ROLLACK в соединении, либо закрыть соединение.

Варианты:

  • Использование SET XACT_ABORT в SQL: Do I really need to use “SET XACT_ABORT ON”? (SO)
  • При ошибке клиента, попытаться откатить себя (буквально IF @@TRANCOUNT > 0 ROLLBACK TRAN)
Смежные вопросы