Обновление структуры БД
Обновление структуры БД
Приветствую всех, уважаемые!
Требуется программно получить структуру БД(таблицы, индексы, процедуры, ... ) для ее ее последующего сравнения с эталоном.
Ваши соображения на этот счет?
Заранее спасибо.
Требуется программно получить структуру БД(таблицы, индексы, процедуры, ... ) для ее ее последующего сравнения с эталоном.
Ваши соображения на этот счет?
Заранее спасибо.
dbcomparer. Еще немного, и я начну свирепствовать, просто удаляя подобные топики без объяснений. На www.ibase.ru сейчас есть прямо "программа", которой надо следовать при возникновении вопросов.
И между прочим, поиск по "сравнение с эталонной" выдает совершенно однозначную ссылку.
И между прочим, поиск по "сравнение с эталонной" выдает совершенно однозначную ссылку.
Уважаемый модератор!
Возможно вы неправильно поняли суть вопроса.
Про 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
но это только для полей таблиц. интересуют тригеры, хранимые процедуры и т.д....
Возможно вы неправильно поняли суть вопроса.
Про 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
но это только для полей таблиц. интересуют тригеры, хранимые процедуры и т.д....
из своей программы можно получить скрипт компонентом IBX - IBExtract. это тоже не секрет, компонент входит в поставку IBX/Delphi уже года два...
dbcomparer тоже может вынуть скрипт из БД сам. еще скрипты вынимаются из БД isql-ом и IBEScript.
из второго письма задача тоже не ясна. Зачем в программе вынимать скрипт, если это можно сделать внешними средствами, которые можно ЗАПУСТИТЬ из программы? Или это задача самому написать DBComparer?
dbcomparer тоже может вынуть скрипт из БД сам. еще скрипты вынимаются из БД isql-ом и IBEScript.
из второго письма задача тоже не ясна. Зачем в программе вынимать скрипт, если это можно сделать внешними средствами, которые можно ЗАПУСТИТЬ из программы? Или это задача самому написать DBComparer?
IBX - IBExtract - не по глазам был(использую FIBPlus, но там похожего не нашел, а объеденять не очень охото, но если это крайний вариант...)kdv писал(а):из своей программы можно получить скрипт компонентом IBX - IBExtract. это тоже не секрет, компонент входит в поставку IBX/Delphi уже года два...
dbcomparer тоже может вынуть скрипт из БД сам. еще скрипты вынимаются из БД isql-ом и IBEScript.
из второго письма задача тоже не ясна. Зачем в программе вынимать скрипт, если это можно сделать внешними средствами, которые можно ЗАПУСТИТЬ из программы? Или это задача самому написать DBComparer?
Наверно задача ближе у написанию Comparer'а. или я в корне не прав. Использование внешних программ осложняется тем фактом, что клиенты находятся не в соседнем кабинете, а в другом городе. В идеале хочется апдейтить удаленно. В программу встроено выполнение скриптов SQL ддля модификации структуры БД. Неприятность в том, что все мы люди(значит ошибаемся). Следовательно не все скрипты бывают переданы клиенту, или клиент сам не помнит чего он выполнял и выполнял ли вообще. Как быть в таком случае?
IBX - IBExtract - не по глазам был(использую FIBPlus, но там похожего не нашел, а объеденять не очень охото, но если это крайний вариант...)
Наверно задача ближе у написанию Comparer'а. или я в корне не прав. Использование внешних программ осложняется тем фактом, что клиенты находятся не в соседнем кабинете, а в другом городе. В идеале хочется апдейтить удаленно. В программу встроено выполнение скриптов SQL ддля модификации структуры БД. Неприятность в том, что все мы люди(значит ошибаемся). Следовательно не все скрипты бывают переданы клиенту, или клиент сам не помнит чего он выполнял и выполнял ли вообще. Как быть в таком случае?
Наверно задача ближе у написанию Comparer'а. или я в корне не прав. Использование внешних программ осложняется тем фактом, что клиенты находятся не в соседнем кабинете, а в другом городе. В идеале хочется апдейтить удаленно. В программу встроено выполнение скриптов SQL ддля модификации структуры БД. Неприятность в том, что все мы люди(значит ошибаемся). Следовательно не все скрипты бывают переданы клиенту, или клиент сам не помнит чего он выполнял и выполнял ли вообще. Как быть в таком случае?
в FIBPlus тоже есть свой IBExtract.
Рекомендую (и будет вообще дешевле) купить DBComparer Components, причем тебе придется покупать именно Site License.
в этом случае ты предоставлен сам себе. структура системных таблиц известна...Наверно задача ближе у написанию Comparer'а.
IBExpert пользуется DBComparer-ом как plugin-ом. то есть dll-кой, у которой разумеется есть интерфейсы. Лепить свое - в корне неверно, т.к. Борис начал делать компарер даже не год назад, так что можешь себе представить сколько это у тебя займет, если ты только "подошел к снаряду".или я в корне не прав. Использование внешних программ осложняется тем фактом, что клиенты находятся не в соседнем кабинете, а в другом городе. В идеале хочется апдейтить удаленно. В программу встроено выполнение скриптов SQL ддля модификации структуры БД.
Рекомендую (и будет вообще дешевле) купить DBComparer Components, причем тебе придется покупать именно Site License.
я не вижу различия между обновлением твоей программой или dbcomparer-ом (в том или ином виде). Описываемые проблемы будут и там и тут. Тебе все равно придется вести в метаданных отслеживание версий, даже для DBComparer.Неприятность в том, что все мы люди(значит ошибаемся). Следовательно не все скрипты бывают переданы клиенту, или клиент сам не помнит чего он выполнял и выполнял ли вообще. Как быть в таком случае?
Наверное лучше попытаться помочь с проблемой вопрошающегоkdv писал(а):Еще немного, и я начну свирепствовать, просто удаляя подобные топики без объяснений.
Зачем использовать внешние средства, если можно то же сделать в программе?kdv писал(а):Зачем в программе вынимать скрипт, если это можно сделать внешними средствами, которые можно ЗАПУСТИТЬ из программы? Или это задача самому написать DBComparer?
DBComparer - рулез фарэва, но не всегда можно решить проблему стандартными средствами.
Практически во всех изветсных мне СУБД существуют встроенные средства для получения структуры. Обычно это системные вьюхи. Отсутствие их в IB/FB - недостаток. Наверное, руки не доходят у разработчиков.
Я когда - то решал подобную проблему и выставляю запросы на изъятие DDL (дело было давно. Наверное использовать их как есть нельзя):
ExtractStructure.rar
to oz: про IBExtract я уже написал (и в IBX и в FIBPlus). Писать собственный компарер - да пожалуйста, флаг в руки.
насчет встроенных средств вытаскивания структуры - вид этой самой структуры может быть совершенно разным. Если надо оригинальный DDL, то я не понимаю, какая религия раньше не позволяла использовать isql, а сейчас - не позволяет использовать IBExtract, который к тому же еще и в исходных кодах.
Да, например IBPump получает информацию о зависимых таблицах. Но он делает это сам, запросом к системным таблицам. Ему структура таблиц в виде DDL не нужна.
В общем, отказ от штатных или альтернативных средств - это личное дело каждого.
насчет встроенных средств вытаскивания структуры - вид этой самой структуры может быть совершенно разным. Если надо оригинальный DDL, то я не понимаю, какая религия раньше не позволяла использовать isql, а сейчас - не позволяет использовать IBExtract, который к тому же еще и в исходных кодах.
Да, например IBPump получает информацию о зависимых таблицах. Но он делает это сам, запросом к системным таблицам. Ему структура таблиц в виде DDL не нужна.
В общем, отказ от штатных или альтернативных средств - это личное дело каждого.
to Oz: Огромное человеческое спасибо!!!
кок и предполагалось пример сходу не заработал(грабли с CASE ... WHEN. я использую IB 6, атам такого нет
хотя зря. удобная штука), но это не беда. Подправлю.
В нагрузку хотелось бы узнать ваше мнение по поводу обновления БД (с изменением структуры) на которой уже "поработали".
кок и предполагалось пример сходу не заработал(грабли с CASE ... WHEN. я использую IB 6, атам такого нет

В нагрузку хотелось бы узнать ваше мнение по поводу обновления БД (с изменением структуры) на которой уже "поработали".
Уважиемый модератор!kdv писал(а):"использую IB6" - это конечно круто. круто использовать сервер, которому скоро 5 лет стукнет, в котором глюки, которые никто уже не будет исправлять. который нормально не работает под Win2003, и т.п.
это уже называется оффтоп...
...
Зачем же сразу мордой в грязь?
...
почему это оффтоп??? да на каждом столбе уже 3 года висит табличка - "ПЕРЕСТАНЬТЕ ИСПОЛЬЗОВАТЬ IB6!!! ПЕРЕХОДИТЕ НА БОЛЕЕ СВЕЖИЕ ВЕРСИИ IB или FB!!!".
и ты еще этими руками собираешься РАСПРОСТРАНЯТЬ клиентам IB 6.0? И ты еще собираешься применять какие-то скрипты для модификации структур баз?
Ты же на sql.ru бываешь, там это тоже в faq написано.
http://www.sql.ru/faq/faq_topic.aspx?fid=263
и ты еще этими руками собираешься РАСПРОСТРАНЯТЬ клиентам IB 6.0? И ты еще собираешься применять какие-то скрипты для модификации структур баз?
Ты же на sql.ru бываешь, там это тоже в faq написано.
http://www.sql.ru/faq/faq_topic.aspx?fid=263