powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Тестовая БД vs Боевая БД
54 сообщений из 54, показаны все 3 страниц
Тестовая БД vs Боевая БД
    #34454975
Frankie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно кто как решает проблему синхронизации тестовой базы и боевой.

Вы работаете сразу на боевой?
У вас куча скриптов по переносу и синхронизации?
Вы на автомате запускаете скрипты на двух базах и точно также дублируете все изменения структуры?
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34456431
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем тогда тестовая,если все катить на боевую?Куча скриптов.
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34456450
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>Вы работаете сразу на боевой?

Это шутка ????
Конечно на бекапе. И потом.. "работаете" в смысле разрабатываете ?

>>У вас куча скриптов по переносу и синхронизации?

Да.

>>Вы на автомате запускаете скрипты на двух базах и точно также дублируете все изменения структуры?

Почему на двух ? Почему на автомате ? В тестовой уже есть изменения. Главное получить правильный скрипт "тест" -> "продакшн".
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34456595
Frankie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSVЭто шутка ????
Нет, почему же. Во-первых, бывают довольно простые действия, где негде ошибиться. Во-вторых, бывают люди, которые не нуждаются в тестах.

LSVКонечно на бекапе. И потом.. "работаете" в смысле разрабатываете ?
В смысле разрабатываете, у нас всё-таки форум разработчиков.

LSV
>>Вы на автомате запускаете скрипты на двух базах и точно также дублируете все изменения структуры?

Почему на двух ? Почему на автомате ? В тестовой уже есть изменения. Главное получить правильный скрипт "тест" -> "продакшн".
Мои вопросы это лишь варианты того, как может быть.

В общем, понятно... Похоже всё-таки скрипты переноса....
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34456680
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, почему же. Во-первых, бывают довольно простые действия, где негде ошибиться. Во-вторых, бывают люди, которые не нуждаются в тестах.

Ох-х-х...
1. ошибится можно всегда, даже ложку пронести мимо рта, если сильно задуматься
2. бывают люди, которые не нуждаются в тестах
см. п. 1

Кроме того, если вести разработку на продакшн (скажу про Oracle, полагаю, что подобные аспекты есть и в других базах):
1. если делается DDL объекта (например, изменяется процедура), то все зависисмые объекты инвалидируются и требуют перекомпиляции. Если таких объектов много и они взаимозависимы, то этот процесс может быть не таким коротким, при этом пользователе, работающие с этими объектами, отдыхают
2. если инвалидируется объект, то инвалидируются все SQL и PL/SQL предложения, которые к этому моменту уже использовались и лежат в shared pool. При очередном обращении к ним они должны подвергнуться новому разбору, соответственно, эффективность работы кэшей снижается
3. если изменяется таблица (например, меняем параметры колонки), то она на момент выполнения операции блокируется в монопольном режиме, соответственно, остальные ждут
4. если уже кто-то из пользователей уже использует эту таблицу, то придется ждать, когда ее отпустят или срубать сессии пользователей


Поэтому перенос изменений на продакшн делается в нерабочее время или в момент наименьшей загрузки...
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34457175
Frankie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tru55
Как же в Oracle всё сложно!

MSSQL в этом тут явно выигрывает. И в случае блокировок, кстати, блокирует только часть записей, а не все. Изменение структуры таблицы - да, но это наиболее редкое из всех возможных изменений.
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34457191
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MSSQL в этом тут явно выигрывает. И в случае блокировок, кстати, блокирует только часть записей, а не все. Изменение структуры таблицы - да, но это наиболее редкое из всех возможных изменений

1. А в каких пунктах из перечисленных мной и как выигрывает?
2. Про блокировку таблицы при изменении ее структуры я и говорил (кстати, при разработке это не такое уж и редкое изменение). При обычной DML-операции вообще блокируется не часть строк, а только одна строка (ну или только те строки, которые попадают под эту операцию)
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34457221
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Frankie wrote:
> Как же в Oracle всё сложно!
>
> MSSQL в этом тут явно выигрывает.
вот ЭТО - точно выигрывает

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
use tempdb
go
if object_id('test_proc','P') is not null drop procedure test_proc
go
create proc test_proc
as select 'old proc'
go
exec test_proc
go

begin tran
go
if object_id('test_proc','P') is not null drop procedure test_proc
go
create proc test_proc
as select 'new proc'
go
exec test_proc
go
rollback
go

exec test_proc


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
--------
old proc

( 1  row(s) affected)


--------
new proc

( 1  row(s) affected)


--------
old proc

( 1  row(s) affected)

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34459646
Frankie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tru551. А в каких пунктах из перечисленных мной и как выигрывает?
1 и 2. Никакой перекомпиляции связанных процедур не нужно, а про shared pool в MSSQL вообще не слышал.

lockyвот ЭТО - точно выигрывает
Хороший пример. Кстати, мне совершенно непонятен смысл операций IF EXISTS DROP потом CREATE, ведь логичнее делать IF NOT EXISTS CREATE потом ALTER. При таком варианте не слетают права.
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34459822
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FrankieИнтересно кто как решает проблему синхронизации тестовой базы и боевой.
Я бы начал с того, что баз должно быть не две, а как минимум три - разработка, тестирование и продакшн.

FrankieКак же в Oracle всё сложно!
"Тяжело в учении - легко в бою".

FrankieMSSQL в этом тут явно выигрывает.
Спорно. На эту тему был большой топик, в котором tygra как отстаиватель преимуществ MSSQL так и не смог нарисовать цельную картину "каким образом я накатываю онлайн патчи так, что все замечательно".

lockyвот ЭТО - точно выигрывает

use tempdb
go
if object_id('test_proc','P') is not null drop procedure test_proc
go
create proc test_proc
Хм. Точно?

Ну ладно. Правда, лично я по-прежнему буду делать

Код: plaintext
create or replace procedure test_proc .....

Frankie1 и 2. Никакой перекомпиляции связанных процедур не нужно,
Это не совсем так, но в чем-то. Возможность незаметно положить в базу некорректную процедуру - я бы не считал преимуществом, но вопрос вкусов.

Frankie а про shared pool в MSSQL вообще не слышал.
"Не слышал" - это сильный аргумент. Тем не менее, он там есть.
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34460214
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Frankie wrote:
> locky
> вот ЭТО - точно выигрывает
>
>
> Хороший пример. Кстати, мне совершенно непонятен смысл операций IF
> EXISTS DROP потом CREATE, ведь логичнее делать IF NOT EXISTS CREATE
> потом ALTER. При таком варианте не слетают права.
Я знаю, что не слетают :-)
Смысл был в простое примера.

А глубинный смысл примера: если при последовательном обновлении процедур
на очередной из них произошла ошибка - один rollback вертает взад все
ранее залитые процедуры.
Softwarer - Вас касается :-)
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34460228
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lockyА глубинный смысл примера: если при последовательном обновлении процедур
на очередной из них произошла ошибка - один rollback вертает взад все
ранее залитые процедуры.
Признаться, этот аспект меня крайне мало беспокоит. Впрочем, если хотите риторики - учитывая отсутствие контроля ошибок, "на очередной из них произошла ошибка" - событие, мягко говоря, не очень вероятное. Реальным исходом будет успешный commit и массовое выпадание ошибок у пользователей.
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34460268
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer wrote:
> Признаться, этот аспект меня крайне мало беспокоит. Впрочем, если хотите
> риторики - учитывая отсутствие контроля ошибок, "на очередной из них
> произошла ошибка" - событие, мягко говоря, не очень вероятное. Реальным
> исходом будет успешный commit и массовое выпадание ошибок у пользователей.
Меня такой аспект беспокоит, и очень :-)
Частенько необходимо бывает "пакетная" заливка взаимосвязанных процедур
вкупе с изменением схемы.
Для контроля ошибок можно вставить set xact_abort on и будет щастие.
кроме того - это ведь демонстрация возможности, а не реальный скрипт
накатывания патча и/или сорс код патч-инсталлера.
А вероятное событие, невероятное - понятие философическое. В идеале ваще
не нужны ни rollback, ни транзакции как таковые - приложения (в т.ч.
сервера) должны быть написаны без ошибок и должны работать без ошибок.
Одно токо непонятно - кому должны :-(
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34460346
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lockyМеня такой аспект беспокоит, и очень :-)
Частенько необходимо бывает "пакетная" заливка взаимосвязанных процедур
вкупе с изменением схемы.
При этом "частенько" таки приходится выгонять пользователей, работающих с этой частью приложения. Во всяком случае, tygra так и не смог рассказать, за счет чего в нетривиальных случаях можно обойтись и без выгоняния пользователей, и без риска для данных.

Раз пользователей выгнали, значит первое и основное преимущество транзакции - невидимость изменений для пользователей - становится безразличным.

