powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / зависимые объекты
17 сообщений из 17, страница 1 из 1
зависимые объекты
    #34855325
Kru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем добрый день!

На днях возникла задачка вывести список всех объектов (хранимки, триггеры, вьюхи) на сервере которые используют заданный список столбцов определённой таблицы.

sp_depends здесь не подходит, т.к. она работает только в рамках одной базы данных да и передать ей можно только один столбец.

Я написал запрос к таблицам syscomments и sysobjects.
Вопрос - насколько исчерпывающая информация содержится в syscomments и достаточно ли подобного запроса для решения такой задачи?
См примерный текст запроса ниже.

Заранее благодарен за ответ. Надеюсь, что есть люди с опытом решения подобных задачек.

Запрос:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
use pubs2
go

select o.name, sc1.text as txt_with_table_name, sc.text as txt_with_col_names
from sysobjects o 
inner join syscomments sc
on o.id = sc.id
inner join syscomments sc1
on o.id = sc1.id 
where (sc.text like '%au_id%' )
and sc1.text like '%authors%'
order by o.name, sc.colid
go
...
Рейтинг: 0 / 0
зависимые объекты
    #34855332
Kru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл указать сервер: ASE 12.5
...
Рейтинг: 0 / 0
зависимые объекты
    #34855404
Фотография Zhora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBartisan -> Tools-> Database Search
...
Рейтинг: 0 / 0
зависимые объекты
    #34855441
Kru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZhoraDBartisan -> Tools-> Database Search

У меня под рукой Артизана нет, не могу посмотреть как Database Search работает...
Но мой вопрос - насколько правильно использовать syscomments для поиска зависимых объектов (процедур, триггеров и вьюх)

Откуда собственно вопрос: есть очень старая система с несколькими базами данных с процедурами, триггерами, вьюхами которые работают с данными из разных баз.
Сверху приходит директива - разбить одну из таблиц на 2 и соотв. перенести чать столобцов в новую таблицу.

Понятно, что нужно "отловить" и "переключить" на новую таблицу все объекты которые ссылаются на переносимые столбцы, иначе все они не будут работать.

Я не нашел пока ничего лучшего кроме syscomments для решения задачи.

Мне интересно мнение и советы уважаемых коллег насчет правильности использования syscomments для подобных ситуаций.
Если у кого-нибудь был "боевой" опыт, то было бы интересно узнать

Заранее всем спасибо
...
Рейтинг: 0 / 0
зависимые объекты
    #34855557
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kru пишет:
> Я написал запрос к таблицам syscomments и sysobjects.
> Вопрос - насколько исчерпывающая информация содержится в syscomments и
> достаточно ли подобного запроса для решения такой задачи?

Нет, не достаточно. Дело в том, что в syscomments лежат
КУСКИ текстов процедур и триггеров (по 256 символов).
И вот эти вот LIKE

> where (sc.text like '%au_id%' )
> and sc1.text like '%authors%'

тебе просто не будут находить объекты, если в syscomments
текст разложен так, что "au_id" приходится на границу куска
текста. Например, "au_" находится в предыдущем куске, а "id" -
в следующем.

Т.е. тут как - объекты, которые такой запрос выдаст ,
будут зависеть от нужных объектов, но это не будет
гарантированно список всех таких объектов.

Так что нормальных вариантов решения тут только

-- полагаться на sysdepends
-- вываливать все тексты (лучше пообъектно) и искать текстуально
-- если есть FULL TEXT SEARCH - завалить это все добро туда и
построить полнотекстовый индекс.

Кстати, по идее можно было бы использовать внешний full text indexer
типа SPHINX. Но не пробовал. Мы короче всегда шли по пути (1) и (2).
Но у нас была одна база. Кстати, чего и вам желаю.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
зависимые объекты
    #34855563
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kru пишет:

> Откуда собственно вопрос: есть очень старая система с несколькими базами
> данных с процедурами, триггерами, вьюхами которые работают с данными из
> разных баз.
> Сверху приходит директива - разбить одну из таблиц на 2 и соотв.
> перенести чать столобцов в новую таблицу.

Зачем ?


> Понятно, что нужно "отловить" и "переключить" на новую таблицу все
> объекты которые ссылаются на переносимые столбцы, иначе все они не будут
> работать.

