powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Отслеживание изменений структуры БД
23 сообщений из 23, страница 1 из 1
Отслеживание изменений структуры БД
    #36058545
the_flow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!

В процессе разработки ПО, мы несколько раз в неделю вносим изменения в структуру девелоперской базы (новые таблицы, поля). Раз в неделю производим синхронизацию структуры рабочей базы (SQL Server 2005, MSVS 2008) с девелоперской.

Расскажите, как решаете проблему синхронизации? Какие инструменты для отслеживания измений в структуре используете.

Заранее спасибо.
...
Рейтинг: 0 / 0
Отслеживание изменений структуры БД
    #36058594
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А не надо грязными руками лазить в базы. Даже в девелоперские :)

У нас заведено правило - любые модификации структуры базы исключительно только через документированные скрипты. Боевых баз с одинаковой структурой больше десятка. Есть собственная системка контроля модификаций, в которой ведутся сами модифицирующие скрипты, а также информация о том, к каким базам они приложены. Пришли к такой схеме не сразу, но она оказалась самой надежной, удобной и жизнеспособной. До этого были разные варианты: скрипты баз в системе контроля версий, сравнение и модификация средствами типа Power Designer и т.п. Ни в коей мере не умаляя полезность этих инструментов, они для данной задачи были признаны непригодными, когда сложность базы и количество боевых инсталляций превысили какой-то предел.
...
Рейтинг: 0 / 0
Отслеживание изменений структуры БД
    #36058748
the_flow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Александр Гoлдун,

Спасибо за совет.
Сейчас у нас одна база и поэтому мы начнём с Power Designer + скрипты в системе контроля версий.
...
Рейтинг: 0 / 0
Отслеживание изменений структуры БД
    #36058906
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр ГoлдунДо этого были разные варианты: скрипты баз в системе контроля версий, сравнение и модификация средствами типа Power Designer и т.п. Ни в коей мере не умаляя полезность этих инструментов, они для данной задачи были признаны непригодными, когда сложность базы и количество боевых инсталляций превысили какой-то предел.
А может Вы просто "не умели готовить" ? ;) IMHO PD хватит и на сложные базы и кол-во боевых инсталляций, при условии что используется репозиторий, все изменения схемы БД производятся в нем и есть понимание того, как можно облегчить и автоматизировать свой труд (template, скриптовый язык и т.д.).
...
Рейтинг: 0 / 0
Отслеживание изменений структуры БД
    #36058960
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSА может Вы просто "не умели готовить" ? ;) IMHO PD хватит и на сложные базы и кол-во боевых инсталляций, при условии что используется репозиторий, все изменения схемы БД производятся в нем и есть понимание того, как можно облегчить и автоматизировать свой труд (template, скриптовый язык и т.д.).
Вот до изучения скриптовых наворотов не дошли, ибо нет у нас выделенного инструментально-методического отдела, чтобы придумывать, как же приспособить вот эту штуку под вот те задачи. А вообще опыт работы с PD достаточно большой. И репозиторием тоже активно пользовались.

Шли от задачи. И уж поверь, но написать отдельную софтину именно для того, что нам нужно, оказалось гораздо более оптимальным вариантом, чем выкручиваться и приспосабливать то, что где-то есть.

Задача ведь стояла не просто тупо прикладывать все изменения из девелоперской базы в боевые. Нужен гибкий и детальный контроль этих самых изменений. Некоторые изменения можно прикладывать только при определенных условиях, и эти условия описываются в системе. Этими условиями могут быть и изменение определенных модулей клиентской части, и выполнение какой-либо работы над данными, причем зачастую ручной. Некоторые такие изменения по некоторым базам приходится держать очень долго неприложенными, в то время как к другим базам все давно приложено, и другие изменения к этой базе тоже прикладываются. Отследить это штатными средствами PD малореально.

