все что связано с моей работой
Главная » Технические » Автоматизируем установку базы АИСБП 2012

Автоматизируем установку базы АИСБП 2012

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

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

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

Почему WinRar? Просто из всех возможных архиваторов умеющих делать sfx-архивы и запускать указанную программу до/после установки WinRar самый лучший. И хоть я всем и везде ставлю 7z, но одну копию WinRar-а купили только для создания sfx.

Итак, начнем-с… Исчерпывающий порядок обновления, читай алгоритм, как всегда указан в инструкции МинФина, после тщательного изучения данного документа ясно что нас касаются только пункты с первого по шестой:

  1. Отключить всех пользователей от АИСБП. Сделать копию БД Budget11K. Обновление АИСБП в финорганах РО
  2. Запустить “SQL Server Management Studio” пароль “stop”.
  3. Открыть скрипт «Присоединение базы данных 2012 года», скорректировать пути доступа (для поселений проверить пути доступа к базе, найти, где лежит база Budget11K) (диск Е: (F:)) Выполнить.
  4. Выполнить резервное копирование БД Budget12K в «Чистая база2012».
  5. Выполнить скрипт «КОПИРОВАНИЕ классификаторов в бд 2012.sql». Проверить протокол работы на предмет ошибок. В случае обнаружения ошибок, удалить базу Budget12K, затем восстановить ее из копии «Чистая база2012» и обратиться в отдел информатизации минфина РО.
  6. В “SQL Server Management Studio” – Security – Logins (Безопасность – Имена Входа)открыть каждого пользователя (правой кнопкой мыши — Свойства), во вкладке Database Access (Сопоставление пользователей) в верхней таблице «Пользователи сопоставленные с этим именем входа» выбрать базу Budget12K и затем в нижней таблице «Членство в роли базы данных для Budget12K» установить галку (дать доступ) к базе данных Budget12K в поле LU, для Admin – галку в поле Developer.

Разберем по шагам.

Первый пункт отпадает сам собой, т.к. компьютер привезут на обновление на нем кроме нам никто не будет работать.

Второй и третий пункт – надо скопировать файлы базы на поселенческий компьютер, скорректировать путь к базе и выполнить скрипт присоединения.

Четвертый – сделать копию чистой базы. ИМХО – это лишнее, вернее копию надо сделать но после переноса классификаторов. Абсолютно не вижу смысла копии на этом этапе. Просто если на этапе переноса классификаторов если что-то пойдет не так, то чем восстанавливать из копии проще заново скопировать фалы базы и если надо заново присоединить.

Пятый – тут все понятно, просто выполнить скрипт.

И последний шаг – всем пользователям дать права на новую базу. Самый засадный с точки зрения автоматизации. У всех есть набор “стандартных” пользователей, но и есть свои уникальные пользователи. Самое слабое место в алгоритме. НО! было бы желание, а решение найдется. Так родился пост о переносе пользователей.

Разобьем задачу на три части, основную (шаги 2-6), “ДО” (—BEFORE, шаг 1) и “ПОСЛЕ” (—AFTER). В третью часть по нашему алгоритму вроде нечего вынести, но у меня настроена система бэкапов, которую надо будет подправить в связи с новой базой.

Еще небольшое отступление.Определимся с файлами:

  1. sfx.cfg – файл конфига для sfxrar-а.
  2. start.bat – сценарий который будет запускаться после распаковки, наш главный файл.
  3. r.bat – маленький вспомогательный сценарий, который будет делать sfx-архив, для отладочных проб:
"c:\program files\winrar\rar.exe" a -sfx"c:\program files\winrar\default.sfx" -m5 -ep1 -r -x"sfx.cfg" -x"r.bat" "2012.exe" "*"
"c:\program files\winrar\rar.exe" c "2012.exe" -z"sfx.cfg"

небольшое пояснение. В первой строке создаем архив, sfx-модуль используем default.sfx, исключить из путей “базовый путь” (-ep1), это нужно чтоб потом проще было распаковывать, с максимальной степенью сжатия (-m5), со всеми подкаталогами (-r) и исключить файл конфигурации и себя (-x"sfx.cfg" -x"r.bat"). Имя архива 2012, ну и последнее добавить ВСЕ (*). Второй командой к нашему sfx добавляем комментарий в котором указаны параметры распаковки, но об этом ниже. Не получилось почему то у меня сделать это одной командой. Видимо так задумано, сначала архив, а комментарий добавлять уже в созданный архив.

