Обновление структуры БД

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Plumbum
Сообщения: 10
Зарегистрирован: 31 янв 2005, 10:48

Обновление структуры БД

Сообщение Plumbum » 31 янв 2005, 11:09

Приветствую всех, уважаемые!

Требуется программно получить структуру БД(таблицы, индексы, процедуры, ... ) для ее ее последующего сравнения с эталоном.

Ваши соображения на этот счет?
Заранее спасибо.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 31 янв 2005, 11:29

dbcomparer. Еще немного, и я начну свирепствовать, просто удаляя подобные топики без объяснений. На www.ibase.ru сейчас есть прямо "программа", которой надо следовать при возникновении вопросов.
И между прочим, поиск по "сравнение с эталонной" выдает совершенно однозначную ссылку.

Plumbum
Сообщения: 10
Зарегистрирован: 31 янв 2005, 10:48

Сообщение Plumbum » 31 янв 2005, 13:21

Уважаемый модератор!

Возможно вы неправильно поняли суть вопроса.
Про DBComparer я знаю и пользуюсь им.
Идея состоит в том, чтобы из своей программы получить структуру БД.

Т.е. запускается моя программа, коннектится к БД и САМА сравнивает имеющуюся структуру с заданной.

В другой формулировке звучит так(только чур не пинать ногами за неправильный подход к проектированию задачи): отдали клиету программу и базу. она проработала определенное время. и вот настал чудный момент обновления программы и возможно структуры БД с которой работает программа.

На сайте нашел

select R.RDB$RELATION_NAME, R.RDB$FIELD_POSITION, R.RDB$FIELD_NAME, F.RDB$FIELD_LENGTH, F.RDB$FIELD_TYPE, F.RDB$FIELD_SCALE, F.RDB$FIELD_SUB_TYPE
from RDB$FIELDS F, RDB$RELATION_FIELDS R
where F.RDB$FIELD_NAME = R.RDB$FIELD_SOURCE and R.RDB$SYSTEM_FLAG = 0
order by R.RDB$RELATION_NAME, R.RDB$FIELD_POSITION

но это только для полей таблиц. интересуют тригеры, хранимые процедуры и т.д....

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 31 янв 2005, 13:46

из своей программы можно получить скрипт компонентом IBX - IBExtract. это тоже не секрет, компонент входит в поставку IBX/Delphi уже года два...

dbcomparer тоже может вынуть скрипт из БД сам. еще скрипты вынимаются из БД isql-ом и IBEScript.

из второго письма задача тоже не ясна. Зачем в программе вынимать скрипт, если это можно сделать внешними средствами, которые можно ЗАПУСТИТЬ из программы? Или это задача самому написать DBComparer?

Plumbum
Сообщения: 10
Зарегистрирован: 31 янв 2005, 10:48

Сообщение Plumbum » 31 янв 2005, 14:14

kdv писал(а):из своей программы можно получить скрипт компонентом IBX - IBExtract. это тоже не секрет, компонент входит в поставку IBX/Delphi уже года два...

dbcomparer тоже может вынуть скрипт из БД сам. еще скрипты вынимаются из БД isql-ом и IBEScript.

из второго письма задача тоже не ясна. Зачем в программе вынимать скрипт, если это можно сделать внешними средствами, которые можно ЗАПУСТИТЬ из программы? Или это задача самому написать DBComparer?
IBX - IBExtract - не по глазам был(использую FIBPlus, но там похожего не нашел, а объеденять не очень охото, но если это крайний вариант...)

Наверно задача ближе у написанию Comparer'а. или я в корне не прав. Использование внешних программ осложняется тем фактом, что клиенты находятся не в соседнем кабинете, а в другом городе. В идеале хочется апдейтить удаленно. В программу встроено выполнение скриптов SQL ддля модификации структуры БД. Неприятность в том, что все мы люди(значит ошибаемся). Следовательно не все скрипты бывают переданы клиенту, или клиент сам не помнит чего он выполнял и выполнял ли вообще. Как быть в таком случае?

Plumbum
Сообщения: 10
Зарегистрирован: 31 янв 2005, 10:48

Сообщение Plumbum » 31 янв 2005, 14:14

IBX - IBExtract - не по глазам был(использую FIBPlus, но там похожего не нашел, а объеденять не очень охото, но если это крайний вариант...)

Наверно задача ближе у написанию Comparer'а. или я в корне не прав. Использование внешних программ осложняется тем фактом, что клиенты находятся не в соседнем кабинете, а в другом городе. В идеале хочется апдейтить удаленно. В программу встроено выполнение скриптов SQL ддля модификации структуры БД. Неприятность в том, что все мы люди(значит ошибаемся). Следовательно не все скрипты бывают переданы клиенту, или клиент сам не помнит чего он выполнял и выполнял ли вообще. Как быть в таком случае?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 31 янв 2005, 14:49

