Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
отключение констрейнов
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! Есть довольно дурная задача, от которой не отвертеться и которую все равно пришлось сделать. Суть в том, что ночью в запускаемой джобом процедуре приходится у ряда таблиц отключать констрейны и триггера, править ключевые поля и включать обратно. Все работает верно, но таблицы большие и "ALTER TABLE WITH CHECK CHECK" работает по всем медленно. Хочется все же, каждый отдельный такой объект обрабатывать в отдельной транзакции, чтобы при непрохождении чека все откатилось и в кэтче включить констрейны обратно. Т.е. время растет пропорционально кол-ву заданий. Нет ли какойто хитрости, чтобы выполнять проверку ALTER TABLE WITH CHECK CHECK не по всей таблице, а только по откорректированным записям? з.ы. Вариант сгруппировать задания - т.е. отключить, в транзакции сделать изменения по всем заданиям а потом вкючить обратно я конечно рассматриваю, но в таком случае ошибка по одному из заданий откатит все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2019, 14:33 |
|
||
|
отключение констрейнов
|
|||
|---|---|---|---|
|
#18+
denis_viktorovich, а с какой целью Вы отключаете? Если не будете отключать, то проверяются как раз только изменённые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2019, 14:43 |
|
||
|
отключение констрейнов
|
|||
|---|---|---|---|
|
#18+
Владислав Колосов denis_viktorovich, а с какой целью Вы отключаете? Если не будете отключать, то проверяются как раз только изменённые. хочет быстро вставлять и медленно проверять ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2019, 14:50 |
|
||
|
отключение констрейнов
|
|||
|---|---|---|---|
|
#18+
Владислав Колосов, То что надо делать противоречил логике системы. есть заказ, есть позиция дерева заказа, по позиции есть набор операций, плановых позиций, параметров, параметров-параметров :-) и т.д. c довольно глубокой вложенностью. У всех этих объектов в составной ключ входит этот ид заказа, он входит во все констрейны и проверки (для проверки на наличия объекта к которому относится параметр и на зависимыеобъекты). Мне надо кусок ветки дерева начиная с некоей сборочной одного заказа поменять местами с такой же сборочной в другом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2019, 15:04 |
|
||
|
отключение констрейнов
|
|||
|---|---|---|---|
|
#18+
т.е. отвечаю на вопрос - с какой целью отключаю: Если не отключать сразу падает, т.к. много таблиц. мне надо поменять все разом, а затем включить и проверить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2019, 15:09 |
|
||
|
отключение констрейнов
|
|||
|---|---|---|---|
|
#18+
Предлагать переписать констрейны и триггеры так, что бы операция замены Ваших <<поддеревьев>> проходила без их отключения (для корректных данных) не предлагать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2019, 15:52 |
|
||
|
отключение констрейнов
|
|||
|---|---|---|---|
|
#18+
denis_viktorovich, два заказа, А и Б, у первого есть ветка Х, у второго У, нужно поменять Х и У местами, так? не трогаем констрейны. ветки переставляем через временный заказ: создаём пустой временный заказ О, копируем в него из А ветку Х. в заказе А удаляем ветку Х, копируем туда ветку У из заказа Б. в заказе Б удаляем ветку У, копируем туда ветку Х из О. удаляем заказ О. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2019, 16:12 |
|
||
|
отключение констрейнов
|
|||
|---|---|---|---|
|
#18+
Gerros denis_viktorovich, два заказа, А и Б, у первого есть ветка Х, у второго У, нужно поменять Х и У местами, так? не трогаем констрейны. ветки переставляем через временный заказ: создаём пустой временный заказ О, копируем в него из А ветку Х. в заказе А удаляем ветку Х, копируем туда ветку У из заказа Б. в заказе Б удаляем ветку У, копируем туда ветку Х из О. удаляем заказ О. 1. зачем всё это копируем вставляем, если по факту надо просто менять мастер всей ветки 2. создавать всё время тоже не обязательно, может всё время лежать инитный владелец на который всё перевешивается и потом снимается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2019, 16:18 |
|
||
|
отключение констрейнов
|
|||
|---|---|---|---|
|
#18+
denis_viktorovich, единственный способ гарантировать целостность таблицы - это проверка всей таблицы после отключения и включения проверочного ограничения. Или не отключайте или проверяйте всё. Если действительно хотите проверить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2019, 16:20 |
|
||
|
отключение констрейнов
|
|||
|---|---|---|---|
|
#18+
Сами ключи, как правило, не изменяют ввиду большую накладных расходов на поддержание целостности. Используют суррогатные ключи, если натуральные по каким-то причинам могут быть изменены. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.11.2019, 16:24 |
|
||
|
отключение констрейнов
|
|||
|---|---|---|---|
|
#18+
Gerros denis_viktorovich, два заказа, А и Б, у первого есть ветка Х, у второго У, нужно поменять Х и У местами, так? не трогаем констрейны. ветки переставляем через временный заказ: создаём пустой временный заказ О, копируем в него из А ветку Х. в заказе А удаляем ветку Х, копируем туда ветку У из заказа Б. в заказе Б удаляем ветку У, копируем туда ветку Х из О. удаляем заказ О. Такая схема отлично работает при перевешивании всех входящих из одной сборки в другую внутри заказа. С разными проблема в том, что к позиции дерева привязаны операции, к каждой операции план, потребность, сдача, оборудование, плановые ресурсы к каждому еще табличная часть в виде параметров. И практически в каждой внешнее ограничение по ключу содержащему ид заказа, т.е. если меняем заказ в позиции дерева повисают в воздухе техпроцесс, план и т.д., когда меняем в плане - повисают параметры. У всех объектов есть свои уникальные ключ и в общем непонятно, зачем тут заказ в констрейнах, но система покупная и до поры не хотелось менять базовую структуру. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2019, 09:25 |
|
||
|
отключение констрейнов
|
|||
|---|---|---|---|
|
#18+
denis_viktorovich У всех объектов есть свои уникальные ключ и в общем непонятно, зачем тут заказ в констрейнах, но система покупная и до поры не хотелось менять базовую структуру. PS Если система покупная, логично спросить про пути решения вашей задачи у поставщика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2019, 15:05 |
|
||
|
отключение констрейнов
|
|||
|---|---|---|---|
|
#18+
denis_viktorovich И практически в каждой внешнее ограничение по ключу содержащему ид заказа, т.е. если меняем заказ в позиции дерева повисают в воздухе техпроцесс, план и т.д., когда меняем в плане - повисают параметры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2019, 15:07 |
|
||
|
отключение констрейнов
|
|||
|---|---|---|---|
|
#18+
denis_viktorovich проблема в том, что к позиции дерева привязаны операции, к каждой операции план, потребность, сдача, оборудование, плановые ресурсы к каждому еще табличная часть в виде параметров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.11.2019, 01:12 |
|
||
|
отключение констрейнов
|
|||
|---|---|---|---|
|
#18+
Gerros, привязки, например ид дерева и тп, как параметр входит например в учетный документ. Если вставлять и удалять то придется генерить новый ид, т.к. он уникальный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2019, 06:02 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=39886798&tid=1686985]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
144ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
39ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 458ms |

| 0 / 0 |
