Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / отключение констрейнов / 16 сообщений из 16, страница 1 из 1
08.11.2019, 14:33
    #39886798
denis_viktorovich
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отключение констрейнов
Доброго времени суток!
Есть довольно дурная задача, от которой не отвертеться и которую все равно пришлось сделать. Суть в том, что ночью в запускаемой джобом процедуре приходится у ряда таблиц отключать констрейны и триггера, править ключевые поля и включать обратно. Все работает верно, но таблицы большие и "ALTER TABLE WITH CHECK CHECK" работает по всем медленно.
Хочется все же, каждый отдельный такой объект обрабатывать в отдельной транзакции, чтобы при непрохождении чека все откатилось и в кэтче включить констрейны обратно. Т.е. время растет пропорционально кол-ву заданий.
Нет ли какойто хитрости, чтобы выполнять проверку ALTER TABLE WITH CHECK CHECK не по всей таблице, а только по откорректированным записям?

з.ы. Вариант сгруппировать задания - т.е. отключить, в транзакции сделать изменения по всем заданиям а потом вкючить обратно я конечно рассматриваю, но в таком случае ошибка по одному из заданий откатит все.
...
Рейтинг: 0 / 0
08.11.2019, 14:43
    #39886804
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отключение констрейнов
denis_viktorovich,

а с какой целью Вы отключаете? Если не будете отключать, то проверяются как раз только изменённые.
...
Рейтинг: 0 / 0
08.11.2019, 14:50
    #39886807
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отключение констрейнов
Владислав Колосов
denis_viktorovich,

а с какой целью Вы отключаете? Если не будете отключать, то проверяются как раз только изменённые.

хочет быстро вставлять и медленно проверять
...
Рейтинг: 0 / 0
08.11.2019, 15:04
    #39886819
denis_viktorovich
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отключение констрейнов
Владислав Колосов,
То что надо делать противоречил логике системы. есть заказ, есть позиция дерева заказа, по позиции есть набор операций,
плановых позиций, параметров, параметров-параметров :-) и т.д. c довольно глубокой вложенностью.
У всех этих объектов в составной ключ входит этот ид заказа, он входит во все констрейны и проверки (для проверки на наличия объекта к которому относится параметр и на зависимыеобъекты). Мне надо кусок ветки дерева начиная с некоей сборочной одного заказа поменять местами с такой же сборочной в другом.
...
Рейтинг: 0 / 0
08.11.2019, 15:09
    #39886821
denis_viktorovich
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отключение констрейнов
т.е. отвечаю на вопрос - с какой целью отключаю:
Если не отключать сразу падает, т.к. много таблиц. мне надо поменять все разом, а затем включить и проверить.
...
Рейтинг: 0 / 0
08.11.2019, 15:52
    #39886837
1C Developer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отключение констрейнов
Предлагать переписать констрейны и триггеры так, что бы операция замены Ваших <<поддеревьев>> проходила без их отключения (для корректных данных) не предлагать?
...
Рейтинг: 0 / 0
08.11.2019, 16:12
    #39886849
Gerros
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отключение констрейнов
denis_viktorovich,

два заказа, А и Б, у первого есть ветка Х, у второго У, нужно поменять Х и У местами, так?

не трогаем констрейны. ветки переставляем через временный заказ:
создаём пустой временный заказ О, копируем в него из А ветку Х.
в заказе А удаляем ветку Х, копируем туда ветку У из заказа Б.
в заказе Б удаляем ветку У, копируем туда ветку Х из О.
удаляем заказ О.
...
Рейтинг: 0 / 0
08.11.2019, 16:18
    #39886855
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отключение констрейнов
Gerros
denis_viktorovich,

два заказа, А и Б, у первого есть ветка Х, у второго У, нужно поменять Х и У местами, так?

не трогаем констрейны. ветки переставляем через временный заказ:
создаём пустой временный заказ О, копируем в него из А ветку Х.
в заказе А удаляем ветку Х, копируем туда ветку У из заказа Б.
в заказе Б удаляем ветку У, копируем туда ветку Х из О.
удаляем заказ О.

