А как правильно вносить изменения в БД?

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

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

Ответить
Kotъ-Begemotъ
Сообщения: 250
Зарегистрирован: 25 июл 2007, 21:33

А как правильно вносить изменения в БД?

Сообщение Kotъ-Begemotъ » 19 авг 2007, 00:31

Вот допустим надо мне добавить в таблицу новое поле. Можно это делать "наживую" то есть при работающих с этой таблицей пользователях? Если допустим exe'шник клиентский еще "старый" и к этому полю не обращается. Могу я сделать ALTER TABLE и добавить поле и пропадейтить его какими-то значениями? Или надо обязательно сделать базе шотдаун и только тогда добавить?

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Re: А как правильно вносить изменения в БД?

Сообщение stix-s » 19 авг 2007, 20:22

Kotъ-Begemotъ писал(а):Вот допустим надо мне добавить в таблицу новое поле. Можно это делать "наживую" то есть при работающих с этой таблицей пользователях? Если допустим exe'шник клиентский еще "старый" и к этому полю не обращается. Могу я сделать ALTER TABLE и добавить поле и пропадейтить его какими-то значениями? Или надо обязательно сделать базе шотдаун и только тогда добавить?
крайне желательно именно в монопольном режиме
базе шотдаун
ибо на рабочей при таких манипуляциях последствия, как говорится не гарантируются (сам подумай - ты меняешь структуру БД)

Kotъ-Begemotъ
Сообщения: 250
Зарегистрирован: 25 июл 2007, 21:33

Re: А как правильно вносить изменения в БД?

Сообщение Kotъ-Begemotъ » 20 авг 2007, 02:22

stix-s писал(а):крайне желательно именно в монопольном режиме ибо на рабочей при таких манипуляциях последствия, как говорится не гарантируются (сам подумай - ты меняешь структуру БД)
Понял, пасиб... Просто надеялся что по сравнению с Paradox который у меня сейчас используется можно будет делать "на ходу"... Раскатал губу, короче... *уходит искать хорошую губозакаточную машинку*...

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 20 авг 2007, 11:09

Использование поля тут не при чём.
Скорее всего, ты получишь "object in use", потому как сама таблица всё ж используется.
Изменения метаданных на ходу - вообще грабли заточенные. Тебе хочется, чтобы на одном компе работали старым способом, а на другом уже по-новому? Мне вот почему-то хочется, чтобы все в какой-то момент начали по-новому.

ЗЫ: Вот тебе, сам просил ;)

SAMZ
Сообщения: 128
Зарегистрирован: 21 мар 2005, 08:17

Сообщение SAMZ » 20 авг 2007, 11:48

WildSery писал(а):Использование поля тут не при чём.
Скорее всего, ты получишь "object in use", потому как сама таблица всё ж используется.
Изменения метаданных на ходу - вообще грабли заточенные. Тебе хочется, чтобы на одном компе работали старым способом, а на другом уже по-новому? Мне вот почему-то хочется, чтобы все в какой-то момент начали по-новому.
Жестковатый ответ. По нашему опыту работы в многопользовательской системе, постороенной на FB добавление полей проблем не вызывает. Сложнее с модификацией ХП созданием вторичных ключей. Впрочем, насколько мне известно FB2 лопускает генерацию вторичных ключей на лету.
Возможность работы старого приложения с заново генерироаванным полем определяется тем, как сделано приложение. Есть прижения, интерфейс которого управляется данными. В таких приложениях прозрачность нового поля обеспечивается на уровне БД без перестройки кода.

Kotъ-Begemotъ
Сообщения: 250
Зарегистрирован: 25 июл 2007, 21:33

Сообщение Kotъ-Begemotъ » 20 авг 2007, 13:43

WildSery писал(а): ЗЫ: Вот тебе, сам просил ;)
дык нету ж в продаже, и даже цена не определена :((( ;)))

aaa3d
Сообщения: 69
Зарегистрирован: 23 ноя 2005, 11:06

Сообщение aaa3d » 21 авг 2007, 13:38

добавлю свой камень....
использую Fb 1.5.2 CS.
добавления полей, изменения процедур-триггеров
делаю почти всегда во время работы юзеров.
потом говорю всем - перезапустите программу.
за 2 года таких манипуляций сбоев не было - может везло.
зато удобно.

ЗЫ...
IBExpert при комиляции например процедуры умеет говорить "object in use".
если в Script Executive написать конструкцию ALTER PROCEDURE... изменения проходят.

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

Сообщение kdv » 21 авг 2007, 14:18