Ну тут на самом деле еще проще можно сделать.
Сливаешь по sysdepends все зависимые компилируемые объекты, меняешь таблицу,
заливаешь объекты обратно. Переливать объекты надо будет все равно по-любому,
поэтому труд не лишний. Все объекты, которые НЕ ЗАЛИЛИСЬ, зависят от
изменения и подлежать переписыванию.

Если нет возможности сливать по sysdepends - сливай и перезаливай тупо все.
Ну что ж делать-то, если сами себе вырыли яму ...
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
зависимые объекты
    #34855980
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv

Так что нормальных вариантов решения тут только

-- полагаться на sysdepends
-- вываливать все тексты (лучше пообъектно) и искать текстуально

sysdepends не панацея, использовать не советовал бы (см. скрипт)
второй вариант самый оптимальный, либо без выливки искать по исходникам объектов (они же должны у вас быть )

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
use tempdb
go
create table a (i int)
go
create proc b as select * from a
go
select 'correct dependancy',object_name(id),object_name(depid),* from sysdepends 
go
drop table a
go
select 'deleted table',object_name(id),object_name(depid),* from sysdepends 
go
create table a (i int)
go
select 'recreated table', object_name(id),object_name(depid),* from sysdepends 
go
drop table a
go
drop proc b
go
...
Рейтинг: 0 / 0
зависимые объекты
    #34856074
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
komrad пишет:
> -- полагаться на sysdepends
> sysdepends не панацея, использовать не советовал бы (см. скрипт)

Как раз это - самый нормальный вариант.

> create proc b as select * from a
> drop table a
> create table a (i int)
> select 'recreated table', object_name(id),object_name(depid),* from sysdepends

После пересоздания или изменения объекта ты должен (согласно документации)
пересоздать все зависимые компилируемые объекты, если ты этого не сделаешь,
то проблемы могут быть не только с отсутствием записей в sysdepends,
но и серьезнее. А если ты это делаешь все равно, то
sysdepends всегда работает.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
зависимые объекты
    #34856667
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
После пересоздания или изменения объекта ты должен (согласно документации)
пересоздать все зависимые компилируемые объекты, если ты этого не сделаешь,
то проблемы могут быть не только с отсутствием записей в sysdepends,
но и серьезнее. А если ты это делаешь все равно, то
sysdepends всегда работает.
Posted via ActualForum NNTP Server 1.4
за меня можно не волноваться, а вот делает ли это автор?
...
Рейтинг: 0 / 0
зависимые объекты
    #34856809
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не скажу что хороший запрос но работает.
в данном случае при условии что искомый текст не длиннее 100 символов:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
declare @text varchar( 100 )
select @text        = "%fff%"

select distinct o.id, o.name object, o.type
from sysobjects o,
	syscomments c
where o.id=c.id
and (c.text like @text
or	exists(
	select  1  from syscomments c2 
		where c.id=c2.id 
		and c.colid+ 1 =c2.colid 
		and right(c.text, 100 )+ substring(c2.text,  1 ,  100 ) like @text 
	)
)
order by  1 
...
Рейтинг: 0 / 0
зависимые объекты
    #34857731
Kru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Izvinyaus, na rabote net russkogo

MasterZiv
Нет, не достаточно. Дело в том, что в syscomments лежат
КУСКИ текстов процедур и триггеров (по 256 символов).
И вот эти вот LIKE

> where (sc.text like '%au_id%' )
> and sc1.text like '%authors%'

тебе просто не будут находить объекты, если в syscomments
текст разложен так, что "au_id" приходится на границу куска
текста. Например, "au_" находится в предыдущем куске, а "id" -
в следующем.


Т.е. тут как - объекты, которые такой запрос выдаст ,
будут зависеть от нужных объектов, но это не будет
гарантированно список всех таких объектов.


S etim polnostiy soglasen

MasterZiv

Так что нормальных вариантов решения тут только

-- полагаться на sysdepends



sysdepends rabotaet tolko dlya objectov svouei bazi

use database_1
go
create table test_a (a int)
go
use database_2
go
create procedure test_proc as select * from database_1..a
go