Возможность отката одним rollback-ом - не спорю, удобна. Но чего-то принципиального я в ней не вижу. В любом случае по-хорошему нужно делать инсталлятор, который берет на себя кучу технических моментов и в том числе может делать откат. rollback лишь делает сомнительную практику наката патчей голыми скриптами несколько менее сомнительной.

lockyДля контроля ошибок можно вставить set xact_abort on и будет щастие.
Не вижу разницы и щастия соответственно.

lockyА вероятное событие, невероятное - понятие философическое.
Только до тех пор, пока рассуждения идут на "принципиально качественном" уровне. Как только делается хотя бы самая грубая количественная оценка - насколько поможет эта фича - понятие становится сугубо прагматичным.

Скажем, по моим ощущениям, в подавляющем большинстве случаев "наката у клиентов присланного им скрипта" такой скрипт ошибку в процедуре не обнаружит и выполнит commit. Соответственно, привлекательность rollback-а (который все равно не будет исполнен) несколько блекнет....

lockyВ идеале ваще не нужны ни rollback, ни транзакции как таковые - приложения (в т.ч.
сервера) должны быть написаны без ошибок и должны работать без ошибок.
Глупость, уж извини. Транзакции защищают вовсе не от "написаны с ошибками".
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34460381
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer wrote:
> При этом "частенько" таки приходится выгонять пользователей, работающих
> с этой частью приложения. Во всяком случае, *tygra* так и не смог
> рассказать, за счет чего в нетривиальных случаях можно обойтись и без
> выгоняния пользователей, и без риска для данных.
Никто и не спорит, что иногда (не всегда, но - бывает!) нужно выгнать
юзеров.

> Раз пользователей выгнали, значит первое и основное преимущество
> транзакции - невидимость изменений для пользователей - становится
> безразличным.
Главное преимущество транзакции, как мне кажется - она "или всё, или
ничего".

> Возможность отката одним rollback-ом - не спорю, удобна. Но чего-то
> принципиального я в ней не вижу. В любом случае по-хорошему нужно делать
> инсталлятор, который берет на себя кучу технических моментов и в том
> числе может делать откат. rollback лишь делает сомнительную практику
> наката патчей голыми скриптами несколько менее сомнительной.
Да, очень удобно перед накатываем патча делать полный бэкап, а затем - в
случае "облома" - выгонять тех, кого не выгнал и тратить N времени на
restore.

>
> locky
> Для контроля ошибок можно вставить set xact_abort on и будет щастие.
> Не вижу разницы и щастия соответственно.
Разница в том, что при xact_abort on в случае ошибки транзакция
откатится и все изменения внесенные патчем тоже будут откачены, т.е. -
патч и не накатывался. и инсталлеру не надо анализировать "если
произошла ошибка на шаге X - rollback". Но это - на любителя, кто как
пишет. Кто Xact_abort ставит, кто анализирует шаги - дело вкуса, наверное.

> Только до тех пор, пока рассуждения идут на "принципиально качественном"
> уровне. Как только делается хотя бы самая грубая количественная оценка -
> насколько поможет эта фича - понятие становится сугубо прагматичным.
очень прагматично. У меня синхронно с внутренними метаданными системы
регенерируется код обработчиков. И мне не хотелось бы, дабы метаданные с
обработчиками расходились. Хотя - зависит от дизайна системы.

> Скажем, по моим ощущениям, в подавляющем большинстве случаев "наката у
> клиентов присланного им скрипта" такой скрипт ошибку в процедуре не
> обнаружит и выполнит commit. Соответственно, привлекательность
> rollback-а (который все равно не будет исполнен) несколько блекнет....
Обнаружит, и откатит (см. выше про xact_abort).
точнее - ошибку во внутренней логике процедуры - нет, не найдет. а вот
ошибку при накатывании патча - найдет вполне. И откатится.

> locky
> В идеале ваще не нужны ни rollback, ни транзакции как таковые -
> приложения (в т.ч.
> сервера) должны быть написаны без ошибок и должны работать без ошибок.
>
> Глупость, уж извини. Транзакции защищают вовсе не от "написаны с ошибками".
В случае с неправильно написанным патчем - защищают и от этого тоже.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34460394
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Немного соврал.
xact_abort не всегда спасает. всегда спасает - инсталлер, ловящий ошибки
и делающий rollback.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34460628
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lockyГлавное преимущество транзакции, как мне кажется - она "или всё, или ничего".
Само по себе это ничего особого не стоит. Грубо говоря, представьте себе многопользовательскую СУБД с поддержкой транзакций и умеющую только грязное чтение. Давайте договоримся, что блокировок в ней нет - чтобы не было соблазна руками эмулировать более высокие уровни изоляции. Ну и представьте себе решение практических задач в такой ситуации.

Итого - получим, что если изоляции нет, то поддержка транзакций в общем-то и ничего интересного не дает. Обратную ситуацию (изоляция без возможности отката) - представить и использовать можно.

locky> Возможность отката одним rollback-ом - не спорю, удобна. Но чего-то
> принципиального я в ней не вижу. В любом случае по-хорошему нужно делать
> инсталлятор, который берет на себя кучу технических моментов и в том
> числе может делать откат. rollback лишь делает сомнительную практику
> наката патчей голыми скриптами несколько менее сомнительной.
Да, очень удобно перед накатываем патча делать полный бэкап, а затем - в
случае "облома" - выгонять тех, кого не выгнал и тратить N времени на
restore.
Хм. У меня такое впечатление, что Вы попытались проявить иронию.

Желание безусловно хорошее, но не в том случае, когда оно заменяет такие шаги алгоритма как

Прочитать сказанное

Подумать

Применить имеющиеся знания

Сугубо ради примера - давайте даже представим, что мы зачем-то решили идти бредовым путем восстановления. И зачем полный бэкап? MSSQL что, не умеет откатываться к заданной точке?

А теперь предлагаю сделать rollback и выполнить таки вышеописанные шаги.

locky
> Не вижу разницы и щастия соответственно.
Разница в том, что при xact_abort on в случае ошибки транзакция
откатится и все изменения внесенные патчем тоже будут откачены,
Для того, чтобы xact_abort откатил транзакцию, нужно, чтобы сервер зафиксировал ошибку. А поскольку сервер ошибку не зафиксирует - xact_abort ни на что не влияет. Процедура спокойно закоммитится, патч завершится, пользователи вернутся в базу - и только тут посыпятся ошибки.

lockyочень прагматично. У меня синхронно с внутренними метаданными системы
регенерируется код обработчиков. И мне не хотелось бы, дабы метаданные с
обработчиками расходились. Хотя - зависит от дизайна системы.
Я понимаю это "не хотелось бы", но в данном случае это выбор между "хорошим" и "нормальным".

lockyОбнаружит, и откатит (см. выше про xact_abort).
Не обнаружит и не откатит.

lockyточнее - ошибку во внутренней логике процедуры - нет, не найдет.
Вот именно что. Скажем, если патч номер 28 по каким-то причинам не накатился - патч номер 29 скорее всего накатится, и проявится только когда пользователи вернутся в базу, выполнят процедуру и получат какой-нибудь table not found.

lockyа вот ошибку при накатывании патча - найдет вполне. И откатится.
А что это за "ошибка при накатывании патча"? Синтаксическая ошибка в скрипте, какой-нибудь там UNSERT вместо INSERT-а?

Имхо - 95% ошибок, которые могли бы обнаружиться на этом этапе, неизбежно будут найдены раньше, при тестировании патча (я не имею в виду некоего специального особо качественного тестирования, но скорее что-то типа "хоть раз прогнать у себя перед тем как отправлять пользователям"). Конечно, есть некоторые случаи, когда будет шанс - но полагаться на то, что такой защиты хватит, мягко говоря, несерьезно.

lockyВ случае с неправильно написанным патчем - защищают и от этого тоже.
Это мы обсуждаем выше. Ты выдвинул весьма универсальное утверждение (в идеале - транзакции вообще не будут нужны).

Так вот: даже в идеале, когда железо никогда не будет ломаться, электричество никогда не будет отключаться, а пользователи никогда не будут ошибаться - транзакции будут нужны. Ради изоляции. Единственно, в этом идеальном случае отпадет потребность в rollback. Ну а если счесть идеальной программой ту, которая хорошо работает и с неидеальными пользователями - так и rollback пригодится.
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34460791
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как интересно, а использовать репликацию для синхронизации серверов -- не модно?
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34460798
Фотография tchingiz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LSV>>Вы работаете сразу на боевой?

Это шутка ????
Конечно на бекапе. И потом.. "работаете" в смысле разрабатываете ?

>>У вас куча скриптов по переносу и синхронизации?

Да..

Да.
Берешь из бекапа копию для тестирования и работаешь на ней.
Скрипт только для восстановления лога
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34461338
Фотография Программист-Любитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так приспособился:

