Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Версионность таблиц. Как сделать?  [new]
Hoi
Member

Откуда:
Сообщений: 51
У меня следующая задача: есть база на 2000ом серваке. Она стоит у заказчика(он же тестер), такая же стоит у разработчика. Идет развитие проекта, поэтому база будет претерпевать еще изменения.
Задача как-то упростить обновление базы заказчика максимально избегая потери его данных. База забита определенными данными для тестирования продукта и забивать ее заново при обновлении структуры потеря времени.

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

Хотелось бы услышать мнение по этой задаче в целом и по нижеприведенным вопросам

1. Есть ли готовые программные (и/или организационные) решения для этой задачи

Если нет, то

2. Можно ли как-то автоматизировать обновление версии таблицы при ее изменении (что-то вроде тригера на событие ALTER TABLE), т.к. базу меняют несколько разработчиков и нет уверенности, что каждое изменение будет сохранено в виде отдельного скрипта.

3. Какие могут возникнуть исключительные ситуации про обновлении таблиц заказчика таким образом(ALTER TABLE)? что-то, что обязательно должно решаться последовательно через бакап таблицы, обновление структуры и залив старых данных.


И еще вопрос до кучи, не в тему.
Была такая проблема:
Есть таблица, от нее зависят много других таблиц(через foreign key), вьюх, хранимок. Изменяю (с помощью Enterprise Managera от 2005) размерность одного поля (не состоящего в ключах, но помеченное как identity). При выгрузке скрипта базы, вьюхи, зависящие от этой таблицы не считают себя таковыми и идут практически первыми в скрипте, вследствие чего, конечно же, не создаются в новой базе. Enterprise Manager по прежнему показывает наличие тех самых зависимостей, а вот некий (точно не помню) SQL Lite Manager говорит, что эти вьюхи и таблицы все же потеряли свои зависимости от нее. Пересоздание вьюх лечит это дело. С таблицами пока не решили. Скажите, может я сделал какую-то классическую ошибку или не поставил нужного сервис пака и в каких случаях вьюхи теряют свои зависимости(при реальном наличии всех необходимых объектов в базе)?
8 фев 08, 22:08    [5266614]     Ответить | Цитировать Сообщить модератору
 Re: Версионность таблиц. Как сделать?  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Уж сколько раз твердили миру...
СИСТЕМЫ КОНТРОЛЯ ВЕРСИЙ при разработке надо использовать. А не EM'ом в какую-то там общую разрабатываемую базу лазить.

И не будет тогда ни одной проблемы из перечисленных в этой огромной портянке.
9 фев 08, 00:13    [5267016]     Ответить | Цитировать Сообщить модератору
 Re: Версионность таблиц. Как сделать?  [new]
Hoi
Member

Откуда:
Сообщений: 51
Привидите пример для базы данных, плиз. (SVN не в счет).
9 фев 08, 01:22    [5267148]     Ответить | Цитировать Сообщить модератору
 Re: Версионность таблиц. Как сделать?  [new]
ГСА
Guest
Hoi
Привидите пример для базы данных, плиз. (SVN не в счет).
Пример чего?
9 фев 08, 02:18    [5267191]     Ответить | Цитировать Сообщить модератору
 Re: Версионность таблиц. Как сделать?  [new]
gophph
Member

Откуда: Днепропетровск
Сообщений: 154
просто изменения надо делать не в ЕМ, а сразу скрипты на обновление базы писать, которые включать в сервиспаки. триггера на sysobjects тоже не лучший вариант
9 фев 08, 11:19    [5267336]     Ответить | Цитировать Сообщить модератору
 Re: Версионность таблиц. Как сделать?  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3217
Hoi
Привидите пример для базы данных, плиз. (SVN не в счет).
QA умеет интегрироваться с VSS. Да, там все не просто, организовано не самым привычныи образом и надо немного поковыряться ручками, чтобы все настроить, но такая возможность есть.

Для 2005 выбор богаче: во-первых, есть VSDBPro, которая влет интегрируется с Team Server / VSS, а во-вторых, для пуристов оставлен какой-то функционал в SSMS, аналогичный оному в QA.

Вести проекты для 2000 в DBPro можно теоретически, но на практике череповато глюками, на форуме упоминалось о проблемах. С другой стороны - ну сколько вы еще просидите на 2К, если в этом году уже 2008 RTM выходит?..
9 фев 08, 14:03    [5267498]     Ответить | Цитировать Сообщить модератору
 Re: Версионность таблиц. Как сделать?  [new]
Ыукупф
Member

Откуда:
Сообщений: 36
У нас используется ApexSQL Diff (стоит порядка 300-400 баксов, точно не помню)

+:
адекватное сравнение структуры, хранимых процедур и тд

сравнение данных (для словарей например)

-:
скрипты генерятся не всегда в нужном порядке (например добавил колонку и поправил хранимку - сначала меняется хранимка, потом добавляется колонка, скрипт получается нерабочий). Гемор при нечастом обновлении - у нас три среды - разработки, тестовое окружение и живая система. Применение изменений на тестовое окружение порядка 10-30 минут, на живое - не меньше часа обычно (из-за нарушенного порядка)
-- имеется в виду именно применение скриптов на изменение структуры и добавление нужных данных с использованием этого тула, дополнительные работы не учитываю

не знает, что такое синонимы

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

при сравнении данных и огромном количестве таблиц - нет кнопки Deselect all, приходится ненужные таблицы отключать вручную. Там, конечно, можно сохранять проекты, но как-то криво по-моему сделано, во всяком случае, лично для меня это не прижилось

не минус программы, но все же стоит об этом помнить, когда забываешь - неприятно. При добавлении колонки not null c дефолтом из вновь созданного словаря, естественным образом ломается скрипт

Общие впечатления: Программа стоящая, экономит кучу времени по сравнению скажем, с накатыванием альтеров из репозитория (учитывая, что не всегда изменения там сохраняются)
9 фев 08, 14:48    [5267557]     Ответить | Цитировать Сообщить модератору
 Re: Версионность таблиц. Как сделать?  [new]
Schwan
Member

Откуда: г. Владимир
Сообщений: 522
Hoi

Представляется разумным ввести версионность таблиц в базе, т.е. в некой таблице хранить имена таблиц и их текущие версии.


Зачем в некой таблице? Прямо в свойствах (extended propertys) этой таблицы или вьюса.

для работы с ними служат функции

fn_listextendedproperty

sp_addextendedproperty

sp_dropextendedproperty

sp_updateextendedproperty
9 фев 08, 15:35    [5267599]     Ответить | Цитировать Сообщить модератору
 Re: Версионность таблиц. Как сделать?  [new]
Hoi
Member

Откуда:
Сообщений: 51
То Ennor Tiegael:
Спасибо, почитаю про DBPro. Не знал про Query Analyzer - посмотрю. И еще я уточню - т.е. у этих продуктов есть возможность сравнить две базы и выдать скрипт на обновление?
Насчет 2К, это некоторые заказчики на нем сидят.

То Ыукупф:
Спасибо, это именно то, что я ищу, но возможно с оплатой будут проблемы, так что на первое время мне нужно найти либо бесплатное ПО, либо организационное решение. Спасибо за описание плюсов и минусов, я как-то упустил из виду, что скрипты на обновление тоже должны строиться с учетом зависимостей.

То Schwan:
Спасибо, полезное замечание, учту.

По прежнему интересует мой последний вопрос из первой темы, насчет потери зависимостей при редактировании таблицы, что это: глюк, несоблюдение правил апдейта, известный баг? И как надо делать, чтобы подобного не возникало?
10 фев 08, 20:52    [5269233]     Ответить | Цитировать Сообщить модератору
 Re: Версионность таблиц. Как сделать?  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3217
Hoi
Спасибо, почитаю про DBPro. Не знал про Query Analyzer - посмотрю. И еще я уточню - т.е. у этих продуктов есть возможность сравнить две базы и выдать скрипт на обновление?
DBPro умеет сравнивать как схемы, так и данные в таблицах. Скрипты генерятся... ну, не идеально конечно, но в большинстве случаев вполне корректные. Было несколько проблем при сравнении таблиц с FTS, но сейчас как-то не сталкиваюсь больше. Возможно, поначалу что-то не так делал.
Hoi
По прежнему интересует мой последний вопрос из первой темы, насчет потери зависимостей при редактировании таблицы, что это: глюк, несоблюдение правил апдейта, известный баг? И как надо делать, чтобы подобного не возникало?
Да, это классика. Читать про sp_refreshview, ну и вообще поиск по форуму.
10 фев 08, 21:23    [5269340]     Ответить | Цитировать Сообщить модератору
 Re: Версионность таблиц. Как сделать?  [new]
Hoi
Member

Откуда:
Сообщений: 51
Спасибо, углубляюсь в чтение.. :)
10 фев 08, 21:45    [5269378]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Версионность таблиц. Как сделать?  [new]
уТКа
Member

Откуда: Страна дураков и разбитых дорог
Сообщений: 1266
версионность Базы Данных
18 ноя 09, 21:12    [7947502]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить