Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 ускорить отключение триггера  [new]
пятый2
Member

Откуда:
Сообщений: 148
Добрый день.
Очень долго отрабатывают команды:
ALTER TABLE big_table DISABLE TRIGGER t1

и
ALTER TABLE big_table ENABLE TRIGGER t1



Таблица большая и активно используется.

Можно ли как-то ускорить включение-отключение триггера?
11 май 18, 19:02    [21403971]     Ответить | Цитировать Сообщить модератору
 Re: ускорить отключение триггера  [new]
invm
Member

Откуда: Москва
Сообщений: 9350
пятый2
Можно ли как-то ускорить включение-отключение триггера?
Можно. Прекратив активно использовать таблицу.
А еще лучше вообще отказаться от идеи запрета/разрешения триггеров в прикладном коде.
11 май 18, 19:07    [21403980]     Ответить | Цитировать Сообщить модератору
 Re: ускорить отключение триггера  [new]
aleks222
Member

Откуда:
Сообщений: 985
пятый2
Добрый день.
Очень долго отрабатывают команды:
ALTER TABLE big_table DISABLE TRIGGER t1

и
ALTER TABLE big_table ENABLE TRIGGER t1


Таблица большая и активно используется.

Можно ли как-то ускорить включение-отключение триггера?


Яволь.

В начало триггера включаешь проверку строки в табличке.

if exists( select * from aTable where Value = 'triggerName') return;


И... бинго!!!
11 май 18, 19:34    [21404009]     Ответить | Цитировать Сообщить модератору
 Re: ускорить отключение триггера  [new]
aleks222
Member

Откуда:
Сообщений: 985
Так реализуется и "отключение триггера ТОЛЬКО ДЛЯ КОНКРЕТНОГО @@SPID".

Ну, типа, для себя отключен - для всех прочих работает.
12 май 18, 11:28    [21404734]     Ответить | Цитировать Сообщить модератору
 Re: ускорить отключение триггера  [new]
invm
Member

Откуда: Москва
Сообщений: 9350
aleks222
Так реализуется и "отключение триггера ТОЛЬКО ДЛЯ КОНКРЕТНОГО @@SPID".
Каким же образом, если в твоей проверке наличия строки, нет даже намека на SPID?
А даже если бы и был, что случится, если забудешь эту строку удалить?


пятый2,

Безопасный способ игнорировать триггер в рамках только своего соединения, это добавить в его начало
if object_id('tempdb..#t1__bypass', 'U') is not null
 return;
Теперь для игнорирования достаточно просто создать временную таблицу #t1__bypass. Даже если забыть ее удалить, это никак не повлияет на другие сессии.
12 май 18, 18:41    [21405320]     Ответить | Цитировать Сообщить модератору
 Re: ускорить отключение триггера  [new]
aleks222
Member

Откуда:
Сообщений: 985
invm
aleks222
Так реализуется и "отключение триггера ТОЛЬКО ДЛЯ КОНКРЕТНОГО @@SPID".
Каким же образом, если в твоей проверке наличия строки, нет даже намека на SPID?
А даже если бы и был, что случится, если забудешь эту строку удалить?


пятый2,

Безопасный способ игнорировать триггер в рамках только своего соединения, это добавить в его начало
if object_id('tempdb..#t1__bypass', 'U') is not null
 return;
Теперь для игнорирования достаточно просто создать временную таблицу #t1__bypass. Даже если забыть ее удалить, это никак не повлияет на другие сессии.


1. Ну дык, намекни. Это все решаемо.
2. Он небезопасен, ибо "каждый может создать таблицу".
12 май 18, 18:52    [21405339]     Ответить | Цитировать Сообщить модератору
 Re: ускорить отключение триггера  [new]
invm
Member

Откуда: Москва
Сообщений: 9350
aleks222
Он небезопасен, ибо "каждый может создать таблицу"
Да ну? Временную, видимую всем?
12 май 18, 19:46    [21405442]     Ответить | Цитировать Сообщить модератору
 Re: ускорить отключение триггера  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 5960
invm
aleks222
Он небезопасен, ибо "каждый может создать таблицу"
Да ну? Временную, видимую всем?

