В данной статье я расскажу о процессе обновления баз данных Microsoft SQL Server и предложить программный продукт, который может использоваться при взаимодействии заказчика и исполнителя.
Прежде всего, зачем это нужно
Наша компания занимается разработкой программного обеспечения и в большинстве случаев в качестве СУБД мы используем Microsoft SQL Server. Для определенности будем называть компанию-разработчика «исполнителем », а компанию-клиента – «заказчиком ».В процессе внесения изменений в базу данных программистами исполнителя формируется набор скриптов, созданных вручную или в специализированном П/О.
Впоследствии возникают такие задачи:
- на стороне исполнителя проверить выполнение набора скриптов в тестовой базе данных;
- на стороне заказчика выполнить скрипты в рабочей базе данных клиента;
- у него вообще может быть не установлен SSMS;
- заказчик может не обладать знаниями работы с БД. И не должен по большому счету;
- в случае возникновения ошибок при выполнении скриптов, заказчику будет затруднительно собрать их для отправки разработчикам;
Как мы решаем указанную задачу
Нами был разработан программный продукт «Менеджер обновления баз данных», который состоит из двух программ:- программа для подготовки пакета обновления;
- программа для выполнения пакета обновления;
Программа для подготовки обновления
Программа используется у исполнителя. Программисты с её помощью формируют набор скриптов в один файл.Из особенностей этой программы можно отметить два пункта:
- в формируемый пакет обновления может быть добавлена информация о структуре эталонной базы данных. Если такая информация присутствует в пакете, то заказчик после выполнения обновления может сравнить структуру своей базы с эталонной;
- для заказчика программа выполнения обновления передается в виде одного EXE файла, внутри которого зашиты скрипты и структура эталонной базы.
Программа для выполнения обновления
Как уже упоминалось, запуск программы осуществляется с помощью одного EXE файла. Пользователю в большинстве случаев достаточно ввести регистрационную информацию (кстати, эти значения можно зашить в пакет обновления) и везде нажать «Далее».На втором экране производится обновление. После этого можно провести сравнение зашитой в пакет структуры эталонной базы и текущей (на которой было выполнено обновление).
Анализ расхождения в структуре производится в графическом интерфейсе программы обновления.
К сожалению, просмотр расхождений программистами исполнителя осуществляется в текстовом файле журнала, который впоследствии высылает заказчик. Интересный подход решения этой проблемы предложен в статье Контроль изменения структуры БД . Данная задача не столь критична; программисты могут сами написать скрипт для приведения структуры к целевой.
Программный комплекс распространяется по лицензионному соглашению Freeware, скачать инсталлятор можно по ссылке
: Как правильно обновлять SQL Server
Что если я спрошу: "Все ли обновления установлены на ваш SQL Server?"
Как ответить на такой вопрос? Заглянуть в центр обновления Windows? Это вряд ли поможет. Скорее всего вы увидите там вот такую картину:
Но, как ни странно, это вовсе не означает, что на SQL Server установлены самые свежие обновления!
Для отслеживания обновлений именно для SQL-сервера Микрософт создал специальную страничку — . Положите её себе в закладки:
Но прежде чем идти туда, необходимо выяснить, какая версия установлена у нас прямо сейчас. Нам нужен точный номер, включающий в себя номер построения (build number). Получить его можно посмотрев на системную переменную @@Version :
Запомните эти цифры — только по ним мы сможем определить какие обновления у нас уже установлены, а какие — нет. SQL-сервер, в отличие от операционной системы сам не сообщает нам о каждом установленном обновлении. Поэтому придётся работать с номером @@Version .
Теперь заходим в центр обновления SQL-сервера и видим там удобную табличку:
Здесь нам понадобятся три вещи:
- Во-первых, запомним номер построения, соответствующий этому обновлению. По окончании процедуры обновления @@Version нашего SQL-сервера должна выдавать именно такой номер.
- Во-вторых, обязательно следует посмотреть историю номеров построений, соответствующих обновлениям с последнего сервисного пакета. Это важно, потому что накопительное обновление установится только на предшествующий ему сервисный пакет.
- И в-третьих, полезно посмотреть список исправлений, содержащихся в накопительном пакете. Администратор должен быть в курсе изменений, вносимых этим пакетом.
Посмотрев номера построений предшествующих обновлений, мы увидим, что разрыв в номерах по сравнению с нашей текущей версией подозрительно большой:
Это из-за того, что у нас не установлен сервисный пакет SP1. Придётся сначала поставить его.
И вот теперь у нас есть план действий:
- Устанавливаем сервисный пакет SP1.
- Устанавливаем накопительный пакет обновлений CU4.
Действуем! После установки SP1 проверяем номер @@Version . С исходного 2100.60 он увеличился до 3000.0.
Последнее обновление: 13.07.2017
Для изменения уже имеющихся строк в таблице применяется команда UPDATE . Она имеет следующий формальный синтаксис:
UPDATE имя_таблицы SET столбец1 = значение1, столбец2 = значение2, ... столбецN = значениеN
Например, увеличим у всех товаров цену на 5000:
UPDATE Products SET Price = Price + 5000
Используем критерий, и изменим название производителя с "Samsung" на "Samsung Inc.":
UPDATE Products SET Manufacturer = "Samsung Inc." WHERE Manufacturer = "Samsung"
Более сложный запрос - заменим у поля Manufacturer значение "Apple" на "Apple Inc." в первых 2 строках:
UPDATE Products SET Manufacturer = "Apple Inc." FROM (SELECT TOP 2 * FROM Products WHERE Manufacturer="Apple") AS Selected WHERE Products.Id = Selected.Id
С помощью подзапроса после ключевого слова FROM производится выборка первых двух строк, в которых Manufacturer="Apple". Для этой выборки будет определен псевдоним Selected. Псевдоним указывается после оператора AS .
Далее идет условие обновления Products.Id = Selected.Id . То есть фактически мы имеем дело с двумя таблицами - Products и Selected (которая является производной от Products). В Selected находится две первых строки, в которых Manufacturer="Apple". В Products - вообще все строки. И обновление производится только для тех строк, которые есть в выборке Selected. То есть если в таблице Products десятки товаров с производителем Apple, то обновление коснется только двух первых из них.
В этой статье мы покажем, как обновить пробную (Evaluation Edition) или Express версию SQL Server 2008 R2 до полноценной рабочей версии SQL Standart или Enterprise. С подобной задачей можно столкнуться, когда для тестирования/разработки некого программного продукта устанавливается ознакомительная версия SQL Server. Нередко случается, что после окончания такого тестирования/ окончания периода работы ознакомительной версии, принимается решение перевести систему в промышленную эксплуатацию, для чего необходимо перейти на полнофункциональную редакцию SQL Server, а переустанавливать СУБД не хочется.
Примечание . Инструкция применима также к Microsoft SQL Server 2012 и R2.
Срок работы ознакомительной версии SQL Server SQL 2008 R2 (и более новых версий) – 180 дней . После окончания пробного периода служба SQL Server перестает запускаться. В случае с SQL Server Express — имеется ограничение на размеры БД.
Обновить лицензию лицензии без необходимости переустанавливать SQL Server можно только с младшей редакции до более старшей, например: Evaluation Edition / Express Edition with Advanced Services -> Standard или сразу в Enterprise.
После окончания периода тестирования при попытке открыть SQL Server Management Studio появляется окно с ошибкой:
Evaluation period has expired. For information on how to upgrade your evaluation software please go to http://www.microsoft.com/sql/howtobuy
Обновление редакции MS SQL Server 2008 R2
В первой части мы разберемся, как обновить версию SQL Server с помощью лицензионного ключа приобретенного у Microsoft или партнеров.
Запустим Центр инсталляции SQL (Start -> All Programs -> Microsoft SQL Server 2008 R2 -> Configuration Tools -> SQL Server Installation Center (64-bit)).
Совет . Это же окно можно открыть, запустив setup.exe с установочного диска SQL Server
Перейдем в раздел обслуживания (Maintenance ) и выберем пункт Edition Upgrade (Обновление редакции). Запустится Мастер обновления (Edition Upgrade Wizard).
И, следуя подсказкам мастера, введем лицензионный ключ SQL Server-а в соответствующее поле.
Затем нужно выбрать какую копию (инстанс) SQL Server нужно обновить.
В итоговом отчете будет указан статус апгрейда версии и ссылка на подробный текстовый лог.
Проверить, какая редакция SQL Server используется можно с помощью SQL Server Management Studio , щелкнув ПКМ по имени инстанса. В нашем примере это SQL Server Enterprise.
Ту же самую операцию можно выполнить и из командной строки, запустив с указанными параметрами файл setup.exe с диска с дистрибутивом SQL Server.
Setup.exe /Q /ACTION=editionupgrade /INSTANCENAME=
Совет . При обновлении редакции с SQL Server Express, нужно дополнительно включить службу SQL Server Agent и с помощью SQL Server Configuration Manager задать параметры служебной учетной записи для службы SQL Server Agent.
Обновление до корпоративной Enterprise версии SQL Server (Volume License)
В том случае, если вы захотите обновить используемую версию SQL Server по программе корпоративного лицензирования Microsoft, вы будете удивлены, что в центре корпоративного лицензирования Microsoft Volume Licensing Service Center (MS VLSC) ключи для SQL Server отсутствуют.
Дело в том, что ключ интегрирован непосредственно в дистрибутив. Самое интересное, что поддержка VLSC рекомендует удалить установленный SQL Server и переустановить его с помощью скачанного c VLSC iso-файла с дистрибутивом SQL.
К счастью, все таки есть возможность получить правильный ключ непосредственно из дистрибутива
![](https://i1.wp.com/winitpro.ru/wp-content/uploads/2014/10/download-sql-srv-msdn.jpg)
Под обновлением данных в БД подразумевается изменение значений в существующих записях таблицы. При этом возможно как изменение значений полей в группе строк (даже всех строк таблицы), так и правка значения поля отдельной строки.
В SQL, изменить запись в таблице БД можно с помощью команды UPDATE. В самом минимальном виде команда обновления данных выглядит следующим образом:
UPDATE таблица SET поле = значение
Здесь, UPDATE – команда указывающая, что запрос на обновление данных;
таблица – название таблицы, в которой будет проводиться изменения;
SET – команда, после которой через запятую указываются поля с назначаемыми им значениями;
поле – поле таблицы, в которое будет внесено изменение;
значение – новое значение, которое будет внесено в поле.
Например, если необходимо задать полю во всех строках таблицы значение равное нулю, можно выполнить такой запрос:
UPDATE goods SET price = 0
В этом случае, поле price абсолютно во всех имеющиеся строках таблицы примет значение 0.
Изменение одного значения
Изменение значения всех полей в таблице необходимо крайне редко. Чаще всего необходимо поменять значение какой-то конкретной записи. Для этого в завершении строки с командой UPDATE будет добавлена директива WHERE, в которой указывается условие, определяющее с какой именно строкой нужно выполнить операцию обновления.
Имеется таблица:
Для примера, нужно обновить стоимость товара с известным нам его значением num. Для этого, выполним следующий запрос:
UPDATE goods SET price = 150 WHERE num = 2
Теперь, перед операцией изменения полей, будет выбрана строка, удовлетворяющая условию num = 2. Такая строка в таблице одна. В этой стоке цена и будет изменена на значение 150. В результате получим таблицу с измененной ценой товара.
Внесение изменений в несколько строк с условием отбора
Если вспомнить все многообразие условий в запросе , можно представить себе насколько разнообразными могут быть выборки. Поэтому и запросы на обновления могут выполняться либо с одной строкой, либо с группой строк, либо со всеми строками таблицы. Все зависит от стоящей перед вами задачи, а так же с какими строками таблицы нужно выполнять операции обновления.
Например, мы хотим уменьшить в два раза цену всех товаров, которые сейчас стоят от 100 и более. Запрос:
UPDATE goods SET price = price / 2 WHERE price >= 100
Условие WHERE здесь содержит правило, по которому будут выбраны только товары с ценой равной или более 100, а те товары, цена у которых ниже 100, затронуты запросом не будут.
price = price / 2 – формула, по которой будет вычисляться новая цена товаров. Новая цена будет записана равной старой цене поделенной на два.
В результате выполнения такого запроса получим таблицу с измененными записями:
Обновление значений в нескольких полях строки
При необходимости обновлять сразу несколько полей, все поля с их значениями указываются после директивы SET через запятую. Например, нужно изменить название и цену товара с кодом 2 на «утюг», стоимостью 300:
UPDATE goods SET title = "утюг" , price = 300 WHERE num = 2
Такой запрос каждому соответствующему полю в строке назначит его значение. А условие укажет, в какой именно строке будут выполнены изменения.
Выше приведены основные виды операций обновления. На их основе формируется запросы для решения большинства задач изменения данных в разработке с применением SQL.