Ввод/редактирование данных на клиенте в момент разработки и отладки клиента - на тестовой БД.
Дополнение структуры БД - новые таблицы, новые поля в старых - на основной. После этого бэкап основной и рестор в тестовую.
Подозрительно опасные изменения в БД - перенос сущностей из одной таблицы в другую, переходот 1:М ко М:М - отлаживаю на тестовой, делаю скрипты, которые потом накатываю на штатную, когда она без пользователей.
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34463182
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer wrote:
Многое (точнее - всё) поскипано :)

Дабы не разводить беседу в неподходящем топике, позволю себе
резюмировать: возможность откатывать DDL - штука полезная, и иногда
очень даже может пригодится и/или помочь.
Остальное - дело вкуса.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34467458
Frankie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer FrankieИнтересно кто как решает проблему синхронизации тестовой базы и боевой.
Я бы начал с того, что баз должно быть не две, а как минимум три - разработка, тестирование и продакшн.
У нас весь отдел автоматизации - три человека + аналитик! Не те масштабы.

Ещё раз спасибо за мнения.
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34467675
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Frankie softwarerЯ бы начал с того, что баз должно быть не две, а как минимум три - разработка, тестирование и продакшн.
У нас весь отдел автоматизации - три человека + аналитик! Не те масштабы.
Количество людей тут не при чем. Названное - минимум, который потребуется даже если вообще один человек на все. Смотрите сами:

Production - не место для экспериментов. Туда должны попадать только полностью протестированные решения (нет, конечно при десятке пользователей и некритичной задаче это не так, но мы же не об этом случае?).

Development - наоборот, место для экспериментов. Он практически никогда не соответствует production-у, поскольку в нем остаются "хвосты" - то, что так и не попало в версию, заделы на будущее, которые пока рано выпускать, а как правило еще и изменения, которые прямо на ходу вносят другие разработчики.

Вывод: грамотное тестирование на Development сервере практически невозможно. Код, который работает на development-е запросто может свалиться на production например потому, что опирается на чужую функцию, которая еще не попала в релиз.

Вывод: нужен еще один экземпляр БД, точная копия Production, на котором будут тестироваться как скрипты, так и собственно приложение перед попаданием на боевой.

Вот и все - даже если один человек. Без тестового сервера можно обойтись только в одном случае: если во-первых, постоянно заливать Development с Production-а, во-вторых, выпускать в версию только "все изменения на Development одновременно", при этом тщательно следя за отсутствием хвостов, ну а в-третьих, перед началом тестирования убивать development (перезаливать его с production-а) и накатывать на него все те скрипты, которыми потом будет догоняться боевой. Но это - экстремально неудобный режим, завести еще один экземпляр намного проще и удобнее.
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34470389
Frankie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerProduction - не место для экспериментов. Туда должны попадать только полностью протестированные решения (нет, конечно при десятке пользователей и некритичной задаче это не так, но мы же не об этом случае?).
Тестированием у нас занимаются пользователи. База достаточно хорошо разделена по областям использования, возможно независимо модифицировать отдельные участки без всякого страха. Кроме того, на production существуют тестовые объекты - например я могу скопировать боевую процедуру, перенаправить клиента на неё, менять и отлаживать на актуальных данными (речь идёт естественно о select-процедурах).

Кстати, тестовая база на боевом сервере у нас есть и используется, когда пользователи тестируют какой-то большой новый блок.

А поддержание двух баз для тестирования с данными, актуальными production опять-таки в нашем случае просто накладно.

Вот и все - даже если один человек. Без тестового сервера можно обойтись только в одном случае: если во-первых, постоянно заливать Development с Production-а
Чаще всего нужно переписывать только таблицу с константами айдишников.
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34470870
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FrankieТестированием у нас занимаются пользователи.
Я понимаю, что случаи бывают разные, но в ответ на эту фразу так и просится картинка с гробом ;-)

Пусть занимаются пользователи. Но это не отменяет необходимости в тестовой базе, на которой можно проверить версию, не рискуя поломать боевые данные. Если, конечно, эти данные важны.

FrankieБаза достаточно хорошо разделена по областям использования, возможно независимо модифицировать отдельные участки без всякого страха.
Я... рад за Вас, но сказанному мной это коллинеарно.

FrankieКроме того, на production существуют тестовые объекты - например я могу скопировать боевую процедуру, перенаправить клиента на неё, менять и отлаживать на актуальных данными
Можете, если конечно наплевать на то, что из-за этой процедуры production может встать раком, например, по производительности. Непонятно, правда, зачем так хитрить, но это мелочи.

Frankie(речь идёт естественно о select-процедурах).
Мнение softwarer-а о select-процедурах skipped

FrankieКстати, тестовая база на боевом сервере у нас есть и используется, когда пользователи тестируют какой-то большой новый блок.
Замечательно. Тогда в чем вопрос, почему Вы убеждаете меня, что она не нужна? И зачем вам тогда калечить боевой вышеописанным образом?

FrankieА поддержание двух баз для тестирования
Каких двух? Откуда двух? Разве у меня где-нибудь было сказано про необходимость двух тестовых баз?

Frankieс данными, актуальными production опять-таки в нашем случае просто накладно.
Вот этого я, уж извините, не понимаю. У вас с одной стороны тестирование пользователями на боевых данных, а с другой стороны терабайтная база?

Да и даже ладно, собственно, полной копии не требуется (хотя обычно полную копию делать проще и дешевле). С боевой нужны DDL и справочники, остальное можно резать.

FrankieЧаще всего нужно переписывать только таблицу с константами айдишников.
Ну если это действие поможет убить все левые модификации, которые успели наплодить девелоперы, то этого хватит....
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34471059
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FrankieА поддержание двух баз для тестирования с данными, актуальными production опять-таки в нашем случае просто накладно.
По-моему всегда приятно прогнать скрипт на тех данных, на которых он будет исполняться на production сервере. Понятно, что большой backup будет долго восстанавливаться, но если это будет тестовая база - это одно и ждать будете только Вы, а если вам нужно будет production восстанавливать, да еще и не один раз - это совсем другое.
И даже самые элементарные скрипты могут "накосячить" в БД. Вот пример из жизни. Скрипт что-то типа такого
Код: plaintext
1.
2.
update table 
set field = ''
where id =  1 
Казалось бы ничего криминального, но человек собирал этот скрипт из кусочков методом copy-paste, и не заметил, что после field = '' стояла ; А средство через которое он запускал этот запрос считало ; как разделитель команд, при том, команды на сервер отправляла последовательно, в результате на сервер ушло
Код: plaintext
update table set field = ''
и дальше ругнулось на синтаксическую ошибку. И день работы коту под хвост.
Хотя конечно есть ситуации, когда невозможно проверить (например из-за большого количества инсталяций). Ну так пусть тогда у человека который сопровождает на месте программу об этом голова болит. У нас например, в таком случае, при установке обновления делается полный backup базы и ПО, а при каком-либо сбое все откатывается назад.
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34471178
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин МаркПонятно, что большой backup будет долго восстанавливаться,
В первую очередь я не понимаю, как большой бэкап связан с тестовой базой. Конечно, можно делать тест бэкапом с production, но это совершенно не обязательно.

Если у нас в момент времени X есть тест, нам необходим только бэкап теста. Точнее, даже не бэкап, а возможность восстановить тест в случае, если мы запорем его своими скриптами. Прогоняем на нем скрипты, тестируем, и если все в порядке - прогоняем те же скрипты на боевом. В итоге имеем не только проверенную версию, но и "тест на момент времени X+1" - опять таки, соответствующий боевому. Чтобы проверить на нем следующую версию, никаких бэкапов на него накатывать не нужно. Согласен, желательно, чтобы он по данным не сильно отставал от боевого, поэтому если нет лучшего решения, можно пересоздавать тест с production, скажем, раз в месяц (и опять же, вряд ли стоит делать это бэкапами). За все сервера не скажу, в случае Oracle это делается без остановки боевого при времени, определяемом временем копирования файлов; разумеется, "написал скрипт и повесил на ночь на cron", никаких ручных операций.