Видимо, подразумевалось, что каждый может создать такую таблицу для себя, и отключить для себя же триггер.
12 май 18, 20:16    [21405482]     Ответить | Цитировать Сообщить модератору
 Re: ускорить отключение триггера  [new]
invm
Member

Откуда: Москва
Сообщений: 9350
Сон Веры Павловны
Видимо, подразумевалось, что каждый может создать такую таблицу для себя, и отключить для себя же триггер.
Возможно. Это легко лечится, в отличии от руления через SPID.
12 май 18, 20:38    [21405502]     Ответить | Цитировать Сообщить модератору
 Re: ускорить отключение триггера  [new]
aleks222
Member

Откуда:
Сообщений: 985
invm
Сон Веры Павловны
Видимо, подразумевалось, что каждый может создать такую таблицу для себя, и отключить для себя же триггер.
Возможно. Это легко лечится, в отличии от руления через SPID.

Выдирание зуба через задний проход?
13 май 18, 11:28    [21406144]     Ответить | Цитировать Сообщить модератору
 Re: ускорить отключение триггера  [new]
invm
Member

Откуда: Москва
Сообщений: 9350
aleks222
Выдирание зуба через задний проход?
Ну если так называть использование штатных механизмов вместо самопальных велосипедов, то да.
13 май 18, 12:42    [21406195]     Ответить | Цитировать Сообщить модератору
 Re: ускорить отключение триггера  [new]
aleks222
Member

Откуда:
Сообщений: 985
invm
aleks222
Выдирание зуба через задний проход?
Ну если так называть использование штатных механизмов вместо самопальных велосипедов, то да.


О великий гуру!!!
Не карай меня неразумного!
Я ж не знал, что временные таблицы предназначены для отключения триггеров.

ЗЫ. Не неси чушь.
13 май 18, 12:44    [21406198]     Ответить | Цитировать Сообщить модератору
 Re: ускорить отключение триггера  [new]
invm
Member

Откуда: Москва
Сообщений: 9350
aleks222
Я ж не знал, что временные таблицы предназначены для отключения триггеров.
А постоянные таблицы предназначены для отключения триггеров?
aleks222
ЗЫ. Не неси чушь.
Могу тебе порекомендовать сделать то же самое, предварительно прекратив надувать щеки и включив уже мозг.
13 май 18, 13:43    [21406247]     Ответить | Цитировать Сообщить модератору
 Re: ускорить отключение триггера  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7771
Еще есть способ с SET CONTEXT_INFO.
13 май 18, 15:40    [21406367]     Ответить | Цитировать Сообщить модератору
 Re: ускорить отключение триггера  [new]
aleks222
Member

Откуда:
Сообщений: 985
invm
aleks222
Я ж не знал, что временные таблицы предназначены для отключения триггеров.
А постоянные таблицы предназначены для отключения триггеров?
aleks222
ЗЫ. Не неси чушь.
Могу тебе порекомендовать сделать то же самое, предварительно прекратив надувать щеки и включив уже мозг.


Как ни крути

ALTER TABLE big_table DISABLE TRIGGER t1


отключает триггер на постоянно. И контроль доступа к постоянной таблице проще организовать.
Так что, опять пердеж в лужу.
14 май 18, 06:29    [21406983]     Ответить | Цитировать Сообщить модератору
 Re: ускорить отключение триггера  [new]
invm
Member

Откуда: Москва
Сообщений: 9350
aleks222
И контроль доступа к постоянной таблице проще организовать.
Проверить членство в определенной роли неимоверно сложно организовать?
aleks222
Так что, опять пердеж в лужу.
Видимо пишешь смотрясь в зеркало?
14 май 18, 09:51    [21407210]     Ответить | Цитировать Сообщить модератору
 Re: ускорить отключение триггера  [new]
aleks222
Member

Откуда:
Сообщений: 985
invm
aleks222
И контроль доступа к постоянной таблице проще организовать.
Проверить членство в определенной роли неимоверно сложно организовать?
aleks222
Так что, опять пердеж в лужу.
Видимо пишешь смотрясь в зеркало?


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

Приступай.