1. зачем всё это копируем вставляем, если по факту надо просто менять мастер всей ветки
2. создавать всё время тоже не обязательно, может всё время лежать инитный владелец на который всё перевешивается и потом снимается
...
Рейтинг: 0 / 0
08.11.2019, 16:20
    #39886858
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отключение констрейнов
denis_viktorovich,

единственный способ гарантировать целостность таблицы - это проверка всей таблицы после отключения и включения проверочного ограничения. Или не отключайте или проверяйте всё. Если действительно хотите проверить.
...
Рейтинг: 0 / 0
08.11.2019, 16:24
    #39886860
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отключение констрейнов
Сами ключи, как правило, не изменяют ввиду большую накладных расходов на поддержание целостности. Используют суррогатные ключи, если натуральные по каким-то причинам могут быть изменены.
...
Рейтинг: 0 / 0
09.11.2019, 09:25
    #39887003
denis_viktorovich
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отключение констрейнов
Gerros
denis_viktorovich,

два заказа, А и Б, у первого есть ветка Х, у второго У, нужно поменять Х и У местами, так?

не трогаем констрейны. ветки переставляем через временный заказ:
создаём пустой временный заказ О, копируем в него из А ветку Х.
в заказе А удаляем ветку Х, копируем туда ветку У из заказа Б.
в заказе Б удаляем ветку У, копируем туда ветку Х из О.
удаляем заказ О.


Такая схема отлично работает при перевешивании всех входящих из одной сборки в другую внутри заказа. С разными проблема в том, что к позиции дерева привязаны операции, к каждой операции план, потребность, сдача, оборудование, плановые ресурсы к каждому еще табличная часть в виде параметров. И практически в каждой внешнее ограничение по ключу содержащему ид заказа, т.е. если меняем заказ в позиции дерева повисают в воздухе техпроцесс, план и т.д., когда меняем в плане - повисают параметры.
У всех объектов есть свои уникальные ключ и в общем непонятно, зачем тут заказ в констрейнах, но система покупная и до поры не хотелось менять базовую структуру.
...
Рейтинг: 0 / 0
09.11.2019, 15:05
    #39887045
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отключение констрейнов
denis_viktorovich
У всех объектов есть свои уникальные ключ и в общем непонятно, зачем тут заказ в констрейнах, но система покупная и до поры не хотелось менять базовую структуру.
Неправильная модель данных == страдания. Ничего не поделать.

PS Если система покупная, логично спросить про пути решения вашей задачи у поставщика.
...
Рейтинг: 0 / 0
09.11.2019, 15:07
    #39887047
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отключение констрейнов
denis_viktorovich
И практически в каждой внешнее ограничение по ключу содержащему ид заказа, т.е. если меняем заказ в позиции дерева повисают в воздухе техпроцесс, план и т.д., когда меняем в плане - повисают параметры.
А что, просто проапдэйтить ID заказа в нескольких таблицах - такая сложная задача? Там что, к заказу привязаны миллиарды записей?
...
Рейтинг: 0 / 0
10.11.2019, 01:12
    #39887139
Gerros
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отключение констрейнов
denis_viktorovich
проблема в том, что к позиции дерева привязаны операции, к каждой операции план, потребность, сдача, оборудование, плановые ресурсы к каждому еще табличная часть в виде параметров.
Что мешает склонировать все связанные сущности? У вас есть набор update-ов, переделайте его в наборов insert-ов и набор delete-ов.
...
Рейтинг: 0 / 0
11.11.2019, 06:02
    #39887280
denis_viktorovich
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отключение констрейнов
Gerros,
привязки, например ид дерева и тп, как параметр входит например в учетный документ. Если вставлять и удалять то придется генерить новый ид, т.к. он уникальный.
...
Рейтинг: 0 / 0
11.11.2019, 11:24
    #39887365
a_voronin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
отключение констрейнов
denis_viktorovich,

В некоторых случаях бывает прощу констрейнты дропнуть, потом создать. Даже при частичном обновлении данных.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / отключение констрейнов / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]