У меня в наиболее интересном случае тестовая база наполнялась репликацией с боевой. Впрочем, это требовалось не столько для тестирования версии, сколько для того, чтобы воспроизводить проблемы, о которых сообщали пользователи.
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34471486
Фотография evostr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerСогласен, желательно, чтобы он по данным не сильно отставал от боевого, поэтому если нет лучшего решения, можно пересоздавать тест с production, скажем, раз в месяц (и опять же, вряд ли стоит делать это бэкапами). За все сервера не скажу, в случае Oracle это делается без остановки боевого при времени, определяемом временем копирования файлов; разумеется, "написал скрипт и повесил на ночь на cron", никаких ручных операций.
Как правило, писать скрипт и ставить в cron даже не требуется, т.к. резервное копирование никто не отменял и актуальная копия всегда должна быть, ну или возможность ее получить, накатив логи. И можно просто скопировать файлы с резервной копии, я, заодно, так и возможность восстановления проверяю.
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34472315
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
evostrКак правило, писать скрипт и ставить в cron даже не требуется, т.к. резервное копирование никто не отменял и актуальная копия всегда должна быть,
Хм...... допустим, "актуальная копия есть". И как Вы собираетесь выполнить задачу "раз в месяц восстанавливать с нее тестовый сервер" во-первых без ручной работы, а во-вторых без крона?
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34472408
Фотография evostr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerХм...... допустим, "актуальная копия есть". И как Вы собираетесь выполнить задачу "раз в месяц восстанавливать с нее тестовый сервер" во-первых без ручной работы, а во-вторых без крона?
Возможно, неправильно Вас понял. Если Вы имели в виду написание крона для переподнятия тестовой, тогда мое уточнение не в тему. Просто в контексте
softwarerв случае Oracle это делается без остановки боевого
подумал, что это про создание копии. Как эта фраза сочетается с поднятием тестовой базы не совсем понял. Извините, если ошибся.
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34472462
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
evostrПросто в контексте подумал, что это про создание копии.
Я имел в виду следующее - если хочется наполнять тестовую базу с боевой, можно просто на ходу клонировать боевую, никаких бэкапов тут в принципе не нужно.
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34472703
Frankie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer FrankieТестированием у нас занимаются пользователи.
Я понимаю, что случаи бывают разные, но в ответ на эту фразу так и просится картинка с гробом ;-)
У меня конечно опыт небольшой, но всякий раз убеждался, что лишь при выкладке нововведений открывается их истинное лицо. Пользователи, извините, глупее программистов - всего не проверишь, не предусмотришь. Не вижу в этом особого криминала.

softwarer
Frankie(речь идёт естественно о select-процедурах).
Мнение softwarer-а о select-процедурах skipped

Оценил!

Замечательно. Тогда в чем вопрос, почему Вы убеждаете меня, что она не нужна? И зачем вам тогда калечить боевой вышеописанным образом?
Потому что чаще всего нет необходимости напрягать пользователей тестированием. Третья база нужна, но делать любые изменения строго по приведённой Вами системе - долго.

Каких двух? Откуда двух? Разве у меня где-нибудь было сказано про необходимость двух тестовых баз?
Production + 2

Вот этого я, уж извините, не понимаю. У вас с одной стороны тестирование пользователями на боевых данных, а с другой стороны терабайтная база?
4Гб всего лишь. Ладно, в общем, я понял - надо изучить как делать нормальную синхронизацию и пользоваться третьей базой чаще :)

Ну если это действие поможет убить все левые модификации, которые успели наплодить девелоперы, то этого хватит....
Никто у нас "левых" модификаций не делает. По любому изменению структур таблиц мы советуемся и приходим к единому решению.
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34472724
Frankie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк
Код: plaintext
1.
2.
update table 
set field = ''
where id =  1 
Казалось бы ничего криминального, но человек собирал этот скрипт из кусочков методом copy-paste, и не заметил, что после field = '' стояла ; А средство через которое он запускал этот запрос считало ; как разделитель команд, при том, команды на сервер отправляла последовательно
Узнаю! Средстро не пхпмайадмин случаем?

Не, в QueryAnalyzer'e такое не пройдёт. Синтакс еррор.
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34473026
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Frankieно всякий раз убеждался, что лишь при выкладке нововведений открывается их истинное лицо. Пользователи, извините, глупее программистов
Именно поэтому нужны тестеры.

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

FrankieПотому что чаще всего нет необходимости напрягать пользователей тестированием.
Хм. Как Вам сказать... если выпускать непротестированные изменения на боевую базу - тут одно из двух. Либо будет плохо, либо задачи очень просты, но когда-нибудь все же будет плохо.

FrankieТретья база нужна, но делать любые изменения строго по приведённой Вами системе - долго.
Куда быстрее, нежели чинить боевую базу.

Frankie Ну если это действие поможет убить все левые модификации, которые успели наплодить девелоперы, то этого хватит....
Никто у нас "левых" модификаций не делает. По любому изменению структур таблиц мы советуемся и приходим к единому решению.
Таблицы - это неинтересно. Интересны - изменения в ХП.
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34473608
Frankie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerИменно поэтому нужны тестеры.

Я понимаю ситуацию "задача слишком невелика для того, чтобы иметь выделенного квалифицированного тестировщика", но это совершенно не означает, что в ходе тестирования нужно гробить реальные данные. Это значит, что разработчики должны проводить тестирование на тестовой базе. После этого пользователь, принимающий ту или иную фичу, также должен протестировать ее на тестовой базе.
Это всё организационные вопросы, меня в данном случае не интересуют. Но почему сразу гробить? Если Вы проводите такие экстремальные тесты, что там неизбежно что-то гробится - тогда конечно надо дествовать строго по схеме. Масштабы решают.

авторХм. Как Вам сказать... если выпускать непротестированные изменения на боевую базу - тут одно из двух. Либо будет плохо, либо задачи очень просты, но когда-нибудь все же будет плохо.
Мы проверяем своими силами. Потом выкладываем и дорабатываем в соответствии с последующими пожеланиями. Но всё это select'ы. От них плохо данным не будет.

Таблицы - это неинтересно. Интересны - изменения в ХП.
Нифига себе неинтересно! Мне вот нужно было переименовать столбец месяц назад. Все последствия устранил только на прошлой неделе. Причём тестовая база тут не сильно поможет - всякий раз я был уверен, что ничего не забыл. ХП у нас под SourceControl'ом. Я всегда могу вернуться к работающей версии. Да, и именно после изменений таблиц/вьюх надо переписывать процедуры, а вот наоборот я слабо себе представляю.
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34473744
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FrankieЭто всё организационные вопросы, меня в данном случае не интересуют.
Хм. Мне мерещится, или весь топик, созданный Вами, в общем-то посвящен оргвопросу?

FrankieНо почему сразу гробить? Если Вы проводите такие экстремальные тесты, что там неизбежно что-то гробится
Потому что при тестировании следует исходить из презумпции виновности - "программа содержит ошибки". Программа, содержащая ошибки, склонна вносить ошибки в данные - согласны? И лишь когда статус программы изменится на "программа конечно содержит ошибки, но обнаружить их не удалось", появляется надежда, что гробить данные она будет редко.

FrankieМы проверяем своими силами.
Где вы их проверяете? Если на сервере разработки - значит, либо вы вынуждены следовать драконовскому регламенту, куда более напрягающему, чем лишний сервер, либо это не проверка, а недоразумение (контекст, в котором вы проверяете, существенно отличается от контекста реальной эксплуатации).

FrankieНо всё это select'ы. От них плохо данным не будет.
Хм. Ну как Вам сказать... если три человека плюс аналитик пишут исключительно селекты, данные от того, конечно, не испортятся. Но это, я бы сказал, вырожденный случай.

Frankie Таблицы - это неинтересно. Интересны - изменения в ХП.
Нифига себе неинтересно! Мне вот нужно было переименовать столбец месяц назад. Все последствия устранил только на прошлой неделе.
Хм. Вы меня удивили; я говорил об этом немного раньше, но не думал, что все настолько плохо. Впрочем, это яркая иллюстрация к моему рассказу об откате как средстве борьбы с ошибочными патчами. Рассказ softwarer-а о переименовании столбца на правильных серверах skipped

FrankieПричём тестовая база тут не сильно поможет - всякий раз я был уверен, что ничего не забыл.
Пардон, но Вы что-то не так понимаете в идеологии тестирования. К Вашему "уверен, что ничего не забыл" она не имеет ну ни малейшего отношения.

FrankieХП у нас под SourceControl'ом. Я всегда могу вернуться к работающей версии.
Ээ... тут уместно вспомнить народную мудрость "поздно пить Боржоми". Основная задача вовсе не "вернуться к работающей версии", основная задача - не выкатывать на production изменений, после которых потребуется "возвращаться к работающей версии".

А таблицы, пардон, у вас не под VCS-ом?

FrankieДа, и именно после изменений таблиц/вьюх надо переписывать процедуры, а вот наоборот я слабо себе представляю.
В том-то все и дело. Если изменить таблицу, использующая ее процедура скорее всего или нормально отработает, или упадет с глобальной ошибкой, то и другое - не очень страшно. А вот если изменить процедуру, при сохранении синтаксиса может нарушиться логика ее взаимодействия с другими процедурами, и это приведет к непредсказуемым последствиям, вплоть до долгой незаметной порчи данных.
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34473848
Frankie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerХм. Мне мерещится, или весь топик, созданный Вами, в общем-то посвящен оргвопросу?
Разочарую. Даже дважды. Во-первых, интересна техническая сторона синхронизации. Что-то получше тупого двойного применения изменений. Во-вторых, Ваш оргвопрос уже затрагивает аспекты наличия тестировщиков, а мне он мало интересен.

