Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вешается ли блокировка на sys.objects при удалении таблицы в транзакции?  [new]
indeec.e
Member

Откуда:
Сообщений: 4
Вешается ли блокировка на sys.objects при удалении таблицы в транзакции? Если вешается, то хотелось бы узнать на какое время блокируется sys.objects, на все время транзакции или только на время удаления таблицы?

Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (X64) Apr 2 2010 15:48:46 Copyright (c) Microsoft Corporation Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7600: )
7 дек 11, 10:28    [11719169]     Ответить | Цитировать Сообщить модератору
 Re: Вешается ли блокировка на sys.objects при удалении таблицы в транзакции?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
1. многие (все?) системные объекты (sys.objects) - виртуальны
2. Вешается на время всей транзакции. Изменения можно и откатить
3. А для чего вам?
7 дек 11, 12:22    [11720182]     Ответить | Цитировать Сообщить модератору
 Re: Вешается ли блокировка на sys.objects при удалении таблицы в транзакции?  [new]
indeec.e
Member

Откуда:
Сообщений: 4
Mnior
1. многие (все?) системные объекты (sys.objects) - виртуальны
2. Вешается на время всей транзакции. Изменения можно и откатить
3. А для чего вам?


Просто в рамках этой транзакции выполняются другие запросы, которые могут быть продолжительными. Вот думаю выносить удаление/создание этой таблицы за транзакцию или можно оставить в транзакции. Если оставлять, то до окончания транзакции, sys.objects заблокируется и другие пользователи не смогут создать/удалить временные таблицы.
7 дек 11, 12:59    [11720517]     Ответить | Цитировать Сообщить модератору
 Re: Вешается ли блокировка на sys.objects при удалении таблицы в транзакции?  [new]
Glory
Member

Откуда:
Сообщений: 104751
indeec.e
sys.objects заблокируется и другие пользователи не смогут создать/удалить временные таблицы.

а с чего вы решили, что другие не смогут создать/удалить временные таблицы ?
7 дек 11, 13:01    [11720546]     Ответить | Цитировать Сообщить модератору
 Re: Вешается ли блокировка на sys.objects при удалении таблицы в транзакции?  [new]
indeec.e
Member

Откуда:
Сообщений: 4
Glory
indeec.e
sys.objects заблокируется и другие пользователи не смогут создать/удалить временные таблицы.

а с чего вы решили, что другие не смогут создать/удалить временные таблицы ?


Если sys.objects блокируется, то другие пользователя во время этой блокировки не смогут ничего создать в sys.objects (при создании/удалении новой таблицы, данные попадают в sys.objects, а она заблокирована). Или я не прав? Поправьте, пожалуйста, если ошибаюсь.
7 дек 11, 13:16    [11720736]     Ответить | Цитировать Сообщить модератору
 Re: Вешается ли блокировка на sys.objects при удалении таблицы в транзакции?  [new]
Glory
Member

Откуда:
Сообщений: 104751
indeec.e
Если sys.objects блокируется, то другие пользователя во время этой блокировки не смогут ничего создать в sys.objects

Блокировки бывают разные
Если я заблокировал одну запись по индексному ключу, то как это мешает другим то добавлять/удалять другие записи ?
7 дек 11, 13:20    [11720794]     Ответить | Цитировать Сообщить модератору
 Re: Вешается ли блокировка на sys.objects при удалении таблицы в транзакции?  [new]
indeec.e
Member

Откуда:
Сообщений: 4
Glory
Блокировки бывают разные

Почитал про уровни блокировок. Да, тут видимо все будет зависеть от того, уровня блокировки, который выберет SQL Server или который назначу я. При удалении таблицы, я так полагаю, скорее всего будет блокировка на уровне EXP/PAG/KEY. Я прав?
7 дек 11, 13:31    [11720949]     Ответить | Цитировать Сообщить модератору
 Re: Вешается ли блокировка на sys.objects при удалении таблицы в транзакции?  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
indeec.e
на уровне EXP/PAG/KEY
1. sys.objects тут совсем не причём, это блокировка уровня схемы, а не системной таблы. Всё в ней виртуально, даже блокировки
2. Не всегда. Блокировка может затронуть зависимые объекты (по FK и т.п.)
3. Временные таблицы создаются в tempdb. У tempdb немного другая стратегия блокирования (минимальная). Тут беспокоиться не о чем. Только сеcсиионные временные таблы (##) имеют такие особенности

Вот если вы непосредственно будете делать запросы из sys.objects, тогда да. Но ядро системы не обращаются к ним непосредственно. Повторяю - они виртуальны.
7 дек 11, 19:14    [11724607]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить