o_v_a
Member
Откуда: Тула
Сообщений: 1087
|
Грабли расставлены, делаем работу над ошибкой.
Т.к. на некоторых серверах возникла необходимость устанавливать 64-битный Firebird 2.5 взамен 32-битного 1.5, то всплыла несовместимость: 64-разрядные версии Firebird могут работать с базами, созданными 32-битными версиями, только начиная с ODS 11.1. Так что при таком раскладе с базой, созданной 32-битной "полуторкой" в ODS 10.1, невозможно было работать с помощью 64-битного Firebird 2.5.
Изменил алгоритм работы скрипта.
Алгоритм работы стал такой: - запрос путей и паролей - проверка текущего каталога и указанных путей на предмет наличия в них необходимых файлов (инсталлятор, деинсталлятор, наличие уже установленного Firebird 2.5 и пр.) - проверка открытых сетевых соединений на порт 3050 - копирование базы пользователей security.fdb - бэкап базы пользователей security.fdb gbak'ом от Firebird 1.5 - резервное копирование базы данных - удаление Firebird 1.5 штатным деинсталлятором - установка Firebird 2.5 инсталлятором - запуск службы (обычно уже запущена инсталлятором) - восстановление базы пользователей security2.fdb в формате ODS 11.2 gbak'ом от Firebird 2.5 - восстановление базы данных в формате ODS 11.2 с применением -FIX_FSS_METADATA gbak'ом от Firebird 2.5 - замена базы данных
Если кому надо ставить именно 64-битный, то либо инсталлятор его переименовывайте как 32-битный, либо по тексту скрипта правьте имя проверяемого и запускаемого инсталлятора Firebird 2.5.
Можно и choice в скрипт добавить, чтоб имя инсталлятора подставлять, а не жестко прописывать. Но тогда и два инсталлятора Firebird со скриптом таскать не забывать... Я не заморачивался - переименовывал инсталлятор.
+ | @echo off
cls
rem !!!!!!!!!!!!!Запросы параметров!!!!!!!!!!! echo ____________________________________________________ echo Укажите, пожалуйста, некоторые необходимые параметры: echo ____________________________________________________
set /P FB15_PATH=1) Путь к каталогу Firebird 1.5 [%programfiles%\Firebird\Firebird_1_5]: if "%FB15_PATH%"=="" (set FB15_PATH=%programfiles%\Firebird\Firebird_1_5) set /P DB_PATH=2) Путь к каталогу с базой данных [d:\AWTSYS]: if "%DB_PATH%"=="" (set DB_PATH=d:\AWTSYS) set /P DB_FILE=3) Файл базы данных [buster.fdb]: if "%DB_FILE%"=="" (set DB_FILE=buster.fdb) set /P SYSDBA_PASSWORD=4) Пароль пользователя SYSDBA [1]: if "%SYSDBA_PASSWORD%"=="" (set SYSDBA_PASSWORD=1)
cls
echo Проверяю соединения Firebird SQL. echo Не допускается наличие ни серверных, ни клиентских соединений... echo * netstat -n | find ":3050 " echo * for /F "tokens=*" %%i in ('netstat -n ^| find ^":3050 ^" ^| find /C ^"EST^"') do set EST=%%i if %EST%==0 (goto CONT) goto err_NETSTAT
:CONT echo Установленных соединений на порт 3050 не обнаружено. echo ____________________________________________________ echo Нажмите пробел для продолжения pause >nul echo * echo * echo * echo ____________________________________________________ echo Проверяю наличие необходимых файлов и соблюдение условий... echo ____________________________________________________ if not exist "%DB_PATH%\%DB_FILE%" (goto err_DB) echo Файл базы данных %DB_PATH%\%DB_FILE% ... OK if not exist "%FB15_PATH%\security.fdb" (goto err_security) echo База SQL-пользователей %FB15_PATH%\security.fdb ... OK if not exist "%FB15_PATH%\unins000.exe" (goto err1) echo Деинсталлятор %FB15_PATH%\unins000.exe ... OK if not exist "%FB15_PATH%\bin\gstat.exe" (goto err_gstat) echo Программа %FB15_PATH%\bin\gstat.exe ... OK echo _____________________________________________ echo Проверяю ODS базы данных %DB_PATH%\%DB_FILE%... echo _____________________________________________ cd bin gstat -h -user sysdba -password %SYSDBA_PASSWORD% localhost:%DB_PATH%\%DB_FILE%| find "10.1" > gstat.testODS.delme for /F "tokens=*" %%i in ('find /C "10.1" ^< gstat.testODS.delme') do set ODS_OK=%%i If %ODS_OK%==0 (goto err_ODS) echo Версия ODS 10.1 - ОК echo * echo * echo * cd.. if not exist "%FB15_PATH%\Firebird-2.5.1.26351_1_Win32.exe" (goto err2) echo Инсталлятор %FB15_PATH%\Firebird-2.5.1.26351_1_Win32.exe ... OK if exist %programfiles%\Firebird\Firebird_2_5\security2.fdb (goto err_FB25exist) echo Установка Firebird 2.5 ... не обнаружена echo * echo Все необходимые файлы присутствуют! echo Необходимые условия для процесса замены версии серевера Firebird соблюдены! echo ____________________________________________________ echo Нажмите пробел для продолжения pause >nul
for /F "tokens=1 Delims=:" %%i in ("%FB15_PATH%") do set DRV=%%i %DRV%: cd %FB15_PATH%
cls
color 0C
echo **************** В Н И М А Н И Е !!! ************************************* echo Прежде, чем вы продолжите выполнение данного скрипта, рекомендуем echo убедиться, что Вы сделали копию оригинальной базы данных echo * echo *** %DB_PATH%\%DB_FILE% echo * echo и файла базы SQL-пользователей for /F "tokens=*" %%i in ('pwd') do set PWD=%%i echo * echo *** %PWD%\security.fdb echo * echo Также убедитесь в том, что у вас имеется инсталлятор Firebird 1.5 echo для восстановления в случае неудачи. echo Скопировать этот инсталлятор можно по ссылке echo * echo *** http://sourceforge.net/projects/firebird/files/firebird-win32/1.5.6-Release/Firebird-1.5.6.5026-0-Win32.exe/download echo * echo * echo Нажмите пробел для продолжения или CTRL+C для завершения выполнения pause >nul
color 08
cls
echo Выберите вариант установки Firebird SQL ECHO 1 - Superserver (по умолчанию) ECHO 2 - Classic server
CHOICE /C 12
IF errorlevel 2 goto CS IF errorlevel 1 goto SS
:CS set ServerType=ServerComponent\ClassicServerComponent set ST=Classic goto 1
:SS set ServerType=ServerComponent\SuperServerComponent set ST=Superserver
:1 cls
rem !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! echo ____________________________________________________ echo Вы указали следующие параметры: echo ____________________________________________________ echo Путь к Firebird SQL 1.5: %FB15_PATH%\ echo Путь к каталогу с базой данных: %DB_PATH% echo Файл базы данных: %DB_FILE% echo Пароль пользователя SYSDBA: %SYSDBA_PASSWORD% echo Вариант установки Firebird 2.5: %ST% echo ____________________________________________________ echo Все готово для начала процесса замены версии серевера Firebird! echo ____________________________________________________ echo Нажмите пробел для продолжения или CTRL+C для завершения выполнения pause >nul echo * echo * echo * echo _____________________________________________ echo Копирую базу SQL-пользователей security.fdb -- security.org echo _____________________________________________ copy security.fdb security.org if exist "%FB15_PATH%\security1.fbk" (del "%FB15_PATH%\security1.fbk") echo _____________________________________________ echo Выполняю бэкап базы пользователей... echo _____________________________________________ echo cd bin gbak -user sysdba -password %SYSDBA_PASSWORD% -b -v localhost:"%FB15_PATH%\security.fdb" "%FB15_PATH%\security1.fbk" echo * echo * echo * echo Завершен бэкап базы данных SQL-пользователей. echo Оцените результат в строках выше. echo ____________________________________________________ echo Нажмите пробел для продолжения pause >nul echo * echo * echo * echo _____________________________________________ echo Резервное копирование базы данных...(1/9) echo _____________________________________________ if exist "%DB_PATH%\%DB_FILE%.fbk" (del /q "%DB_PATH%\%DB_FILE%.fbk") if exist "%DB_PATH%\%DB_FILE%.fb1" (del /q "%DB_PATH%\%DB_FILE%.fb1") if exist "%DB_PATH%\%DB_FILE%.fb2" (del /q "%DB_PATH%\%DB_FILE%.fb2") gbak -user sysdba -password %SYSDBA_PASSWORD% -b -v localhost:"%DB_PATH%\%DB_FILE%" "%DB_PATH%\%DB_FILE%.fbk" echo * echo * echo * echo Завершен бэкап базы данных echo Оцените результат в строках выше. echo ____________________________________________________ echo Нажмите пробел для продолжения pause >nul cd.. echo _____________________________________________ echo Удаляю Firebird SQL 1.5...(2/9) echo _____________________________________________ unins000.exe /verysilent echo Удаление Firebird SQL 1.5 выполнено! echo * echo * echo * echo _____________________________________________ echo Устанавливаю Firebird SQL 2.5...(3/9) echo _____________________________________________
Firebird-2.5.1.26351_1_Win32 /VERYSILENT /LOG /NORESTART /FORCE /TASKS="!UseGuardianTask,UseServiceTask,AutoStartTask,!MenuGroupTask,CopyFbClientAsGds32Task,CopyFbClientToSysTask" /COMPONENTS="%ServerType%,ServerComponent, DevAdminComponent,ClientComponent" /NOICONS echo Установка завершена! echo * echo * echo * echo _____________________________________________ echo Запуск службы FirebirdServerDefaultInstance... echo _____________________________________________ net start FirebirdServerDefaultInstance echo * echo * echo * echo _____________________________________________ echo Копирую алиасы...(4/9) echo _____________________________________________ rem copy security.fdb "%programfiles%\Firebird\Firebird_2_5" copy aliases.conf "%programfiles%\Firebird\Firebird_2_5" cd "%programfiles%\Firebird\Firebird_2_5\bin" echo * echo * echo * echo _____________________________________________ echo Преобразование базы SQL-пользователей...(5/9) echo _____________________________________________ if exist "%programfiles%\firebird\firebird_2_5\security.fdb2" (del "%programfiles%\firebird\firebird_2_5\security.fdb2") echo Выполняю восстановление базы пользователей в формате ODS 11.2... gbak -user sysdba -password masterkey -v -p 16384 -c "%FB15_PATH%\security1.fbk" localhost:"%programfiles%\Firebird\Firebird_2_5\security.fdb2" echo * echo * echo * echo Завершено восстановление базы данных SQL-пользователей. echo Оцените результат в строках выше. echo ____________________________________________________ echo Нажмите пробел для продолжения pause >nul
echo * echo * echo * echo _____________________________________________ echo Модификация базы пользователей...(6/9) echo _____________________________________________ isql -user sysdba -password masterkey localhost:"%programfiles%\Firebird\Firebird_2_5\security.fdb2" -i "%ProgramFiles%\Firebird\Firebird_2_5\misc\upgrade\security\security_database.sql" echo Выполнено! echo * echo * echo * echo _____________________________________________ echo Подмена базы пользователей...(7/9) echo _____________________________________________ cd.. rename security2.fdb security2.org rename security.fdb2 security2.fdb echo Выполнено! cd bin echo * echo * echo * echo _____________________________________________ echo Восстановление базы данных в формате ODS 11.2 ...(8/9) echo _____________________________________________ gbak -user sysdba -password %SYSDBA_PASSWORD% -FIX_FSS_METADATA WIN1251 -p 16384 -c -v "%DB_PATH%\%DB_FILE%.fbk" localhost:"%DB_PATH%\%DB_FILE%.fb2" echo * echo * echo * echo Завершено восстановление базы данных SQL-пользователей. echo Оцените результат в строках выше. echo ____________________________________________________ echo Нажмите пробел для продолжения pause >nul echo * echo * echo * echo _____________________________________________ echo Замена базы данных...(9/9) echo _____________________________________________ rename "%DB_PATH%\%DB_FILE%" "%DB_FILE%.fb1" rename "%DB_PATH%\%DB_FILE%.fb2" "%DB_FILE%" echo Оригинальный файл базы данных сохранен под именем %DB_FILE%.fb1 echo * echo * echo * echo _____________________________________________ echo Скрипт завершил работу! echo _____________________________________________
goto ex
:err_NETSTAT echo Найдены открытые соединения на порт 3050! echo Завершите работу приложений, работающих с этим echo или другими серверами Firebird echo Работа скрипта будет завершена. goto ex
:err_FB25exist echo Найден каталог %programfiles%\Firebird\Firebird_2_5 echo Необходимо удалить существующую инсталляцию Firebird_2_5 echo и удалить этот каталог в том числе. echo Работа скрипта будет завершена. goto ex
:err_DB echo Не могу найти оригинальную базу данных %DB_PATH%\%DB_FILE% echo Возможно, вы опечатались при вводе имени файла. echo Работа скрипта будет завершена. goto ex
:err_security echo Не могу найти базу данных SQL-пользователей echo %FB15_PATH%\security.fdb echo Если была попытка неудачного обновления сервера, echo то установите Firebird 1.5 заново goto ex
:err_gstat echo Не могу найти утилиту %FB15_PATH%\bin\gstat echo Если была попытка неудачного обновления сервера, echo то установите Firebird 1.5 заново. echo Либо вы неверно указали каталог существующей установки Firebird 1.5: echo %FB15_PATH% goto ex
:err_ODS echo База данных %DB_PATH%\%DB_FILE% echo не в формате Firebird 1.5! echo Если была попытка неудачного обновления, echo то восстановите базу данных из резервной копии goto ex
:err1 echo Не найден файл удаления Firebird 1.5 echo %FB15_PATH%\unins000.exe echo Если была попытка неудачного обновления сервера, echo то установите Firebird 1.5 заново goto ex
:err2 echo Ошибка установки Firebird 2.5 echo Не найден установочный файл Firebird-2.5.1.26351_1_Win32.exe echo Скопируйте этот файл в каталог, в который в текущий момент echo уже установлен Firebird 1.5 echo Либо вы неверно указали каталог существующей установки Firebird 1.5: echo %FB15_PATH% goto ex
:ex echo _____________________________________________ echo Нажмите любую клавишу для завершения... pause > nul
|
|