powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Дерево процедур на картинке
22 сообщений из 22, страница 1 из 1
Дерево процедур на картинке
    #33354586
KOLCHOZ_POSTEVENT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет,мужики.
Может кто знает и расскажет.
В последней версии Sybase Central действительно рисуется дерево-какая проца вызывает какую или это свист?
И тот же вопрос про PowerDesigner.
У меня этих инструментов нет,привык к одной старой вещице и предан ей до сих пор,но если эти новинки, действительно, рисуют деревце процедур,придётся о них подумать.
Так,что,пожалуйста,те,у кого есть эти инструменты последних моделей-поделитесь инфой.
...
Рейтинг: 0 / 0
Дерево процедур на картинке
    #33354814
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну во первых тогда уж нужно говорить не про Central, а конкретный плагин для конкретной РСУБД. Для ASA однозначно такого нет и не будет, так как в ASA сама архитектура вызовов ХП динамически интрепретируема и никаких ссылок (dependenced) на используемые обьекты внутри ХП в метаструктуре не сохраняется (фактически ссылка на несуществующий обьект будет определена после того, как процедура будет запущена и выполнение кода дойдет до этого места). Для получения списка задействованных ХП, UDF и триггеров в ASA можно воспользоваться профайлером ХП, который после запуска отмониторит все вызываемые обьекты, покажет их список с указанием кол-вом раз вызовов и временем выполнения и позволит на каждую строчку скрипта отслеженных обьектов так же просмотреть статистику времени выполнения. Здесь как раз достаточно запустить профайлер например, на сессию ISQL, выполнить нужную ХП, остановить профайлер и получить готовый для визуального просмотра и поиска узких мест список вызванных из ХП обьектов, со статистикой их работы.

Как с этим обстоят дела у ASE без понятия. Если при компиляции процедур в ASE сохраняется dependenced на используемые обьекты, то дерево вполне можно построить.
...
Рейтинг: 0 / 0
Дерево процедур на картинке
    #33354917
KOLCHOZ_POISTEVENT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо ASCRUS!
Именно АSE меня и интересует,построить,конечно,можно,вы правы,и поэтому я,как специалист по изобретению велосипедов,хотел бы знать насколько смешна эта новая затея
...
Рейтинг: 0 / 0
Дерево процедур на картинке
    #33355138
sybdba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KOLCHOZ_POISTEVENTСпасибо ASCRUS!
Именно АSE меня и интересует,построить,конечно,можно,вы правы,и поэтому я,как специалист по изобретению велосипедов,хотел бы знать насколько смешна эта новая затея

см. табличку sysdepends...
...
Рейтинг: 0 / 0
Дерево процедур на картинке
    #33355403
KOLCHOZ_POSTEVENT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Таблица sysdepends-плоская,как планета Земля,а мне нужно дерево,готовое,склееное с sysobjects по полю id,показывающее куда от строчки к строчки ведут depid.
Вот прослышал,что что-й-то есть,а вправду ли есть?Весь вопрос.
...
Рейтинг: 0 / 0
Дерево процедур на картинке
    #33355826
sybdba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KOLCHOZ_POSTEVENTТаблица sysdepends-плоская,как планета Земля,а мне нужно дерево,готовое,склееное с sysobjects по полю id,показывающее куда от строчки к строчки ведут depid.
Вот прослышал,что что-й-то есть,а вправду ли есть?Весь вопрос.

а что мешает взять следующее?:
select object_name(id),object_name(depid) from sysdepends
...
Рейтинг: 0 / 0
Дерево процедур на картинке
    #33355875
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KOLCHOZ_POSTEVENTТаблица sysdepends-плоская,как планета Земля,а мне нужно дерево,готовое,склееное с sysobjects по полю id,показывающее куда от строчки к строчки ведут depid.
Вот прослышал,что что-й-то есть,а вправду ли есть?Весь вопрос.

При определении вызовов процедур надеяться на sysdepends , мягко говоря, слишком оптимистично. Как правило, половины зависимостей процедур там нет.
...
Рейтинг: 0 / 0
Дерево процедур на картинке
    #33355898
sybdba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv KOLCHOZ_POSTEVENTТаблица sysdepends-плоская,как планета Земля,а мне нужно дерево,готовое,склееное с sysobjects по полю id,показывающее куда от строчки к строчки ведут depid.
Вот прослышал,что что-й-то есть,а вправду ли есть?Весь вопрос.

