Size: a a a

2020 May 14

MC

Max Chistyakov in sql_ninja
Как тогда сделать альтер? Если я нажму на альтер, а потом в курсоре сделаю kill к session_id, которые блокируют нужный мне объект в sys_exec_tran_lock, должно помочь?
источник

DI

Dmitriy Ivanov in sql_ninja
Max Chistyakov
Как тогда сделать альтер? Если я нажму на альтер, а потом в курсоре сделаю kill к session_id, которые блокируют нужный мне объект в sys_exec_tran_lock, должно помочь?
Вот тут очень хорошо  описано данное поведение
https://aboutsqlserver.com/2012/04/05/locking-in-microsoft-sql-server-part-13-schema-locks/
источник

DI

Dmitriy Ivanov in sql_ninja
Max Chistyakov
Как тогда сделать альтер? Если я нажму на альтер, а потом в курсоре сделаю kill к session_id, которые блокируют нужный мне объект в sys_exec_tran_lock, должно помочь?
вам нужно заблокировать объект в сессии с эксклюзивной блокировкой и в этой же транзакции попытаться сделать alter
источник

DI

Dmitriy Ivanov in sql_ninja
А вот про конвертацию в sub-latch,  если интересно
https://docs.microsoft.com/ru-ru/archive/blogs/psssql/hot-it-works-sql-server-superlatching-sub-latches
источник

MC

Max Chistyakov in sql_ninja
Dmitriy Ivanov
вам нужно заблокировать объект в сессии с эксклюзивной блокировкой и в этой же транзакции попытаться сделать alter
правильно ли я понимаю, что наложить блокировку для последующего альтера делается так? https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-getapplock-transact-sql?view=sql-server-ver15

Не оч догоняю, как наложить эксклюзивную блокировку на функцию
источник

K

Kostya in sql_ninja
Max Chistyakov
правильно ли я понимаю, что наложить блокировку для последующего альтера делается так? https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-getapplock-transact-sql?view=sql-server-ver15

Не оч догоняю, как наложить эксклюзивную блокировку на функцию
да, но суть наложения блокирвоки никуда не денется :)))
источник

K

Kostya in sql_ninja
и условия то же
источник

MC

Max Chistyakov in sql_ninja
Я её запустил в isolation level serializable, но это не то, похоже
источник

K

Kostya in sql_ninja
Max Chistyakov
Я её запустил в isolation level serializable, но это не то, похоже
Это блокировка изменения строки
источник

K

Kostya in sql_ninja
если сильно упрощенно
источник

K

Kostya in sql_ninja
остальные сессии ждут комитта или ролбака/аборта твоей
источник

DI

Dmitriy Ivanov in sql_ninja
Если вы внимательно прочли часть из книжки Димы Короткевича, то в самом конце написано:
If we think about SCH-M locks, they are acquired on the object level – deadlock possibilities are endless. And unfortunately, that’s extremely annoying when you’re dealing with operations related to table partitioning. Well, there is no easy way to solve that problem – good error handling could help though. I will show some examples shortly.
То есть переводя на русский, это может быть оооооочень  долго
источник

MC

Max Chistyakov in sql_ninja
У меня оно в самом деле ооочень долго - больше десяти минут висел в альтере, потом начальник ругнулся, отключил
источник

MC

Max Chistyakov in sql_ninja
ругнулся, то что очереди накапливались :))
источник

DI

Dmitriy Ivanov in sql_ninja
тогда посоветуйте ему чтобы отключил все приложения которые вызывают данную функцию, сделайте альтер спокойно
источник

MC

Max Chistyakov in sql_ninja
а если возвращаться к sp_getapplock, то вот я подставляю в него название функции, указываю юзера в роли db_owner, mode указываю exclusive. В другом запросе, параллельно, селект к dm_tran_locks и вижу, что да, название функции пояилось в resource_description, type - application, request_mode = X (LOCK) , request_status=  GRANT. Но, при этом, я другим пользователем могу эту функцию селектить, получать результат. Не понимаю, почему так, если есть запись в dm_tran_locks
источник

DI

Dmitriy Ivanov in sql_ninja
сделайте проще отберите на время у всех права на эту фнукцию установив deny permission  кроме себя ,сделайте alter и верните права
источник

K

Kostya in sql_ninja
Max Chistyakov
У меня оно в самом деле ооочень долго - больше десяти минут висел в альтере, потом начальник ругнулся, отключил
раз 10 мин норм, сетевуху выдерните из сервера
источник

K

Kostya in sql_ninja
и альтерните
потом воткните
источник

K

Kostya in sql_ninja
источник