А инструмент, который мы сделали - очень простейший. Это по сути таблица SQL-скриптов. С датами, пояснениями, и т.п. Плюс информация о том, к какой базе приложено. Разумеется, с фильтрами, отборами, можно увидеть все что надо еще приложить к любой базе и т.п.
Ну и дополнительно для удобства по кнопочке оттуда же собственно и происходит прикладывание скрипта к выбранной базе, если она доступна.

Софт копеечный получился, зато удобств... Это надо почувствовать разницу, чтобы понять.
Разумеется, к этому орг. решение - запрет бездумного изменения структур руками в Sybase Central, по крайней мере на официальной разработочной базе, не говоря уж про боевые. Но этот минимум бюрократии с лихвой компенсируется полным отсутствием бардака, не смотря на весьма навороченную структуру БД и большое количество инсталляций.

Не патентую, так что пользуйтесь идеей, кому актуально :)
...
Рейтинг: 0 / 0
Отслеживание изменений структуры БД
    #36058962
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только скрипты. Храним в стартиме.
Добавить новое поле ? Скрипт создания новой таблицы + переливание данных из старой + грохаем старую + переименовка новой таблицы в старую.
Трудоемко ? Да. Но предсказуемо. Есть возможность откатить правки, накатом предыдущего скрипта.
Хорошо видна история изменений.
...
Рейтинг: 0 / 0
Отслеживание изменений структуры БД
    #36059343
Фотография А6дуллаh3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Embarcadero Change Manager,
PowerDesigner.

Первый в принципе автоматом делает все вот это -
Добавить новое поле ? Скрипт создания новой таблицы + переливание данных из старой + грохаем старую + переименовка новой таблицы в старую., но надо набить руку, чтобы правильные галки проставлять не забывать.
И платный :)
PD тоже умеет накатывать изменения, но по ощущениям больше возможность что-то потерять.
...
Рейтинг: 0 / 0
Отслеживание изменений структуры БД
    #36059494
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А6дуллаh3PD тоже умеет накатывать изменения, но по ощущениям больше возможность что-то потерять.
PD может терять при реверсе. При генерации по модели SQL скрипта на создание или обновление он физически ничего потерять не может ;) Однако и реверс можно довести до ума, если определить, что он может терять и дописать DBMS до ума.


Александр ГoлдунА инструмент, который мы сделали - очень простейший.
Вот в том то и дело - мне раньше тоже казалось, что легче сделать инструмент, чем пользоваться PD :) Сейчас это мнение у меня сильно поколебалось после общения с европейскими спецами, работающими с PD, другое дело что я к примеру пока не обладаю таким уровнем знаний (а ведь они помимо темплейт и скриптов не леняться и плагины монстрячить в DLL под PD). По непроверенным пока слухам есть шанс получить книгу на русском языке по PD 15, которая сейчас пишется в Европе. Если это случится, то писать своих инструментов придется меньше :)
...
Рейтинг: 0 / 0
Отслеживание изменений структуры БД
    #36059754
