|
|
|
зависимые объекты
|
|||
|---|---|---|---|
|
#18+
Всем добрый день! На днях возникла задачка вывести список всех объектов (хранимки, триггеры, вьюхи) на сервере которые используют заданный список столбцов определённой таблицы. sp_depends здесь не подходит, т.к. она работает только в рамках одной базы данных да и передать ей можно только один столбец. Я написал запрос к таблицам syscomments и sysobjects. Вопрос - насколько исчерпывающая информация содержится в syscomments и достаточно ли подобного запроса для решения такой задачи? См примерный текст запроса ниже. Заранее благодарен за ответ. Надеюсь, что есть люди с опытом решения подобных задачек. Запрос: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2007, 22:29 |
|
||
|
зависимые объекты
|
|||
|---|---|---|---|
|
#18+
Забыл указать сервер: ASE 12.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2007, 22:32 |
|
||
|
зависимые объекты
|
|||
|---|---|---|---|
|
#18+
DBartisan -> Tools-> Database Search ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2007, 00:25 |
|
||
|
зависимые объекты
|
|||
|---|---|---|---|
|
#18+
ZhoraDBartisan -> Tools-> Database Search У меня под рукой Артизана нет, не могу посмотреть как Database Search работает... Но мой вопрос - насколько правильно использовать syscomments для поиска зависимых объектов (процедур, триггеров и вьюх) Откуда собственно вопрос: есть очень старая система с несколькими базами данных с процедурами, триггерами, вьюхами которые работают с данными из разных баз. Сверху приходит директива - разбить одну из таблиц на 2 и соотв. перенести чать столобцов в новую таблицу. Понятно, что нужно "отловить" и "переключить" на новую таблицу все объекты которые ссылаются на переносимые столбцы, иначе все они не будут работать. Я не нашел пока ничего лучшего кроме syscomments для решения задачи. Мне интересно мнение и советы уважаемых коллег насчет правильности использования syscomments для подобных ситуаций. Если у кого-нибудь был "боевой" опыт, то было бы интересно узнать Заранее всем спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2007, 01:34 |
|
||
|
зависимые объекты
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2007, 07:29 |
|
||
|
зависимые объекты
|
|||
|---|---|---|---|
|
#18+
Kru пишет: > Откуда собственно вопрос: есть очень старая система с несколькими базами > данных с процедурами, триггерами, вьюхами которые работают с данными из > разных баз. > Сверху приходит директива - разбить одну из таблиц на 2 и соотв. > перенести чать столобцов в новую таблицу. Зачем ? > Понятно, что нужно "отловить" и "переключить" на новую таблицу все > объекты которые ссылаются на переносимые столбцы, иначе все они не будут > работать. Ну тут на самом деле еще проще можно сделать. Сливаешь по sysdepends все зависимые компилируемые объекты, меняешь таблицу, заливаешь объекты обратно. Переливать объекты надо будет все равно по-любому, поэтому труд не лишний. Все объекты, которые НЕ ЗАЛИЛИСЬ, зависят от изменения и подлежать переписыванию. Если нет возможности сливать по sysdepends - сливай и перезаливай тупо все. Ну что ж делать-то, если сами себе вырыли яму ... Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2007, 07:33 |
|
||
|
зависимые объекты
|
|||
|---|---|---|---|
|
#18+
MasterZiv Так что нормальных вариантов решения тут только -- полагаться на sysdepends -- вываливать все тексты (лучше пообъектно) и искать текстуально sysdepends не панацея, использовать не советовал бы (см. скрипт) второй вариант самый оптимальный, либо без выливки искать по исходникам объектов (они же должны у вас быть ) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2007, 10:55 |
|
||
|
зависимые объекты
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2007, 11:20 |
|
||
|
зависимые объекты
|
|||
|---|---|---|---|
|
#18+
MasterZiv После пересоздания или изменения объекта ты должен (согласно документации) пересоздать все зависимые компилируемые объекты, если ты этого не сделаешь, то проблемы могут быть не только с отсутствием записей в sysdepends, но и серьезнее. А если ты это делаешь все равно, то sysdepends всегда работает. Posted via ActualForum NNTP Server 1.4 за меня можно не волноваться, а вот делает ли это автор? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2007, 13:26 |
|
||
|
зависимые объекты
|
|||
|---|---|---|---|
|
#18+
не скажу что хороший запрос но работает. в данном случае при условии что искомый текст не длиннее 100 символов: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2007, 13:55 |
|
||
|
зависимые объекты
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2007, 17:02 |
|
||
|
зависимые объекты
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2007, 18:17 |
|
||
|
зависимые объекты
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2007, 18:22 |
|
||
|
зависимые объекты
|
|||
|---|---|---|---|
|
#18+
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 минут! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2007, 18:32 |
|
||
|
зависимые объекты
|
|||
|---|---|---|---|
|
#18+
Kru ZhoraDBartisan -> Tools-> Database Search У меня под рукой Артизана нет Заранее всем спасибо Скачайте с www.embarcadero.com trial version (14 days), заодно посмотрите что он генерит... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2007, 21:33 |
|
||
|
зависимые объекты
|
|||
|---|---|---|---|
|
#18+
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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2007, 22:47 |
|
||
|
|

start [/forum/topic.php?fid=55&fpage=52&tid=2011595]: |
0ms |
get settings: |
12ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
43ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
47ms |
get tp. blocked users: |
2ms |
| others: | 209ms |
| total: | 351ms |

| 0 / 0 |