Приступим к реализации.

Раздел “ДО”:

@echo off
echo Установка базы 2012 года
echo Start update 2012 on v13-29 > result.txt
echo ---Перед установкой
echo ---BEFORE >> result.txt
del /F /Q c:\result.txt 
echo ----- Бэкап базы 11-го года
echo ----- create backup >> result.txt
"C:\Program Files\Microsoft SQL Server\90\Tools\Binn\sqlcmd.exe" -S DEPO -U sa -P stop -d master -i before.sql -o 1.txt
type 1.txt >> result.txt
t

Первая строка отключает вывод текста команд. 

2,3. Выводим сообщение о начале установки, вторая строка выводит на экран, а 3я в наш результирующий файл и заодно его очищает/создает. Здесь и далее все что на русском – это будет выводится на экран, по буржуйски – в файл-отчет. Блоки обозначаем “—“, а задания внутри блоков “——“. Это облегчит автоматическую обработку отчетов в будущем, если надо будет ее делать.

4-5. Сообщаем о начале блоке “ДО”.

6. Удаляем, файл-отчета оставшийся от прошлых установок.

7-8. Говорим что будем делать бэкап базы 11-го года.

9. Собственно команда которая выполняет скрипт бэкапа. С параметрами –S, –U и –P думаю понятно, -d указывает базу для которой скрипт, –i имя файла скрипта, –o позволяет указать куда надо вывод работы скрипта записать.

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

И для полноты картины наш before.sql:

backup DATABASE [Budget11K] TO DISK =N'c:\mssql2005\backup\2012_Budget11K-15102011_1721.bak' WITH INIT,NOUNLOAD,NAME=N'База 11, перед установкой 2012',NOSKIP,STATS=10,NOFORMAT

Прежде чем, приступить к описанию основного блока, немного исправим скрипт переноса классификаторов. А именно, добавим в его конец тело скрипта из обновления “Дополнительный скрипт к базе данных Budget12K  (размещено 13.10.2011)” – там просто удаление всех записей об обновлениях клиента больше наших текущих. Плюс к этому, вернее после этого, добавим команды:

execute Apps_AllReportsToAllGroups
GO

это “даст права всем пользователям на все отчеты” – есть такая кнопка на форме “Ввод множества групп”. Ну и просто для удобства переименуем скрипты: присоединения в – attach.sql, а копирование классификаторов в – copy.sql. Еще подготовим скрипт users.sql который прописывает пользователей в новой базе. Делаем папку files и переписываем туда файлы базы. Теперь все готово:

echo ---Копирование файлов базы
echo ---COPY BASE FILES >> result.txt
move /Y files\Budget12K.mdf c:\mssql2005\data\
move /Y files\Budget12K_log.ldf c:\mssql2005\data\
rmdir files

echo ---Права для базы
echo ---ACL FOR BASE FILES >> result.txt
cacls c:\mssql2005\data\Budget12K.mdf /E /P SQLServer2005MSSQLUser$DEPO$MSSQLSERVER:F
cacls c:\mssql2005\data\Budget12K_log.ldf /E /P SQLServer2005MSSQLUser$DEPO$MSSQLSERVER:F

echo ---Выполнение SQL скриптов
echo ---SQL >> result.txt
echo ----- Присоединение базы
echo ----- Execute attach.sql >> result.txt
"C:\Program Files\Microsoft SQL Server\90\Tools\Binn\sqlcmd.exe" -S DEPO -U sa -P stop -d master -i attach.sql -o 1.txt
type 1.txt >> result.txt
echo ----- Копирование справочников
echo ----- Execute copy.sql >> result.txt
"C:\Program Files\Microsoft SQL Server\90\Tools\Binn\sqlcmd.exe" -S DEPO -U sa -P stop -d master -i copy.sql -o 1.txt
type 1.txt >> result.txt
echo ----- Делаем копию чистой базы
echo ----- Execute clear.sql >> result.txt
"C:\Program Files\Microsoft SQL Server\90\Tools\Binn\sqlcmd.exe" -S DEPO -U sa -P stop -d master -i clear.sql -o 1.txt
type 1.txt >> result.txt
echo ----- Даем права пользователям на новую базу
echo ----- Execute users.sql >> result.txt
"C:\Program Files\Microsoft SQL Server\90\Tools\Binn\sqlcmd.exe" -S DEPO -U sa -P stop -d master -i users.sql -o 1.txt
type 1.txt >> result.txt