Потому что при тестировании следует исходить из презумпции виновности - "программа содержит ошибки". Программа, содержащая ошибки, склонна вносить ошибки в данные - согласны?
Опять-таки, если она изменяет данные! Селект - это огромное большинство всех кодов. Да, я пока не имел дело со сложными триггерами и каскадными изменениями. Тогда и прибегу к трёхзвенной структуре. Просто не вижу смысла всё время пользоваться тяжёлой артиллерией.

И лишь когда статус программы изменится на "программа конечно содержит ошибки, но обнаружить их не удалось", появляется надежда, что гробить данные она будет редко.
И чем это отличается от "долгой незаметной порчи данных"? ;)
На прошлой работе я обнаружил просчёт спустя несколько месяцев использования. Причём в финансовой части (возникали копейки из-за которых не сходились суммы, а на экране было округление) - два дня готовил фикс и пол-дня применял.

Где вы их проверяете? Если на сервере разработки - значит, либо вы вынуждены следовать драконовскому регламенту, куда более напрягающему, чем лишний сервер, либо это не проверка, а недоразумение (контекст, в котором вы проверяете, существенно отличается от контекста реальной эксплуатации).
У нас очень хорошо разделена база по отделам, которые её используют! Разработчик ведёт проект по какому-то отделу на тестовой базе и знает, что никого не потревожит. "Общие" объекты БД известны и мы предупреждаем друг друга.

Хм. Ну как Вам сказать... если три человека плюс аналитик пишут исключительно селекты, данные от того, конечно, не испортятся. Но это, я бы сказал, вырожденный случай.
По коду: на пару инсертов и пяток апдейтов приходится пара десятков селектов.

Хм. Вы меня удивили; я говорил об этом немного раньше, но не думал, что все настолько плохо. Впрочем, это яркая иллюстрация к моему рассказу об откате как средстве борьбы с ошибочными патчами. Рассказ softwarer-а о переименовании столбца на правильных серверах skipped
Читал. Понимаете, одно дело, когда в компании поменялась терминология - нам безразлично, как теперь называются те или иные должности. Мы знаем и помним как в базе и ничего менять не будем. Другое - это когда столбец глобально перестал соответствовать своему названию. Было ID_ReqDoc стало ID_ReqItem. Принципиальная разница - если бы я оставил Doc, то постоянно бы забывал, что есть ещё таблица с ID_ReqProblem, указывающими ныне на ID_ReqItem (могу подробнее об этом случае).

Пардон, но Вы что-то не так понимаете в идеологии тестирования.
Конечно.. Рискну предположить, что это что-то вроде "программа конечно содержит ошибки, но обнаружить их не удалось" и законов Мерфи. ОК, я оптимист.

Ээ... тут уместно вспомнить народную мудрость "поздно пить Боржоми". Основная задача вовсе не "вернуться к работающей версии", основная задача - не выкатывать на production изменений, после которых потребуется "возвращаться к работающей версии".
Когда можно быть увереным, что изменения верны? Никогда, пока не выложишь и не попробуешь! Никто лучше пользоваетелей не протестирует - хотя бы потому, что у них абсолютно другой взгляд на эти вещи.

А таблицы, пардон, у вас не под VCS-ом?
Нет, они же не в отдельных файлах... Так бы может и держали.
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34474091
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FrankieРазочарую. Даже дважды. Во-первых, интересна техническая сторона синхронизации. Что-то получше тупого двойного применения изменений.
Хм. Что ж, тогда ответ: в тестируемых приложения "тупое двойное применение изменений" - оптимально, точнее даже необходимо, поэтому "других ответов" Вы получите довольно мало.

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

FrankieОпять-таки, если она изменяет данные! Селект - это огромное большинство всех кодов.
Хм. Если так, у вас весьма специфическая область деятельности.

FrankieИ чем это отличается от "долгой незаметной порчи данных"? ;)
Стоимостью. В идеале тщательность тестирования выбирается таким образом, чтобы минимизировать сумму стоимости тестирования и убытков от пропущенных ошибок. В реале используется эвристика, стремящаяся к аналогичному результату.

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

FrankieУ нас очень хорошо разделена база по отделам, которые её используют! Разработчик ведёт проект по какому-то отделу на тестовой базе и знает, что никого не потревожит. "Общие" объекты БД известны и мы предупреждаем друг друга.
Поймите, вопрос не в этом. Представьте себе, что Вас предупредили - в "общую" процедуру добавляют новый параметр. Вы добавляете где нужно этот параметр, продолжаете работу, работаете, работаете, работаете, наконец несете свой скрипт на production, накатываете - и опаньки, у пользователей все падает, поскольку на production-е этого параметра нет. Вы несетесь к автору параметра, спрашиваете "доколе" - и получаете ответ, что "стрижка только начата".

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

FrankieДругое - это когда столбец глобально перестал соответствовать своему названию. Было ID_ReqDoc стало ID_ReqItem. Принципиальная разница - если бы я оставил Doc, то постоянно бы забывал, что есть ещё таблица с ID_ReqProblem, указывающими ныне на ID_ReqItem (могу подробнее об этом случае).
Хм. Я собственно нисколько не возражаю и наоборот поддерживаю, переименовывать нужно, просто не могу себе представить, чтобы это было настолько сложно. Даже если некоторые селекты хранятся как данные в таблицах - самый неудобный случай - наверняка оно решаемо. Извратиться так, чтобы "это поле используется вот здесь" нельзя было найти тривиальным поиском - можно, конечно, но только если специально поставить такую задачу.

Ну а про зависимости и инвалидацию по-прежнему skipped :)

Frankie Пардон, но Вы что-то не так понимаете в идеологии тестирования.
Конечно.. Рискну предположить, что это что-то вроде "программа конечно содержит ошибки, но обнаружить их не удалось" и законов Мерфи. ОК, я оптимист.
Хм. Тогда не называйте ту проверку, которую Вы делаете, тестированием. Это просто семантически ложно.

FrankieНикто лучше пользоваетелей не протестирует
По качеству тестирования пользователь - второй с конца. Хуже него тестирует только автор тестируемого куска.

Frankie А таблицы, пардон, у вас не под VCS-ом?
Нет, они же не в отдельных файлах... Так бы может и держали.
Чудны дела твои, господи. То есть ХП - в отдельных файлах, а таблицы - нет? Странно все как-то...
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34475334
Frankie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerХм. Что ж, тогда ответ: в тестируемых приложения "тупое двойное применение изменений" - оптимально, точнее даже необходимо, поэтому "других ответов" Вы получите довольно мало.
Ага, наверное стоит загляныть в форум MSSQL на этот счёт. Нужно что-то вроде USE SERVER_NAME :)


Ничуть не затрагивает. Он затрагивает нормальное тестирование, а кто именно будет тратить на это время - нигде не фиксируется.
...
По качеству тестирования пользователь - второй с конца. Хуже него тестирует только автор тестируемого куска.

Не согласен, но из сказанного следует, что нам, авторам, тестировать особого смысла нет, если даже пользователи справятся с этим лучше.

Говорят, что тестирование - целая наука. Моя подруга работает тестировщицей. Когда она говорит что-то о своей работе, то
я всякий раз радуюсь тому, что есть люди которым это нравится :)

Хм. Если так, у вас весьма специфическая область деятельности.
Распространение КонсультантПлюс.

Стоимостью. В идеале тщательность тестирования выбирается таким образом, чтобы минимизировать сумму стоимости тестирования и убытков от пропущенных ошибок. В реале используется эвристика, стремящаяся к аналогичному результату.
И снова я очень рад, что не занимаюсь этим!

А теперь представьте, что проблема не в синтаксисе вызова, что легко решается, а в семантике. Представьте, что Ваша подпрограмма уже не может работать со старой версией общей, а подпрограмма Вашего соседа еще не может работать с новой - и все это надо как-то совместить на реалке. Вот тогда и начинается веселье - вполне реальное веселье, видел - типа "Вася, извини, у тебя сегодня вот эта кнопка отвалится, потому что Марье Федоровне очень срочно потребовалась другая кнопка..."
Случается, но быстро чинится.

Хм. Я собственно нисколько не возражаю и наоборот поддерживаю, переименовывать нужно, просто не могу себе представить, чтобы это было настолько сложно. Даже если некоторые селекты хранятся как данные в таблицах - самый неудобный случай - наверняка оно решаемо. Извратиться так, чтобы "это поле используется вот здесь" нельзя было найти тривиальным поиском - можно, конечно, но только если специально поставить такую задачу.
Селекты к счастью в таблице не хранятся, просто в некоторых местах было SELECT *.

Чудны дела твои, господи. То есть ХП - в отдельных файлах, а таблицы - нет? Странно все как-то...
Таблицы с данными, не скрипты таблиц. MSSQL, они же в файле БД!
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34475664
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Frankieно из сказанного следует, что нам, авторам, тестировать особого смысла нет, если даже пользователи справятся с этим лучше.
Правильнее будет так - "особо тестировать смысла нет". Дело в том, что для очевидных ошибок (что-то падает, число берется не из той ячейки итп) стоимость тестирования разработчиком оказывается кардинально ниже стоимости тестирования пользователем (в одном случае - нажать пару кнопок, в другом случае - собрать версию, передать пользователю, тот ищет время, отвлекается от текущей работы и ровно через тридцать секунд говорит - вот здесь падает, я больше ничего проверить не могу) - и это компенсирует "неоптимальность тестирования разработчиком".