select count(1) from sysdepends where id = object_id('database_1..a')
result = 0
select count(1) from syscomments where text like '%database_1..a%'
result 1 row


MasterZiv
-- вываливать все тексты (лучше пообъектно) и искать текстуально
-- если есть FULL TEXT SEARCH - завалить это все добро туда и
построить полнотекстовый индекс.

Кстати, по идее можно было бы использовать внешний full text indexer
типа SPHINX. Но не пробовал. Мы короче всегда шли по пути (1) и (2).
Но у нас была одна база. Кстати, чего и вам желаю.
Posted via ActualForum NNTP Server 1.4

Vivalit vse texti i iskat v nikh sposob verniy no nuzen tool tipa PowerDesigner. U menya ego net. Nichego poka krome DBArtisan net : -(

Poka ostaetsa syscomments. Naprimer variant predlozenny Dmitry

Dmitry.не скажу что хороший запрос но работает.
в данном случае при условии что искомый текст не длиннее 100 символов:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
declare @text varchar( 100 )
select @text        = "%fff%"

select distinct o.id, o.name object, o.type
from sysobjects o,
	syscomments c
where o.id=c.id
and (c.text like @text
or	exists(
	select  1  from syscomments c2 
		where c.id=c2.id 
		and c.colid+ 1 =c2.colid 
		and right(c.text, 100 )+ substring(c2.text,  1 ,  100 ) like @text 
	)
)
order by  1 
...
Рейтинг: 0 / 0
зависимые объекты
    #34858046
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kru пишет:
> sysdepends rabotaet tolko dlya objectov svouei bazi

Безусловно !

> Vivalit vse texti i iskat v nikh sposob verniy no nuzen tool tipa
> PowerDesigner.

Не нужен. defncopy + grep.
defncopy, если кто не знает, стандартная утилита.


> Poka ostaetsa syscomments. Naprimer variant predlozenny Dmitry

Никакой вариант там не будет работать на 100%.
В этом вся и проблема.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
зависимые объекты
    #34858070
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kru пишет:

> не скажу что хороший запрос но работает.
> в данном случае при условии что искомый текст не длиннее 100 символов:


А кстати на счет "никакой вариант не будет работать" я и не прав.
Если написать запрос типа

join syscomments txt on ...
join syscomments txtn on <типа следующий кусок текста>

where ( txt.text like '%author%'
or txt.text like '%autho' and txtn.text like 'r%'
or txt.text like '%auth' and txtn.text like 'or%'
or txt.text like '%aut' and txtn.text like 'hor%'
or txt.text like '%au' and txtn.text like 'thor%'
or txt.text like '%a' and txtn.text like 'uthor%' )

то вполне себе будет работать (медленно, но и те-то запросы
небыстры). Но этот запрос надо генерировать.
Руками замучаешься каждый раз писать такое.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
зависимые объекты
    #34858113
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kru
Vivalit vse texti i iskat v nikh sposob verniy no nuzen tool tipa PowerDesigner. U menya ego net. Nichego poka krome DBArtisan net : -(



Коллега, в Артизане есть фича под названием "экстракт" - все объекты одного типа выдираются в два щелчка мыши!
заскриптовать необходимые объекты у Вас займет от силы 5 минут!
...
Рейтинг: 0 / 0
зависимые объекты
    #34858451
Фотография Zhora
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kru ZhoraDBartisan -> Tools-> Database Search

У меня под рукой Артизана нет
Заранее всем спасибо
Скачайте с www.embarcadero.com trial version (14 days), заодно посмотрите
что он генерит...
...
Рейтинг: 0 / 0
зависимые объекты
    #34858594
Kru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
komrad Kru
Vivalit vse texti i iskat v nikh sposob verniy no nuzen tool tipa PowerDesigner. U menya ego net. Nichego poka krome DBArtisan net : -(



Коллега, в Артизане есть фича под названием "экстракт" - все объекты одного типа выдираются в два щелчка мыши!
заскриптовать необходимые объекты у Вас займет от силы 5 минут!

Nashel, Spasibo
...
Рейтинг: 0 / 0
зависимые объекты
    #35292067
YVG19
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А нет ли в Артизане такой фичи чтоб выгрузить например процедуры с зависимыми таблицами временными?....
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / зависимые объекты
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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