IBExpert при комиляции например процедуры умеет говорить "object in use".
если в Script Executive написать конструкцию ALTER PROCEDURE... изменения проходят.
замучили этой темой. если альтер процедуре делать в SQL Editor, то тоже проблем не будет. никто ж не умеет, все редактируют через "ленивцев".

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 21 авг 2007, 15:30

SAMZ писал(а):Жестковатый ответ. По нашему опыту работы в многопользовательской системе, постороенной на FB добавление полей проблем не вызывает.
Сильно зависит от БД.
У нас вот частично из-за избыточности, частично из-за нечувствительности системы к некоторым потерям, можно некоторые данные вообще поубивать в системе, и ничего не случится. Не логи, причём.

А вот представь другую ситуацию.
Есть таблица, скажем, цен. Есть ХП, которая по определённым правилам оттуда их достаёт, пересчитывает и выдаёт запросившему (другой ХП, к примеру).
Добавляем колонку с новой, условно, "скидкой". Изменяем эту ХП, чтобы расчёт проводился с использованием этой колонки (иначе нафиг она нужна?).
Итак, видим: один клиент работает с этой таблицей со старой процедурой, второй клиент работает уже с новой. А с административной точки зрения, все работают с новой. Они там такого наработают...

Если же менять какие-нибудь важные триггеры...

SAMZ
Сообщения: 128
Зарегистрирован: 21 мар 2005, 08:17

Сообщение SAMZ » 21 авг 2007, 16:01

WildSery писал(а): А вот представь другую ситуацию.
Есть таблица, скажем, цен. Есть ХП, которая по определённым правилам оттуда их достаёт, пересчитывает и выдаёт запросившему (другой ХП, к примеру).
Добавляем колонку с новой, условно, "скидкой". Изменяем эту ХП, чтобы расчёт проводился с использованием этой колонки (иначе нафиг она нужна?).
Итак, видим: один клиент работает с этой таблицей со старой процедурой, второй клиент работает уже с новой. А с административной точки зрения, все работают с новой. Они там такого наработают...

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

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 21 авг 2007, 16:17

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

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Сообщение stix-s » 22 авг 2007, 07:52

WildSery писал(а):
SAMZ писал(а):Согласен, но здесь речь уже о бизнес логике, а не собственно метаданных и допустимости их модификаций на лету с точки зрения сервера.
Дык я никоим образом о сервере речи и не вёл :)
В нём-то как раз всё правильно работает, строже или мягче - не важно.
Исходя из множества ответов, делаю вывод, что на вопрос автора
Вот допустим надо мне добавить в таблицу новое поле. Можно это делать "наживую" то есть при работающих с этой таблицей пользователях? Если допустим exe'шник клиентский еще "старый" и к этому полю не обращается. Могу я сделать ALTER TABLE и добавить поле и пропадейтить его какими-то значениями? Или надо обязательно сделать базе шотдаун и только тогда добавить?
я ответил неверно с точки зрения целостности БД :(
хотя сам никогда на лету не меняю ничего и не добавляю (перестраховываюсь так сказать)
хотя у меня и масштабы вовсе не промышленные :)

SAMZ
Сообщения: 128
Зарегистрирован: 21 мар 2005, 08:17

Сообщение SAMZ » 22 авг 2007, 11:49

stix-s писал(а):я ответил неверно с точки зрения целостности БД :(
хотя сам никогда на лету не меняю ничего и не добавляю (перестраховываюсь так сказать)
хотя у меня и масштабы вовсе не промышленные :)
Да ничего подобного. Поля добавлять можно. Если под целостностью здесь имеется ввиду отсутствие фатальных последствий для БД в смысле ее живучести, то ничего не нарушится. Ну, а в отношении бизнес логики, то разработчик сам должен думать о последствиях действий такого рода.

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Сообщение stix-s » 22 авг 2007, 13:36

SAMZ писал(а): Да ничего подобного. Поля добавлять можно.
Именно это автор и спросил, согласно текста вопроса

SAMZ
Сообщения: 128
Зарегистрирован: 21 мар 2005, 08:17

Сообщение SAMZ » 22 авг 2007, 13:48

stix-s писал(а):
SAMZ писал(а): Да ничего подобного. Поля добавлять можно.
Именно это автор и спросил, согласно текста вопроса
Я неправильно Вас понял, виноват :(

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Сообщение stix-s » 22 авг 2007, 13:53

SAMZ писал(а): Да ничего подобного. Поля добавлять можно.
Хотяяяя, пришла в голову мысль - хорошо, в старом клиенте поле не пользуется, но наложили на него ограничение not null и дефолта нет
Обломается ведь ползатель со старым клиентом
или он из-за кеша метаданных его и не увидит до переконнекта?
Не, я уж все-таки лучше монопольно менять буду :)

Ответить