в FIBPlus тоже есть свой IBExtract.
Наверно задача ближе у написанию Comparer'а.
в этом случае ты предоставлен сам себе. структура системных таблиц известна...
или я в корне не прав. Использование внешних программ осложняется тем фактом, что клиенты находятся не в соседнем кабинете, а в другом городе. В идеале хочется апдейтить удаленно. В программу встроено выполнение скриптов SQL ддля модификации структуры БД.
IBExpert пользуется DBComparer-ом как plugin-ом. то есть dll-кой, у которой разумеется есть интерфейсы. Лепить свое - в корне неверно, т.к. Борис начал делать компарер даже не год назад, так что можешь себе представить сколько это у тебя займет, если ты только "подошел к снаряду".

Рекомендую (и будет вообще дешевле) купить DBComparer Components, причем тебе придется покупать именно Site License.
Неприятность в том, что все мы люди(значит ошибаемся). Следовательно не все скрипты бывают переданы клиенту, или клиент сам не помнит чего он выполнял и выполнял ли вообще. Как быть в таком случае?
я не вижу различия между обновлением твоей программой или dbcomparer-ом (в том или ином виде). Описываемые проблемы будут и там и тут. Тебе все равно придется вести в метаданных отслеживание версий, даже для DBComparer.

oz
Сообщения: 1
Зарегистрирован: 25 янв 2005, 21:07

Сообщение oz » 31 янв 2005, 18:28

kdv писал(а):Еще немного, и я начну свирепствовать, просто удаляя подобные топики без объяснений.
Наверное лучше попытаться помочь с проблемой вопрошающего
kdv писал(а):Зачем в программе вынимать скрипт, если это можно сделать внешними средствами, которые можно ЗАПУСТИТЬ из программы? Или это задача самому написать DBComparer?
Зачем использовать внешние средства, если можно то же сделать в программе?
DBComparer - рулез фарэва, но не всегда можно решить проблему стандартными средствами.
Практически во всех изветсных мне СУБД существуют встроенные средства для получения структуры. Обычно это системные вьюхи. Отсутствие их в IB/FB - недостаток. Наверное, руки не доходят у разработчиков.
Я когда - то решал подобную проблему и выставляю запросы на изъятие DDL (дело было давно. Наверное использовать их как есть нельзя):
ExtractStructure.rar

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 31 янв 2005, 18:41

to oz: про IBExtract я уже написал (и в IBX и в FIBPlus). Писать собственный компарер - да пожалуйста, флаг в руки.
насчет встроенных средств вытаскивания структуры - вид этой самой структуры может быть совершенно разным. Если надо оригинальный DDL, то я не понимаю, какая религия раньше не позволяла использовать isql, а сейчас - не позволяет использовать IBExtract, который к тому же еще и в исходных кодах.

Да, например IBPump получает информацию о зависимых таблицах. Но он делает это сам, запросом к системным таблицам. Ему структура таблиц в виде DDL не нужна.

В общем, отказ от штатных или альтернативных средств - это личное дело каждого.

Plumbum
Сообщения: 10
Зарегистрирован: 31 янв 2005, 10:48

Сообщение Plumbum » 01 фев 2005, 11:00

to Oz: Огромное человеческое спасибо!!!
кок и предполагалось пример сходу не заработал(грабли с CASE ... WHEN. я использую IB 6, атам такого нет :( хотя зря. удобная штука), но это не беда. Подправлю.
В нагрузку хотелось бы узнать ваше мнение по поводу обновления БД (с изменением структуры) на которой уже "поработали".

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 01 фев 2005, 11:05

"использую IB6" - это конечно круто. круто использовать сервер, которому скоро 5 лет стукнет, в котором глюки, которые никто уже не будет исправлять. который нормально не работает под Win2003, и т.п.

Plumbum
Сообщения: 10
Зарегистрирован: 31 янв 2005, 10:48

Сообщение Plumbum » 02 фев 2005, 10:07

kdv писал(а):"использую IB6" - это конечно круто. круто использовать сервер, которому скоро 5 лет стукнет, в котором глюки, которые никто уже не будет исправлять. который нормально не работает под Win2003, и т.п.
Уважиемый модератор!
это уже называется оффтоп...

...
Зачем же сразу мордой в грязь?
...

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 02 фев 2005, 11:32

почему это оффтоп??? да на каждом столбе уже 3 года висит табличка - "ПЕРЕСТАНЬТЕ ИСПОЛЬЗОВАТЬ IB6!!! ПЕРЕХОДИТЕ НА БОЛЕЕ СВЕЖИЕ ВЕРСИИ IB или FB!!!".

и ты еще этими руками собираешься РАСПРОСТРАНЯТЬ клиентам IB 6.0? И ты еще собираешься применять какие-то скрипты для модификации структур баз?

Ты же на sql.ru бываешь, там это тоже в faq написано.
http://www.sql.ru/faq/faq_topic.aspx?fid=263

Ответить