Как внести живые изменения в SQL Server Express - PullRequest
3 голосов
/ 15 мая 2011

Я разрабатывал веб-приложение asp.net с использованием VS studio.Я использую SQL Server Express.Во время разработки я тестировал свое веб-приложение на своем сервере.

Каждый раз, когда мне нужно обновить базу данных, я просто удаляю свою старую базу данных (расположенную на моем сервере) и загружаю новую базу данных.Так как я только тестирую, а у моего приложения нет пользователей, это не было проблемой.

Проблема:

Как только мой сайт заработал, я не знаю, как внести измененияв мою БД.Очевидно, я не смогу просто удалить его, так как он будет содержать пользовательские данные.Так как же люди обычно обновляют живую БД.То есть, допустим, мой сайт работает, и теперь мне нужно добавить больше таблиц и хранимых процедур в мою БД.Как бы я сделал это на живом сайте?

Ответы [ 4 ]

4 голосов
/ 15 мая 2011

Чтобы внести изменения в производственную базу данных, вы должны:

  1. Попытаться запланировать отключение, когда будет затронуто наименьшее количество пользователей, разместив информацию, чтобы пользователи знали до
  2. Использование сценариев языка определения данных (DDL) для внесения изменений в таблицы базы данных и потенциально сценариев языка манипулирования данными (DML) для объединения существующих данных с необходимыми изменениями.*

    Сценарии, необходимые для шага 2, должны были быть протестированы в средах разработки и тестирования / контроля качества, чтобы обеспечить как можно меньше проблем в производственной системе.Резервные копии, которые позволяют восстанавливать базу данных в предыдущих версиях приложения, требуются как для сред разработки, так и для тестирования / тестирования.

2 голосов
/ 15 мая 2011

Вам либо нужно:

  • Обновите вашу базу данных в то время, когда никто не будет использовать сайт. OR
  • Убедитесь, что ваши обновления не влияют на работу сайта.

Второй вариант включает в себя предоставление любых новых ненулевых столбцов разумных значений по умолчанию, обеспечение того, чтобы все операторы INSERT использовали списки столбцов (например, INSERT INTO dbo.MyTable (col1, col2, col3) VALUES (...)), и обеспечение того, чтобы новые параметры хранимой процедуры имели значения по умолчанию. Это не исчерпывающий список, но хорошее начало.

1 голос
/ 15 мая 2011

В основном мы создаем сценарии выпуска, посредством которых изменения записываются и повторяются. Таким образом, вы увидите такие вещи, как

IF NOT EXISTS( SELECT * FROM INFORMATION_SCHEMA.COLUMNS 
            WHERE TABLE_NAME = 'myTableName' 
           AND  COLUMN_NAME = 'myColumnName')
BEGIN
     ALTER TABLE myTableName
     ADD myColumnName varchar(50)
END

Вы можете сказать, какие объекты изменились, например:

SELECT
[name],
create_date,
modify_date
FROM sys.tables
ORDER BY
modify_date DESC

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

0 голосов
/ 15 мая 2011

Это зависит от того, какие изменения вы хотите внести в действующую базу данных.

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

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

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

Я не эксперт по ASP.NET, но, насколько я знаю, невозможно обновить приложение ASP.NET без исключения всех активных пользователей.
Так что в этом случае вам придетсявыполните то, что OMG Ponies уже сказал : выберите время, когда затронуто минимально возможное число пользователей, и / или заблаговременно сообщите своим пользователям о запланированном отключении.

...