the_flow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А кто что думает про SQL Examiner ? :-[
...
Рейтинг: 0 / 0
Отслеживание изменений структуры БД
    #36062630
Лопата2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
заинтересовала тема.
А есть опыт управляемого внесения изменений для СУБД с репликацией?
СУБД MS SQL Server 2005
Ландшафт такой
центральная БД, которая заодно (пока) и публикатор и дистрибьютор
кучка БД, которые подписчики
репликация слиянием
есть подписчики на медленных каналах (GPRS). Собственно, в этом весь и проблем. Необходимо обеспечить максимально безопасное изменение центральной БД, чтобы не допустить реинициализацию и как следствие перезаливку сотен МБ
...
Рейтинг: 0 / 0
Отслеживание изменений структуры БД
    #36063126
Фотография Александр Гoлдун
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лопата2
А есть опыт управляемого внесения изменений для СУБД с репликацией?

Имеется. У нас несколько баз как раз реплицируемые. И тоже некоторые по медленным каналам. Правда не MSSQL, а SQL Anywhere, но суть от этого не меняется.
Рецепт нашли только один - осторожность и понимание того, что делаешь. При внесении скриптов по реплицируемым базам, если они касаются частей базы, участвующих в подписках, человек должен четко понимать происходящее. Если действие опасное или требует особого внимания при приложении - делаются соответствующие пометки по скрипту, на которые должен обратить внимание прикладывающий. Вплоть до того, что скрипт просто делается не выполняемым тупо по кнопке, требуя предварительной правки и исключая таким образом его случайное бездумное прикладывание.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Отслеживание изменений структуры БД
    #36869114
genok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
оживим тему

есть ли что-то подобное SQL Examiner, только для FB/IB ?
...
Рейтинг: 0 / 0
Отслеживание изменений структуры БД
    #36869115
Volochkova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
genokоживим тему

есть ли что-то подобное SQL Examiner, только для FB/IB ?

Самое что банальное приходит в голову.
C#
Сделать 2 датасета.
В каждый грузить "Select * from dataTable Where 1=2"
А список таблиц с бд получить реально.
Дальше циклы на C#

Типа независимость от СУБД
...
Рейтинг: 0 / 0
Отслеживание изменений структуры БД
    #36869539
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSПо непроверенным пока слухам есть шанс получить книгу на русском языке по PD 15, которая сейчас пишется в Европе. Если это случится, то писать своих инструментов придется меньше :)
Свершилось? Есть книга-то?
...
Рейтинг: 0 / 0
Отслеживание изменений структуры БД
    #36873476
genok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VolochkovaСамое что банальное приходит в голову.
C#
Сделать 2 датасета.
В каждый грузить "Select * from dataTable Where 1=2"
А список таблиц с бд получить реально.

вот так всегда - всё сам да сам ))
...
Рейтинг: 0 / 0
Отслеживание изменений структуры БД
    #36873791
Volochkova
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
genokVolochkovaСамое что банальное приходит в голову.
C#
Сделать 2 датасета.
В каждый грузить "Select * from dataTable Where 1=2"
А список таблиц с бд получить реально.

вот так всегда - всё сам да сам ))

А там не много... чуть чуть....
Зато ощутите себя мега програмерами
...
Рейтинг: 0 / 0
Отслеживание изменений структуры БД
    #36874284
ЮВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
После каждого изменения схемы таблицы (или БД) выгружаете её в текстовый файл и помещаете в CVS, это позволит отслеживать изменение схемы за любой период.
...
Рейтинг: 0 / 0
Отслеживание изменений структуры БД
    #36875576
mcureenab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЮВ,

впринципе можно и это делать, однако контроль версий инсталяционых/миграционных скриптов оно не отменяет.

распространие скриптов клиентам несколько иная задача. Можно скрипт заточить так, чтобы он накатывал только недостающие изменения. Можно отдельно следить, какие изменения уже применены, и отгружать клиенту только "довески" в вид отдельных скриптиков.
...
Рейтинг: 0 / 0
Отслеживание изменений структуры БД
    #36907555
EugeneS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Отслеживание изменений структуры БД
    #36937941
genok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сделал решение на FIBPlus-овском BatchAllRecords
при очередном изменении структур создается .FBK с метаданными
и на его основе создается новая база со свежими структурами и старыми данными


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
procedure TMainForm.RunMe(Sender: TObject);
var D, SQLText: String; TList, FList: TStrings; T, F: integer;
begin
  TButton(Sender).Enabled:=False;
  TList:= TStringList.Create; FList:= TStringList.Create;
  Memo1.Lines.Clear;
  d:=StringReplace(StringReplace(StringReplace(DateTimeToStr(Now),
                   ':', '-', [rfReplaceAll]),
                   ' ', '-', [rfReplaceAll]),
                   '.', '-', [rfReplaceAll]);
  // Проверяем наличие новых структур
  if not FileExists(ExtractFilePath(ParamStr( 0 ))+'\NEW_STR.FBK') then begin
     ShowMessage('Файл структур "NEW_STR.FBK" не найден'); Exit; end;
  // Пробуем наличие доступа к файлу базы
  If not RenameFile('BASE.FDB','BASE-'+D+'.FDB') then begin
     ShowMessage('Файл базы данных "BASE.FDB" недоступен для записи.'+# 13 
                +'Убедитесь, что к базе данных нет подключений.'); Exit; end;
  Memo1.Lines.Append('Создана копия рабочей базы "BASE-'+D+'.FDB"');
  Memo1.Lines.Append('');
  // Распаковываем структуры
  try with FIBR do begin
     Memo1.Lines.Append('Открытие файла структур');
     Memo1.Lines.Append('');
     Application.ProcessMessages;
     BackupFile.Text:=ExtractFilePath(ParamStr( 0 ))+'\NEW_STR.FBK';
     DataBaseName.Text:=ExtractFilePath(ParamStr( 0 ))+'\BASE.FDB';
     Active:=True;
     FIBR.ServiceStart;
     Active:=False;
  end except ShowMessage('Ошибка раскрытия файла структур'); Exit; end;
  // Цепляемся к базам
  Memo1.Lines.Append('');
  Memo1.Lines.Append('Подключение к базам');
  FIB1.DBName:='127.0.0.1:'+ExtractFilePath(ParamStr( 0 ))+'\BASE-'+D+'.FDB';
  FIB2.DBName:='127.0.0.1:'+ExtractFilePath(ParamStr( 0 ))+'\BASE.FDB';
  FIB1.Open(True); FIB2.Open(True);
  // Переносим значения генераторов
  Memo1.Lines.Append('');
  Memo1.Lines.Append('получение списка генераторов');
  TList.Text:=StringReplace(StringReplace(
        FIB1.QueryValueAsStr('select list(rdb$generator_name) from '
                            +'rdb$generators where ((rdb$system_flag = 0) '
                            +'or (rdb$system_flag is null))', 0 ,[]),
                 ' ','', [rfReplaceAll]),',',# 13 # 10 , [rfReplaceAll]);
  Memo1.Lines.AddStrings(TList);
  For T:= 0  to TList.Count- 1  do FIB2.QueryValue('SET GENERATOR '+TList[T]
                              +' TO '+IntToStr(FIB1.Gen_Id(TList[T], 0 )),  0 );

  // создаем очередь заполнения таблиц с учетом Foreign Keys
  TList.Clear;
  TList.Append('BLISTS');
  TList.Append('CLIENTS');
  TList.Append('USERS');
  TList.Append('TIME_RANGES');
  TList.Append('CATEGORIES');
  TList.Append('KASSA_TYPES');
  TList.Append('MATERIALS');
  TList.Append('USLUGI');
  TList.Append('MKB10');
  TList.Append('RESOURCE');
  TList.Append('SETTINGS');
  TList.Append('STAT_TYPES');
  TList.Append('SMS');
  TList.Append('SMS_RESPONSES');
  TList.Append('TEMPLATES');
  TList.Append('KASSA');
  TList.Append('MAT_FEE');
  TList.Append('USL_FEE');
  TList.Append('CARDS');
  TList.Append('VISITS');
  TList.Append('VIS_MAT');
  TList.Append('VIS_STAT');
  TList.Append('VIS_USL');
  TList.Append('PLANDB');

  Memo1.Lines.Append('');
  Memo1.Lines.Append('Создан список таблиц');
  Memo1.Lines.AddStrings(TList);

  for T:= 0  to TList.Count- 1  do begin
    Memo1.Lines.Append('');
    Memo1.Lines.Append('Заполнение таблицы '+TList.Strings[T]);
    FIB1.GetFieldNames(TList.Strings[T], FList, False);
    // Формируем запрос на добавление записей в слейв-таблицу
    SQLtext:='INSERT INTO '+TList.Strings[T]+' ('+FList[ 0 ];
    for F:= 1  to FList.Count- 1  do SQLText:=SQLText+', '+FList[F];
    SQLText:=SQLText+') VALUES(?'+FList[ 0 ];
    for F:= 1  to FList.Count- 1  do SQLText:=SQLText+', ?'+FList[F];
    SQLText:=SQLText+')';
    // открываем датасет и делаем батч
    DSet.Active:=False; DSet.SelectSQL.Text:='SELECT * FROM '+TList[T]; DSet.Open;
    Query.SQL.Text:=SQLText;
    DSet.BatchAllRecordsToQuery(Query);
    TR2.CommitRetaining;
    Memo1.Lines.Append('УСПЕШНО!');
  end;


  TList.Free; FList.Free;
  Memo1.Lines.Append('');
  Memo1.Lines.Append('Удаление использованного файла структур');
  DeleteFile(ExtractFilePath(ParamStr( 0 ))+'\NEW_STR.FBK');
  Memo1.Lines.Append('--------------------------------------');
  Memo1.Lines.Append('Обновление структур успешно закончено!');
end;
...
Рейтинг: 0 / 0
Отслеживание изменений структуры БД
    #36964685
eys
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Отслеживание изменений структуры БД
    #36980721
Фотография Shovgenyuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Столкнулся с етой задачей несколько лет назад.
В БД сотни обектов (таблицы, вюверы, сп...), гдето раз в две недели выходит новая версия системы (клиентская часть + БД). На то время сисема была установлена где-то в 10 клиентов.
При апдейте ситемы в клиентов приходилось вносить изменения в БД через конструктор или скриптами. Не все клиенты обновлялись после каждого релиза, иногда перепрыгивали, например с версии 25 сразу на версию 31. Приходилось вносить все изменения по цепочке. Разработчики забывали разяснять внедренцам что, где и как надо менять, у внедренцев не было опыта и знаний для работы с СУБД напрямую, внедренцы иногда менялись, разработчикам приходилось обяснять новым внедренцам всё сначала, количество клиентов начало расти, версии у каждого были разные...начался кошмар с внедрением и обновлением.
Возникла необходимость высылать клиентам обновления (новые версии) которые они могли бы установить самостоятельно.

Пересмотрел и перепробовал разные готовые решения и ничего подходящего не нашол.
Фриварные решения не обеспечивали нужного функционала, а платные не подходили из-за того что их надо было ставить у клиента который их не покупал. Клиен и внедренцы не могли разобраться и работать со сложными готовыми решениями которые возможно и решили бы проблему но надо было их достаточно хорошо изучить, а заставить ето сделать клиента не реально, да и не правильно. к тому же их надо было установить у каждого клиента.

Решили:
1) все изменения делать только через скрипты, которые сохранять в папках с определённой структурой, установили несколько простейших правил: что где и как сохранять и т.д.
2) написать свою простенькую программку, которая выполняет все скрипты с определённой очерёдностью.

Ету программку распостранили среди клиентов.
При обновлении, клиент в етой программе указывае путь к папке со скриптами, нажимает одну кнопку и идёт пить кофе )
Через несколько минут всё готово и без остановки работы системы у клиента.
Счас клиентов сотни, у всех разные версии, внедренцы отправляют им обновления до какой угодно версии и когда угодно, разработчики не парятся с внедренцами, всё работает прекрасно.
Кроме того удалось навести порядок в офисе между разработчиками, каждый может обновить свою рабочую БД учитывая изменения других. Разработчики и внедренцы счас у разных городах, добавились ещё тестеры и у всех всё прекрасно обновляется до нужной версии.
...
Рейтинг: 0 / 0
Отслеживание изменений структуры БД
    #36981322
Фотография Хопа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А6дуллаh3Embarcadero Change Manager,
PowerDesigner,
Visual Studio начиная с 2005-й версии

добавил
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Отслеживание изменений структуры БД
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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