суббота, 15 августа 2020 г.

Прогаммные спагети в базе данных MS SQL.





Адрес для скачивания.
https://drive.google.com/file/d/0B2hfyDOpVkzjUEt5UC1TYVZMbGM/view?usp=sharing&resourcekey=0-z-_RkDog6NI4mjgS1y5lTQ
У этого блога и этой программы трудная судьба.
Блог я только что по ошибке стёр, а программа была с рождения кривая. Вкладываться в неё я не хотел, т.к. не было ни одного проекта, в котором я не мог бы разобраться без неё. Ну и как вам такой спагети из процедур и вью?



Поверьте на слово, что часть конструкции осталась за кадром.
При запуске, всё это виснет на ночь. Фирма, у котoрой купили, вне зоны доступа. Когда то в главной таблице было 20 записей, а сейчас 27 миллионов. Разберись.

Пришлось поднимать Proc_Depends.
С её помощью выявить больную ветвь и выйти на гениальный косяк исполнителя. Время пробега рухнуло к 16 минутам.

Вобщем, прога заслуженная. У неё иногда проваливается интерфейс, но это поймёте, если станете её щёлкать.
Дайте дабл-клик на имени базы-справа, всё пересчитается. Экран у неё, как у Table_Depends.
http://srulbond2.blogspot.co.il/2015/12/table-depends.html

Программа сделанна на Power Builder продукт для Windows не родной, к сожалению. Поэтому с MS SQL у него роман тяжёлый. Для подсоединения, у Power Builder есть набор файлов dll, которые к бесплатным экспрессам присоединяются криво, только к базе мастер. А если поставить Proc_Depends на какой нибудь кластарный сервер, тоже, с большого ума, она никуда не подсоеденится. Поэтому ставьте на пользовательские машины с нормальным проплаченным кляентом-должно сработать.

Когда речь идёт о связями между софтами, есть ещё одна неприятная особенность. Наличие связи "кто вызывает кого" описанно в таблице(хоть это и не таблица ) sys.sysdepends .
Чтобы эта таблица отражала реальность на удовлетворительном уровне, все софты надо перекомпилировать. Это небольшая наука, собрать все Альтеры в одном файле и прогнать раз этак 10, не глядя, на вой об ошибках. Потому, что Вы удалили процедуру-создали, a sys.sysdepends это не замечает, он ту-старую связь стёр, а новую не восстановил. А для вызова под-процедуры серверу sys.sysdepends не нужен, он её итак найдёт, а мы с вами без sys.sysdepends врядли где ещё эту связь можем получить не вылазя из одной единственной таблицы.