Думаю тут все понятно, переносим файлы базы, удаляем пустой теперь каталог files, раздаем права на файлы, и выполняем последовательно, согласно нашему алгоритму, скрипты – присоединение, копирование классификаторов, копия чистой базы, и права пользователям на новую базу.

Пояснения думаю требует только блок “Права для базы”. Этими двумя командами (cacls) мы даем полный доступ к файлам базы пользователю от имени которого работает SQLServer.

На всякий случай содержимое clear.sql:

backup DATABASE [Budget12K] TO DISK =N'c:\mssql2005\backup\Чистая база 2012.bak' WITH INIT,NOUNLOAD,NAME=N'Чистая база 2012',NOSKIP,STATS=10,NOFORMAT

На этом можно бы и завершить, наш алгоритм выполнен. Инструкцию по установки с седьмого пункта пользователи сделают сами, т.к. они – то всяко должны знать свои данные лучше меня. Из моего блока “ПОСЛЕ” надо взять только последнюю команду.

Ну и остался блок “ПОСЛЕ”. Он вообще очень специфичный. Я автоматизировал немного бэкапы баз, вот эту систему надо поправить – добавить новую базу. Привожу этот кусок для полноты картины и просто для себя – чтоб не забыть.

echo ---После установки
echo ---AFTER >> result.txt
echo ----- Обновление бэкап-скриптов: all.sql
echo ----- Update Backup script all.sql >> result.txt
echo BACKUP DATABASE [Budget12K] TO DISK = @pathName WITH NOFORMAT, NOINIT, NAME = N'Budget11K', SKIP, NOREWIND, NOUNLOAD, STATS = 10 >> c:\mssql2005\tools\all.sql
echo ----- Новый бэкап-скрипт b12.sql
echo ----- Copy new Backup script b12.sql >> result.txt
move /Y b12.sql c:\mssql2005\tools\
echo ----- Обновление бэкап-скриптов: daily.sql
echo ----- Update Backup script daily.sql >> result.txt
move /Y daily.sql c:\mssql2005\tools\
copy /Y result.txt c:\

Остался только кофиг sfx:

;Расположенный ниже комментарий содержит команды SFX-сценария

Path=c:\distrib\distAISBP_PFO\2012\
SavePath
Setup=c:\distrib\distAISBP_PFO\2012\start.bat
Silent=2
Overwrite=1
Title=Установка базы АИСБП для 2012
License=Установка базы АИСБП для 2012
{

ЧЕРНОЕ ОКНО НЕ ЗАКРЫВАТЬ!!!

Не забудьте файл с результатами (result.txt с диска С:) отправить мне (admin@rayfin.aksay.ru)

Инструкции находятся в папке C:\distrib\distAISBP_PFO\2012\Инструкции
также на сайте http://ikos2123.ru/tag/2012/

ВНИМАНИЕ! Инструкцию "Настройка после установки" выполнить обязательно

}

Быстренько пробежимся по командам:

Path – путь куда распаковывать, выше когда делали архив помните ключик –e1…

Сохранять пути

Setup – какой файл выполнить после распаковки

Silent=2 – делать все тихо и без вопросов, тока лицензию показать. Вернее если лицензия есть то ее показывает всегда.

Overwrite=1 – перезаписывать без вопросов.

Title – заголовок окна

License –собственно лицензия в скобках “{}” пишется текст, понимает некоторые html-теги.

Ну вот собственно и все.

Готовый Zip-архив со всеми файлами кроме файлов базы можно скачать ниже:

Файлы авто-установки базы 2012

Комментариев нет

No comments yet.

RSS feed for comments on this post.

Sorry, the comment form is closed at this time.