Ну а относительно сложные вещи разработчик эффективно не протестирует. Протестировать "достаточно хорошо" он может только если затратит неадекватное количество времени (и всякие мудреные слова, те же юнит тесты, ему отчасти помогут, но кардинально ситуацию не изменят).

Frankie Хм. Если так, у вас весьма специфическая область деятельности.
Распространение КонсультантПлюс.
В смысле, учет - клиенты, инсталляции, бухгалтерия и так далее? Хм... не знаю. Взял первый попавшийся модуль учетной системы:

selectinsertupdatedelete480160340140

FrankieСлучается, но быстро чинится.
Ну тогда и обсуждать, собственно, особо нечего. Если ваших пользователей устраивает такой уровень сервиса - дорожите этими пользователями :)

FrankieСелекты к счастью в таблице не хранятся, просто в некоторых местах было SELECT *
Хм. Ну так никто же не мешает посмотреть где используется таблица, а не поле? Да и вообще говоря есть полезная привычка переменные называть в соответствии с полями, значения которых они получают.

FrankieТаблицы с данными, не скрипты таблиц.
То есть скрипты таки контролируются? Тогда откат: почему "изменения в ХП неинтересны, поскольку лежат в VCS, а вот изменения таблиц - это да.." И каких таблиц Вы имеете в виду - данных или всякого рода настроек-метаинформации? Если последнее, почему их не скриптуете? Переносите на боевой методом "повторить изменение через GUI редактирования"?
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34477906
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerВ первую очередь я не понимаю, как большой бэкап связан с тестовой базой. Конечно, можно делать тест бэкапом с production, но это совершенно не обязательно.Ну не всегда тестовая база может быть рядом с production. А настраивать различные механизмы (для MS SQL) типа репликации, log shipping, database mirroring тоже не всегда хорошо - это и дополнительная нагрузка на боевой сервер и проблемы с каналом связи если боевой и тестовый сервер разнесены пространственно и не связанны между собой.
softwarerЕсли у нас в момент времени X есть тест, нам необходим только бэкап теста. Точнее, даже не бэкап, а возможность восстановить тест в случае, если мы запорем его своими скриптами. Прогоняем на нем скрипты, тестируем, и если все в порядке - прогоняем те же скрипты на боевом.
По-моему следует различать назначения таких баз. Чтобы протестировать различные случаи заполнения данных (типа а вот что будет, если в этом документе в подвальной части одна строка/много строк/нет строк) - это одно, а увидеть как на реальных данных сработает скрипт для обновления - это другое (так мы, по крайней мере, можем себе гарантировать, что нам не придется что-то спешно на ходу подправлять/восстанавливать production из backup'а в процессе обновления). Да и как на реально заполненном большом объеме данных выборки происходят - тоже интересно посмотреть.
softwarerУ меня в наиболее интересном случае тестовая база наполнялась репликацией с боевой. Впрочем, это требовалось не столько для тестирования версии, сколько для того, чтобы воспроизводить проблемы, о которых сообщали пользователи.
Намного интереснее, когда таких баз больше 100. В этом случае что-то более разумное кроме полного backup'а придумать IMHO сложно.
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34477907
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FrankieУзнаю! Средстро не пхпмайадмин случаем?
Нет, это PowerBuilder.
Frankie Не, в QueryAnalyzer'e такое не пройдёт. Синтакс еррор.
Зато в QueryAnalyzer'e можно накосячить вообще с синтаксически верным скриптом.
Выделили мышью кусок
Код: plaintext
update table set field = ''
из большого скрипта, дальше мышью проскроллировали например на начало скрипта что-то проверить, забыли что у нас что-то выделено и нажали F5. Имеем тот-же результат.
Между прочим, я переодически так делаю :) (не на боевом сервере, и не всегда выделенный кусок имеет какой-то смысл), но это показывает, что ситуация не такая уж и вымышленная.
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34477909
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerПоймите, вопрос не в этом. Представьте себе, что Вас предупредили - в "общую" процедуру добавляют новый параметр. Вы добавляете где нужно этот параметр, продолжаете работу, работаете, работаете, работаете, наконец несете свой скрипт на production, накатываете - и опаньки, у пользователей все падает, поскольку на production-е этого параметра нет. Вы несетесь к автору параметра, спрашиваете "доколе" - и получаете ответ, что "стрижка только начата".
А что это за практика такая? Вася несёт накатывать свой скрипт, потом Петя, потом Саша. Изменения нужно накатывать единовременно и Пети, и Васи, и Саши. А если кому-то что-то срочно требуется срочно установить изменения Васи, то пишется hotfix, который ориентируется на то, что никаких изменений от Пети и Саши еще не установлено, а скрипты пишутся так, чтобы они корректно работали как с установленным hotfix'ом так и без.
И прежде чем накатывать изменения нужно получить подтверждения от Васи, Пети и Саши что стрижка уже закончена. Вы же когда вам регулируют двигатель и меняют колеса не бросаетесь сразу за руль узнав что двигатель уже отрегулировали не проверив что колеса уже поменяли?
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34478148
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк softwarerВ первую очередь я не понимаю, как большой бэкап связан с тестовой базой. Конечно, можно делать тест бэкапом с production, но это совершенно не обязательно.Ну не всегда тестовая база может быть рядом с production. А настраивать различные механизмы (для MS SQL) типа репликации, log shipping, database mirroring
Еще раз: совпадение тестовой базы с боевой по данным дает существенные плюсы, но вообще говоря, совершенно не обязательно. Мало того, в ряде случаев фигурирует строго обратное требование - секретность данных на боевой базе.

Локшин Марк softwarerУ меня в наиболее интересном случае тестовая база наполнялась репликацией с боевой. Впрочем, это требовалось не столько для тестирования версии, сколько для того, чтобы воспроизводить проблемы, о которых сообщали пользователи.
Намного интереснее, когда таких баз больше 100. В этом случае что-то более разумное кроме полного backup'а придумать IMHO сложно.
Cтранная логика. Очень странная логика.

Не очень понимаю, каких "таких" баз. При наличии полусотни связанных репликацией серверов втиснуть в них одну тестовую базу проблем ну совершенно не составило.

Что же до полного бэкапа.... делался он полночи. Иначе говоря, накат данных на тестовый занимал бы "минимум ночь, если повезет" (то есть если дисковая подсистема на тестовом не хуже, чем на боевом), ну а любому пользователю, сообщившему "я вот ввел данные, и тут такая фигня" пришлось бы отвечать "подождите сутки, пока эти данные не окажутся на тестовом".

Ничего разумного, признаться, не вижу.

Локшин МаркИзменения нужно накатывать единовременно
Знаете, в некоторых случаях я очень плохо отношусь к слову "надо". Это те случаи, когда говорят примерно следующее: "у нас кривая технология, и чтобы все не развалилось нахрен, надо..." Простой пример утверждений такого класса:

- Надо обрезать выборки, которые пользователь может запросить из программы, все равно он столько не прочитает.

Локшин МаркВы же когда вам регулируют двигатель и меняют колеса
Я, когда мне надо срочно съездить за сто километров, очень плохо отнесусь к фразе "да, мы поменяли вам колеса, но ехать вы не можете, потому что мы начали регулировать двигатель".
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34481661
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerМало того, в ряде случаев фигурирует строго обратное требование - секретность данных на боевой базе.
Ну это уже отдельный вопрос.
softwarerНе очень понимаю, каких "таких" баз. При наличии полусотни связанных репликацией серверов втиснуть в них одну тестовую базу проблем ну совершенно не составило.
Не еще одну а совершенно разных баз у совершенно разых заказчиков в совершенно разных местах.
softwarerЧто же до полного бэкапа.... делался он полночи. Иначе говоря, накат данных на тестовый занимал бы "минимум ночь, если повезет" (то есть если дисковая подсистема на тестовом не хуже, чем на боевом), ну а любому пользователю, сообщившему "я вот ввел данные, и тут такая фигня" пришлось бы отвечать "подождите сутки, пока эти данные не окажутся на тестовом".
А никто не говорит, что backup - это решение всех проблем. Кроме того, если скриптами угробить тестовую базу, то её опять же из backup'а восстанавливать придется.
softwarerЗнаете, в некоторых случаях я очень плохо отношусь к слову "надо". Это те случаи, когда говорят примерно следующее: "у нас кривая технология, и чтобы все не развалилось нахрен, надо..."
Т.е. откровенный бардак со "стрижка только начата" Вам нравится, а уж хорошая или плохая технология которая такого не допускает Вам кривая. По-моему все с точностью до наоборот.
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34481731
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин МаркНу это уже отдельный вопрос.
Нет, это не отдельный вопрос. Это яркая иллюстрация того, что тестовая база - вовсе не обязательно бэкапы, то есть обоснование моего исходного утверждения.