ЗЫ. Если нужно автоотключение отключения по разрыву сессии - это делается гораздо проще. Через sp_getapplock @Owner= 'Session'.
14 май 18, 10:15    [21407271]     Ответить | Цитировать Сообщить модератору
 Re: ускорить отключение триггера  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
aleks222
invm
пропущено...
Проверить членство в определенной роли неимоверно сложно организовать?
пропущено...
Видимо пишешь смотрясь в зеркало?


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

Приступай.

ЗЫ. Если нужно автоотключение отключения по разрыву сессии - это делается гораздо проще. Через sp_getapplock @Owner= 'Session'.

что же делает триггер, который можно отключить считая это обыденной ситуацией.
Использем модель описанную invm для обхода части логики триггера (допустим не писать историю/ без проверки бизнес-прав и т.п.) но что бы взять и просто выбросить...
14 май 18, 10:24    [21407292]     Ответить | Цитировать Сообщить модератору
 Re: ускорить отключение триггера  [new]
invm
Member

Откуда: Москва
Сообщений: 9350
aleks222
Тебе, страдалец, осталось совсем ерунда: решить проблему с постоянным отключением триггера через временную таблицу.
Страдалец у нас ты - вечно являешься пострадавшим от собственнолй глупости
Продолжай генерировать бредовые идеи - это твой конек.
14 май 18, 10:30    [21407311]     Ответить | Цитировать Сообщить модератору
 Re: ускорить отключение триггера  [new]
aleks222
Member

Откуда:
Сообщений: 985
invm
aleks222
Тебе, страдалец, осталось совсем ерунда: решить проблему с постоянным отключением триггера через временную таблицу.
Страдалец у нас ты - вечно являешься пострадавшим от собственнолй глупости
Продолжай генерировать бредовые идеи - это твой конек.

Ну да, твои гениальные идеи с двойной проверкой таблички и роли - несомненный верх совершенства.
14 май 18, 10:36    [21407335]     Ответить | Цитировать Сообщить модератору
 Re: ускорить отключение триггера  [new]
invm
Member

Откуда: Москва
Сообщений: 9350
aleks222
Ну да, твои гениальные идеи с двойной проверкой таблички и роли - несомненный верх совершенства.
Ну наконец-то покажи нам уже свою гениальную и безопасную реализацию через постоянную таблицу
aleks222
"отключение триггера ТОЛЬКО ДЛЯ КОНКРЕТНОГО @@SPID".
14 май 18, 11:26    [21407521]     Ответить | Цитировать Сообщить модератору
 Re: ускорить отключение триггера  [new]
aleks222
Member

Откуда:
Сообщений: 985
invm
aleks222
Ну да, твои гениальные идеи с двойной проверкой таблички и роли - несомненный верх совершенства.
Ну наконец-то покажи нам уже свою гениальную и безопасную реализацию через постоянную таблицу
aleks222
"отключение триггера ТОЛЬКО ДЛЯ КОНКРЕТНОГО @@SPID".


Зачем?
У меня работает.
Тредстартеру не надо.
Писать тривиальный код - мне лень.
14 май 18, 11:44    [21407592]     Ответить | Цитировать Сообщить модератору
 Re: ускорить отключение триггера  [new]
пятый2
Member

Откуда:
Сообщений: 148
aleks222
Тредстартеру не надо.


Добрый день, очень надо.
14 май 18, 11:56    [21407639]     Ответить | Цитировать Сообщить модератору
 Re: ускорить отключение триггера  [new]
invm
Member

Откуда: Москва
Сообщений: 9350
aleks222
Зачем?
У меня работает.
Тредстартеру не надо.
Писать тривиальный код - мне лень.
Если у тебя есть, то зачем писать?
В общем, как обычно - сплошной трындеж и надувание щек.
14 май 18, 12:11    [21407700]     Ответить | Цитировать Сообщить модератору
 Re: ускорить отключение триггера  [new]
invm
Member

Откуда: Москва
Сообщений: 9350
пятый2
Добрый день, очень надо.
Очередной нечитатель? Прямым текстом было показано как сделать.
14 май 18, 12:12    [21407713]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить