powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Как временно отключить каскадное удаление
12 сообщений из 12, страница 1 из 1
Как временно отключить каскадное удаление
    #39161787
Yava1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите, плз как правильно поступить:

1.Есть основная табла, относительно небольшого размера, и на неё ссылается внешний индекс с каскадным удалением из очень большой таблы.
2.Надо удалить пачку записей из основной таблы, при этом соответственно срабатывает удаление из подчиненной таблы. Предварительно из этой подчиненной таблы записи для удаления удаляються напрямую.
3. Т.е при удалении из основной таблы системный триггер каскадного удаления в подчиненной табле возвращает 100, так как в подчиненной табле записи уже удалили. Но вот эти попытки удалить несуществующие записи отжирают все время работы.

Как правильно решить проблему ? может на момент удаления из основной таблы можна отключить каскадное удаление ? но незнаю как
...
Рейтинг: 0 / 0
Как временно отключить каскадное удаление
    #39161829
Yava1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл указать - сервер ASA 10.0.1
...
Рейтинг: 0 / 0
Как временно отключить каскадное удаление
    #39162052
antand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yava1,

Непонятно вот это - "возвращает 100, так как в подчиненной табле записи уже удалили. Но вот эти попытки удалить несуществующие записи отжирают все время работы."
Если все спроектировано правильно, то удаление в системном триггере будет работать быстро т.к. записи уже удалили. Но убирать удаление нельзя, если Вам целостность нужна.
А если "предварительно из этой подчиненной таблы записи для удаления удаляються напрямую." будет всегда выполняться, то может Вам и каскадное удаление не нужно. А индекс можно и без FK создать по полю в подчиненной.
...
Рейтинг: 0 / 0
Как временно отключить каскадное удаление
    #39162105
Yava1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я имел ввиду оператор delete из триггера возвращает код 100 - "запись не найдена". перекраивать БД не очень хочется, я не разработчик - саппорт..
...
Рейтинг: 0 / 0
Как временно отключить каскадное удаление
    #39162169
antand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yava1,
Интересно посмотреть на код вашего триггера c delete
Вот из документации
Error constant SQLE_NOTFOUND
SQLCODE 100
You positioned a cursor beyond the beginning or past the end of the query. There is no row at that position

Простой оператор delete from t1 where....
SQLCODE 100 возвращать по идее не должен.
...
Рейтинг: 0 / 0
Как временно отключить каскадное удаление
    #39162189
antand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я имел ввиду delete from t1 where.... - оператор в триггере где t1 - подчиненная
А не Ваш оператор delete на основной
...
Рейтинг: 0 / 0
Как временно отключить каскадное удаление
    #39162281
Yava1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
antand,

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

create trigger REFACTION after delete on DBA.CEO_Operations_Achive
referencing old as oldkey
for each row
begin
delete from DBA.CEO_Oper_CLL_archive
where oper_id = oldkey.id and oper_filial = oldkey.filial
end

а код 100 я уже вижу при разборе трассировки в каждой конкретной команде delete from DBA.CEO_Oper_CLL_archive ....
...
Рейтинг: 0 / 0
Как временно отключить каскадное удаление
    #39162299
antand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yava1,

А на CEO_Oper_CLL_archive нет триггеров своих?
...
Рейтинг: 0 / 0
Как временно отключить каскадное удаление
    #39162674
Yava1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
antand

Нету
...
Рейтинг: 0 / 0
Как временно отключить каскадное удаление
    #39162885
antand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yava1,

А вообще кроме как Вы говорите "тормозов", этот код 100 мешает Вам при delete из основной?
При удалении из подчиненной вручную, т.е. без использования триггера, но с where по тем же полям, тормоза есть?
Может дело в большом объеме подчиненной.
...
Рейтинг: 0 / 0
Как временно отключить каскадное удаление
    #39163182
Yava1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
antand,
Да.Дело в большом объеме подчиненной. Решил перед удалением в основной буду дропать внешний индекс, а потом строить. Так в разы быстрее работает
...
Рейтинг: 0 / 0
Как временно отключить каскадное удаление
    #39163213
antand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Yava1,

Можно еще вместо этого триггера сделать триггер на удаление типа statement в CEO_Operations_Achive
А в нем
delete from CEO_Oper_CLL_archive t2 from deleted t1
where t2.oper_id = t1.id and t2.oper_filial = t1.filial
Т.е. за один оператор delete по основной, даже если в основной удаляются много записей, делать все удаления в подчиненной одним оператором, а не по каждой записи
Только индекс отдельный надо создать на подчиненной, если FK уберете

Еще вариант, но править придется логику Когда таблица действительно большая и время критично, то проще добавить в подчиненную поле "признак удаления". Использовать те же oper_id и oper_filial(обнулять их)
При удалении в основной делать update в подчиненной(update в данном случае сработает быстрее чем delete)
А ночью удалять помеченные.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Как временно отключить каскадное удаление
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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