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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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