При определении вызовов процедур надеяться на sysdepends , мягко говоря, слишком оптимистично. Как правило, половины зависимостей процедур там нет.
а есть альтернатива ? ;)
можно конечно пробежаться по syscomments ;)

конечно sysdepends не панацея, но, _теоретически_, там должно быть всё корректно :)
...
Рейтинг: 0 / 0
Дерево процедур на картинке
    #33355996
nik2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sybdba MasterZiv KOLCHOZ_POSTEVENTТаблица sysdepends-плоская,как планета Земля,а мне нужно дерево,готовое,склееное с sysobjects по полю id,показывающее куда от строчки к строчки ведут depid.
Вот прослышал,что что-й-то есть,а вправду ли есть?Весь вопрос.

При определении вызовов процедур надеяться на sysdepends , мягко говоря, слишком оптимистично. Как правило, половины зависимостей процедур там нет.
а есть альтернатива ? ;)
можно конечно пробежаться по syscomments ;)

конечно sysdepends не панацея, но, _теоретически_, там должно быть всё корректно :)
а динамический sql оно поймет ???
...
Рейтинг: 0 / 0
Дерево процедур на картинке
    #33356008
sybdba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nik2 sybdba MasterZiv KOLCHOZ_POSTEVENTТаблица sysdepends-плоская,как планета Земля,а мне нужно дерево,готовое,склееное с sysobjects по полю id,показывающее куда от строчки к строчки ведут depid.
Вот прослышал,что что-й-то есть,а вправду ли есть?Весь вопрос.

При определении вызовов процедур надеяться на sysdepends , мягко говоря, слишком оптимистично. Как правило, половины зависимостей процедур там нет.
а есть альтернатива ? ;)
можно конечно пробежаться по syscomments ;)

конечно sysdepends не панацея, но, _теоретически_, там должно быть всё корректно :)
а динамический sql оно поймет ???

оно - это кто ?
...
Рейтинг: 0 / 0
Дерево процедур на картинке
    #33356019
nik2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sybdbaоно - это кто ?
sysdepends
...
Рейтинг: 0 / 0
Дерево процедур на картинке
    #33356158
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nik2а динамический sql оно поймет ???
Ага, и для всех новых объектов автоматически цеплять зависимость с sp_execute? ЛОЛ.
...
Рейтинг: 0 / 0
Дерево процедур на картинке
    #33356169
Фотография Zhora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KOLCHOZ_POSTEVENTПривет,мужики.
Может кто знает и расскажет.
В последней версии Sybase Central действительно рисуется дерево-какая проца вызывает какую или это свист?
И тот же вопрос про PowerDesigner.
У меня этих инструментов нет,привык к одной старой вещице и предан ей до сих пор,но если эти новинки, действительно, рисуют деревце процедур,придётся о них подумать.
Так,что,пожалуйста,те,у кого есть эти инструменты последних моделей-поделитесь инфой.
1. Не знаю насчет последней версии, юзаю Sybase Central 3.2.0.1963
2. Не знаю насчет PowerDesigner
3. Sybase Central показывает не дерево процедуры, а только непосредственно
родителя(ей) (Referenced By) и детей (Referencing) базируясь на таблице
sysdepends.
4. Sysdepends ненадежна в том смысле что при создании sps их надо загонять
в правильном порядке (что в принципе является хорошим тоном, но очень может быть трудоемко), иначе связи потеряются.
5. Dbartisan (utility Schema Extraction) и Cast Workbench правильно (в порядке вызовов)
делают выборку sps базируясь действительно на анализе syscomments.
...
Рейтинг: 0 / 0
Дерево процедур на картинке
    #33356179
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sybdbaа есть альтернатива ? ;)
можно конечно пробежаться по syscomments ;)


Альтернатива только одна -- синтактический разбор текстов процедур и триггеров.
...
Рейтинг: 0 / 0
Дерево процедур на картинке
    #33356344
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQLBrowser строил такое дерево зависимостей дл процедур. Плюс он имеет визуальный дебагер процедур для ASE. Качал с какого-то французского сайта типа wanadoo.*
...
Рейтинг: 0 / 0
Дерево процедур на картинке
    #33356583
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, и в этом смысле он был классный, потому как он реально парсил текст TSQL.
...
Рейтинг: 0 / 0
Дерево процедур на картинке
    #33358814