Локшин МаркНе еще одну а совершенно разных баз у совершенно разых заказчиков в совершенно разных местах.
Тем более. Что-то я с трудом представляю себе сотню заказчиков, каждую ночь высылающих разработчикам бандероль dvd-шек свежего бэкапа.

Локшин МаркА никто не говорит, что backup - это решение всех проблем.
Тогда о чем мы спорим? Напомню, я постулировал отсутствие между ними прямой и однозначной связи. Раз бэкап - не решение всех проблем, значит, либо некоторые проблемы вообще нерешаемы (что неправда), либо таки однозначной связи нет, бэкап - всего лишь ограниченное решение, может быть удобное в отдельных частных случаях, что я собственно и утверждал.

Локшин МаркКроме того, если скриптами угробить тестовую базу, то её опять же из backup'а восстанавливать придется.
Зачем? Не проще ли будет откатить ее на дату до "угробили"? Во всяком случае на пару порядков быстрее, я так думаю.

Локшин МаркТ.е. откровенный бардак со "стрижка только начата" Вам нравится, а уж хорошая или плохая технология которая такого не допускает Вам кривая. По-моему все с точностью до наоборот.
Хм. У Вас своеобразное представление о том, что есть "стрижка только начата".

Вы превозносите технологию, при которой семеро регулярно ждут одного. Ваш же пример - мне на машине сменили колеса, но я не могу ехать, поскольку мне не отрегулировали мотор. И это по-Вашему прямо и нисколько не похоже на "стрижка только начата".

Мой пример - я заказал в Германии новую запчасть, и пока она месяц добирается до России, езжу на старой. Заехал сменить колеса - и я хочу именно поменять колеса и ездить на новых колесах и со старой запчастью; Вы предлагаете мне на месяц застрять на автосервисе, дожидаясь синхронного выхода всех изменений, а мое желание называете "стрижка только начата".

Любопытная ассоциация, однако.
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34484648
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerТогда о чем мы спорим?
Ммм... эээ... а покажите мне то место где я с этим спорил?
softwarerТем более. Что-то я с трудом представляю себе сотню заказчиков, каждую ночь высылающих разработчикам бандероль dvd-шек свежего бэкапа.
А зачем каждую ночь? По мере необходимости, да и не у каждого заказчика такие большие базы.
softwarerЗачем? Не проще ли будет откатить ее на дату до "угробили"? Во всяком случае на пару порядков быстрее, я так думаю.
Ну если там данные необратимо изменены, то я слабо себе представляю как это может быть быстрее.
softwarerХм. У Вас своеобразное представление о том, что есть "стрижка только начата".

Вы превозносите технологию, при которой семеро регулярно ждут одного.
Кто эти семеро? Программисты? Нет, т.к. им можно спланировать работу чтобы они не ждали того одного, а делали чего-то другое. Пользователи? Да, пользователи будут ждать пока не появится версия с законченными изменениями. Если изменения очень большие, возможно имеет смысл "в сторонке" сделать некоторые заготовки, а потом уже побыстрее подключить это к проекту. Но выпускать такую недоделку означает то, что из 100 объектов 99 вам позвонят, вышлют гневный факс и будут долго объяснять что ну никак без этого жить не могут, и то что вы сделали нового им нафиг не нужно, и верните все как было (сотый объект - это тот, для кого это делали, он может быть через несколько дней позвонит). А если все накатывать еще и по частям, то потом окажется, что тут забыли, здесь не запустили, а тут вообще результат работы зависит от порядка запуска скриптов, а их не в том порядке запустили. А у вас к серверу доступа нет, и т.д. и т.п. По-моему гораздо лучше бардака не допускать, чем каждый раз выяснять а кто это тут стрижку начал.

softwarerМой пример - я заказал в Германии новую запчасть, и пока она месяц добирается до России, езжу на старой. Заехал сменить колеса - и я хочу именно поменять колеса и ездить на новых колесах и со старой запчастью; Вы предлагаете мне на месяц застрять на автосервисе, дожидаясь синхронного выхода всех изменений, а мое желание называете "стрижка только начата".
Сравнение некорректное, т.к. на старой версии программы работать никто не запрещает.
Корректным будет скорее следующее сравнение:
Вы заказали из Германии новую машину, и Вам ее везут по частям, у вас есть старая машина, которая вполне себе работает. Приходит от новой машины кузов и колеса. Вы говорите - ребята, мне некогда ждать, навесьте пока на мою старую машину новый кузов и колеса, а когда все остальное прийдет, там полностью и соберем, ну и что, что здесь отрезать там подпилить, зато я как бы на новой машине уже. А потом это все развалится, т.к. отрезали и подпилили, а потом про это забыли. Вот к чему такие стрижки по частям приводят.
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34484927
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин МаркА зачем каждую ночь?
Затем, что либо мы пытаемся поддерживать синхронность, либо не пытаемся. Если пытаемся, значит каждую ночь; если не пытаемся - зачем тогда эти бэкапы?

Локшин МаркПо мере необходимости,
Хм. Скажу так: я пока что ни разу не встречался с необходимостью обговорить с заказчиком получение дампов его базы.

Локшин Марк softwarerЗачем? Не проще ли будет откатить ее на дату до "угробили"? Во всяком случае на пару порядков быстрее, я так думаю.
Ну если там данные необратимо изменены, то я слабо себе представляю как это может быть быстрее.
Хм. Признаться, не понял Вашего ответа, особенно что за "необратимо изменены" - я как-то полагал, что скриптами такого добиться практически невозможно, ну разве что выполнив DROP DATABASE. А быстрее.... мне так кажется, что применение ограниченного undo заведомо быстрее, чем накат произвольно большого бэкапа. Для "не быстрее" нужно, чтобы откатываемые изменения по объему были сравнимы с общим объемом БД, что, назовем так, крайне редкий случай.

Локшин Марк softwarerХм. У Вас своеобразное представление о том, что есть "стрижка только начата".
Вы превозносите технологию, при которой семеро регулярно ждут одного.
Кто эти семеро? Программисты?
Да. Точнее, программисты и тестировщики.

Локшин МаркНет, т.к. им можно спланировать работу чтобы они не ждали того одного, а делали чего-то другое.
Марк, Вы только что закольцевали свои рассуждения. Кольцо, конечно, структура неопровергаемая, но не совсем верная.

Давайте договоримся о терминологии: "сейчас" у нас есть версия программы 0. Версия 1 - разрабатываемая версия, которая "скоро" будет выложена в эксплуатацию. Версия 2 - версия, по которой определены или может уже даже разрабатываются задачи, но до эксплуатации еще далеко. По каждой версии есть набор задач: 1.1, 1.2, ... 2.1, 2.2, ....

Так вот, напомню, началось все с моего утверждения о том, что при несинхронной разработке может случиться так, что решение задачи 1.2 будет так или иначе зависеть от изменения, сделанного другим разработчиком в рамках решения задачи 2.1. В результате, скрипт изменений, собранный для задач версии 1, приведет к неработоспособности приложения, и эту вероятность нужно учитывать в технологии. Помните, что Вы ответили? Вот что:

А что это за практика такая? Вася несёт накатывать свой скрипт, потом Петя, потом Саша. Изменения нужно накатывать единовременно и Пети, и Васи, и Саши
Переводя на более формальный язык - все сделанные изменения должны принадлежать одной версии (фактически версия - это набор одновременно накатываемых изменений, согласны?) То есть: работа над задачами 2.x не может быть начата до завершения работ по версии 1.x (подчеркну - не "разработки", а именно работ, включая тестирование.

Это как раз ситуация "семеро - одного", вполне типичная. И что же дальше? А дальше следующим же письмом Вы предлагаете разработчикам не ждать, то есть начать работу над второй версией (безусловно, есть вариант "перейти к разработке вообще другой программы" - но мы же не об этом, я правильно понимаю?). И тем мы возвращаемся к началу: один разработчик сделал нечто в рамках решения задачи 2.1, другой (напомню условия задачи Фрэнки - все на одной базе) - оказался зависим от этого в своем решении 1.2

Итого - признаться, я не понял, каждую же позицию Вы собственно отстаиваете. Такое впечатление, что Вы просто придумываете возражение на каждое утверждение поотдельности, не пытаясь связать их в некую единую точку зрения. {1}

Локшин МаркПо-моему гораздо лучше бардака не допускать, чем каждый раз выяснять а кто это тут стрижку начал.
Я позволил себе пропустить нарисованный Вами апокалипсис по причине {1}. Мне так кажется, Вы не пытались понять сказанное мной, просто возражаете.

Я в данном случае даже не пытаюсь обосновать, что лучше. Я сказал Фрэнки одну вещь:

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

либо придется наложить на себя кандалы очень жесткого регламента одновременных изменений

либо будет вероятность прорыва на production неработоспособной версии

У него на текущий момент ситуация номер три.

Лично мне кажется, что в условиях внутренней автоматизации, как у Frankie, второй вариант просто невыполним - задачи класса "срочно нужно сделать, директор сказал" есть и всегда будут. Но это отдельный вопрос

Локшин МаркСравнение некорректное, т.к. на старой версии программы работать никто не запрещает.
Вы ошибаетесь - бизнес запрещает. Изменения делают не просто так, ради развлечения, а потому, что они кому-то нужны. И если Вы займете позицию почтальона Печкина - "я посылку принес, только я вам ее не отдам" - клиент этого... не одобрит.

Продолжая наши аналогии - мои колеса износились до корда, а мне нужно ехать к клиенту. И предлагаемый Вами вариант "колеса меняем только вместе с регулировкой мотора" меня ну никак не устраивает. Мне нужно поменять колеса, а двигатель отрегулируете, когда я вернусь.
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34490508
Frankie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerВ смысле, учет - клиенты, инсталляции, бухгалтерия и так далее? Хм... не знаю. Взял первый попавшийся модуль учетной системы:
selectinsertupdatedelete480160340140

Ну да. Я в компании только 4 месяца, может быть просто ещё не сталкивался с работой UPDATE/INSERT общих таблиц.

Офф. Что-то многовато у Вас DELETE. Хорошо помню ваши резкие высказывания насчёт удаления данных из базы...

softwarerНу тогда и обсуждать, собственно, особо нечего. Если ваших пользователей устраивает такой уровень сервиса - дорожите этими пользователями :)
Равно как и нас "устраивает" такой уровень пользователей. За продакшн с ошибками нас не штрафуют.

softwarer[quot Frankie]Селекты к счастью в таблице не хранятся, просто в некоторых местах было SELECT *
Хм. Ну так никто же не мешает посмотреть где используется таблица, а не поле? Да и вообще говоря есть полезная привычка переменные называть в соответствии с полями, значения которых они получают.
Просто автор "SELECT *" не подумал о том, что появятся ещё поля, которые в данной выборке будут мешать.

softwarerИ каких таблиц Вы имеете в виду - данных или всякого рода настроек-метаинформации? Если последнее, почему их не скриптуете? Переносите на боевой методом "повторить изменение через GUI редактирования"?
К своему стыду, с метаинформацией так и поступаем... Правда всё ещё усложняется тем, что ID в справочниках не совпадают. Позор наверное... В обещм, определённо займусь в ближайшее время изучением массового копирования данных.

Локшин МаркЗато в QueryAnalyzer'e можно накосячить вообще с синтаксически верным скриптом.
Выделили мышью кусок update table set field = '' из большого скрипта, дальше мышью проскроллировали например на начало скрипта что-то проверить, забыли что у нас что-то выделено и нажали F5. Имеем тот-же результат.
Между прочим, я переодически так делаю :) (не на боевом сервере, и не всегда выделенный кусок имеет какой-то смысл), но это показывает, что ситуация не такая уж и вымышленная.
Мда, если бы я так работал, то... не работал бы! А вообще возможность запускать выделенное очень удобна - у меня есть файлик с отладочными запросами и простым текстом в начале. Целиком физически не запустится.

Локшин МаркА что это за практика такая? Вася несёт накатывать свой скрипт, потом Петя, потом Саша. Изменения нужно накатывать единовременно и Пети, и Васи, и Саши.
У нас по проекту на каждого. База общая. Боюсь что при таком режиме работы мы просто просиживали бы штаны.

softwarerчто за "необратимо изменены" - я как-то полагал, что скриптами такого добиться практически невозможно, ну разве что выполнив DROP DATABASE.
Два случая из недваной практики. 1) Заметил, что в связывающую таблицу попадают одинаковые внешние ID, указывающие на самом деле на разные таблицы. 2) В таблицу вносился ID типа действия вместо ID действия. Количественно, они шли рядом, поэтому ошибку долго не замечали.

softwarerЛично мне кажется, что в условиях внутренней автоматизации, как у Frankie, второй вариант просто невыполним
Точно так.

Локшин МаркСравнение некорректное, т.к. на старой версии программы работать никто не запрещает.
Если бы мы не запрещали - уж точно получили бы через часок-другой кашу в базе. Хотя внешне почти всё бы работало, т.к. клиент работает с параметрами по имени.
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34490642
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FrankieОфф. Что-то многовато у Вас DELETE. Хорошо помню ваши резкие высказывания насчёт удаления данных из базы...
Это не у меня, это у системы, написанной задолго до моего прихода сюда. А удаление данных я действительно не жалую.

FrankieРавно как и нас "устраивает" такой уровень пользователей. За продакшн с ошибками нас не штрафуют.
Да вопрос не в штрафах, вопрос скорее в "стыдно". Ну как если бы Вы зашли в магазин прикупить "Мерседес", а у того при ознакомлении дверцы отвалились бы.

FrankieПросто автор "SELECT *" не подумал о том, что появятся ещё поля, которые в данной выборке будут мешать.
Хм. Не могу сказать про MSSQL, а для Oracle на этот счет существует четкое правило - во-первых, select * без необходимости не применять, а во-вторых, применять его только в гарантированно надежной связке - например, совместно с %rowtype.

FrankieК своему стыду, с метаинформацией так и поступаем... Правда всё ещё усложняется тем, что ID в справочниках не совпадают.
Хм. Наиболее емким описанием лично мне представляется "геморрой". Как раз тот случай, когда можно и наверное нужно скопировать Development с боевого и не иметь таких проблем.

Кстати, для метаинформации я бы наверное не делал ключевое поле автоинкрементным.

FrankieДва случая из недваной практики.
Хм... мы вроде бы говорили о восстановлении тестового сервера, загубленного неудачным патчем.
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34490789
Frankie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerДа вопрос не в штрафах, вопрос скорее в "стыдно". Ну как если бы Вы зашли в магазин прикупить "Мерседес", а у того при ознакомлении дверцы отвалились бы.
Не в таких масштабах. Я не разбираюсь в машинах (только в гонках =) ), но продолжая Вашу аналогию могу сказать, что это примерно как бардчок, крышка которого неплотно закрывается.

Про стыд абсолютно согласен. В этом смысле быстрая выкладка на продакшн тренирует внимательность.

softwarerХм. Не могу сказать про MSSQL, а для Oracle на этот счет существует четкое правило - во-первых, select * без необходимости не применять, а во-вторых, применять его только в гарантированно надежной связке - например, совместно с %rowtype.
И снова, не я select * писал, но пострадал я.

softwarer FrankieДва случая из недваной практики.
Хм... мы вроде бы говорили о восстановлении тестового сервера, загубленного неудачным патчем.
Я привёл примеры, когда хп могут угробить данные так, что восстановить их потом будет очень трудно.
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34490865
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FrankieНе в таких масштабах. Я не разбираюсь в машинах (только в гонках =) ), но продолжая Вашу аналогию могу сказать, что это примерно как бардчок, крышка которого неплотно закрывается.
Не совсем. Явная ошибка на production - это никак не бардачок. Вопрос в том, ощущаете ли Вы себя мерседесом :)

FrankieИ снова, не я select * писал, но пострадал я.
Ну дык я и не приписываю его Вам. Это просто констатация стандартной практики разработки.

Frankie softwarer
Хм... мы вроде бы говорили о восстановлении тестового сервера, загубленного неудачным патчемЯ привёл примеры, когда хп могут угробить данные так, что восстановить их потом будет очень трудно.
Совершенно не трудно. В моем случае -

Код: plaintext
1.
2.
3.
4.
shutdown immediate ;

startup mount exclusive ;

flashback database to timestamp (sysdate- 1 / 24 ) ;

Все - сделали ручкой всем угробищам последнего часа. Для тестовой базы - самое то. Как сделать то же самое для MSSQL - никогда не интересовался, но наверняка возможно, может быть не с такой точностью, а например с точностью до переключения журнала, но так или иначе.....
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34491731
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerКак сделать то же самое для MSSQL - никогда не интересовался, но наверняка возможно, может быть не с такой точностью, а например с точностью до переключения журнала, но так или иначе.....
Может быть добавили в 2005, но в 2000 так отигрывать назад изменения нельзя (только восстановить backup и накатывать на него transaction log backup вперед до какого-то момента).
PS. Про остальное - чуть позже...
...
Рейтинг: 0 / 0
Тестовая БД vs Боевая БД
    #34494092
novise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Frankie
Во-вторых, бывают люди, которые не нуждаются в тестах.

Это шутка.
...
Рейтинг: 0 / 0
54 сообщений из 54, показаны все 3 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Тестовая БД vs Боевая БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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