Фотография Zhora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Дерево процедур на картинке
    #38495488
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приподниму старую тему.
sysdepends явно не все связи хранит.

Сделал для себя следующим образом:
сначала вьюха:
Код: sql
1.
2.
3.
4.
5.
6.
Create view sa_syscomments
as
select 
  sc.id, sc.text + IsNull(Left(scnext.text,50),'') as text
from syscomments sc noholdlock
    left join syscomments scnext on scnext.id=sc.id and scnext.colid = sc.colid+1



дерево процедур строю так:
Код: sql
1.
2.
3.
4.
5.
select DISTINCT soRef.name + '[' + soRef.type + ']' as SPParent, soSP.name + '[' + soSP.type + ']'
from sysobjects soSP
    join sa_syscomments sc on sc.id <> so.SPid and sc.text like '% ' + soSP.name + '%'
    join sysobjects soRef on soRef.id = sc.id and soRef.name <> so.name
where soSP.type = 'P'



из минусов подхода: если есть процедуры с "таким же именем + суффикс" - так же отобразит = лень доделывать. но тривиальная доработка. Но результата хватает. Аналогично можно построить дерево использования таблиц/полей + таблиц и т.д.

Мож кто-то что-то более рациональное по данному направлению делал/видел?
...
Рейтинг: 0 / 0
Дерево процедур на картинке
    #38497221
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikle83,

Чтоб прояснить окончательно ситуацию.

При создании процедуры в sysdepends заносятся зависимости данной процедуры только от тех процедур, которые
существуют на момент создания данной процедуры. Если какой-то вызываемой процедуры нет на момент создания данной, то данная процедура всё равно создаётся, но в sysdepends зависимости от несуществующей процедуры не заносятся. Об этом выдаётся соотвестствующее предупреждение.

Соответственно, решение проблемы может быть простым -- заливать все процедуры только по уровням зависимостей, и при этом, если пересоздаёшь процедуру нижнего уровня, нужно обязательно пересоздать все вызывающие её процедуры, и так далее рекурсивно по дереву вызовов.

Но такое решение сложно реализовать на практике.

Для одноразового решения такой проблемы я писал достаточно сложную программу Recompile, которая может ранжировать
объекты по зависимостям (она сливает из БД нужные объекты, сливает их зависимости, строит ранжированное дерево объектов, и выстраивает код объектов в выходном скрипте уже с учётом рангов -- нижние сначала, верхние -- потом).
И кажется я выкладывал эту утилиту в FAQ.

Парсить весь код всех процедур, мне кажется, ещё сложнее, по крайней мере слово "парсить" уже подразумевает более высокий уровень сложности.
...
Рейтинг: 0 / 0
Дерево процедур на картинке
    #38497293
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivСоответственно, решение проблемы может быть простым -- заливать все процедуры только по уровням зависимостей, и при этом, если пересоздаёшь процедуру нижнего уровня, нужно обязательно пересоздать все вызывающие её процедуры, и так далее рекурсивно по дереву вызовов.


а может быть очень простым - двойная проливка скиптов без заморочек с порядком, зависимостями и т.п.
только скрипты должны быть вида "if exists ... drop ... create"
...
Рейтинг: 0 / 0
Дерево процедур на картинке
    #38498973
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это все хорошо, но выше указанный скрипт, помимо процедур, поможет так же депенденси таблиц без изменения скрипта выдернуть. Т.е. по имени таблицы можно получить все объекты, где она запользована... А так же по имени поля при определенной сноровке :)
и все делает один скрипт. Правда для полного феншуя его надо немного доработать напильником примерно так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 [code=sql]
select Distinct
  scColumn.id, so.name, so.type
from sa_syscomments scColumn
  join sysobjects so on so.id = scColumn.id
  where scColumn.text like '%OBJECTNAME%'
    and substring(scColumn.text, patindex('%OBJECTNAME%', scColumn.text) -1, 1) not like '[A-Za-z0-9_-]'
    and substring(scColumn.text, patindex('%OBJECTNAME%', scColumn.text) + LEN('OBJECTNAME'), 1) not like '[A-Za-z0-9_-]'

...
Рейтинг: 0 / 0
Дерево процедур на картинке
    #38498975
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
само собой, если надо более жестко выбрать (к примеру, таблица + имя поля) - то чуть сложнее будет, но тоже вполне реально...
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Дерево процедур на картинке
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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