Ова страница је машински преведена. Прочитајте енглески оригинал. English

IBSurgeon библиотека

Brza konverzija Firebird 2.5 baza podataka u Firebird 3.0

Basil Sidorov, 02-APR-2019, (c) IBSurgeon

Свака верзија Firebird-а има свој формат базе података - O(n)D(isk)S(tructure). До верзије 2.5, мотор базе података може да ради са ODS-ом претходне верзије, али мотор Firebird 3 ради само са сопственим ODS-ом (верзија 12.0).

Да бисте надоградили базу података са Firebird 2.5 на 3.0, потребно је направити резервну копију датотеке базе података помоћу gbak алата у 2.5, а затим је вратити у 3.0.

Наравно, база података мора бити припремљена за конверзију - метаподаци и упити морају бити проверени на компатибилност са Firebird 3.0, а након враћања у Firebird 3, сви објекти са BLR-ом (окидачи, ускладиштене процедуре, итд.) морају бити поново компајлирани.

Ако користимо стандардни приступ, потребно је направити резервну копију базе података на 2.5, а затим инсталирати Firebird 3 и вратити датотеку резервне копије.

Ово је у реду ако имате довољно времена. Али када је ваша база података велика, или имате десетине база података за миграцију, а ограничени сте временом, можете користити стрим конверзију, која је 25-30% бржа.

Идеја је да се користи транспортер:

gbak -b … db25 stdout | gbak -c … stdin db30

Gbak -b из 2.5 уписује резервну копију секвенцијално и усмерава је на stdout стрим, који одмах чита gbak из 3.0 са stdin-а и креира нову базу података.

Овај транспортер треба да користи локални приступ бази података (уграђени), јер ће мрежни пренос података (чак и преко localhost-а) значајно успорити процес.

У наставку разматрамо како извршити стрим резервну копију на Windows-у и на Linux-у.

Windows

Боље је направити посебан скуп Firebird датотека за Windows. Потребно је узети уграђену архиву Firebird 2.5, преименовати fbembed.dll у fbclient.dll, и додати gbak.exe и опционо isql.exe.

За Firebird 3.0 користићемо стандардну архиву.

Минимални скуп (који не захтева runtime VS2008/VS2010) садржи ове датотеке:

Code
25/gbak.exe
25/fbclient.dll
25/firebird.conf
25/firebird.log
25/firebird.msg
25/ib_util.dll
25/icudt30.dll
25/icuin30.dll
25/icuuc30.dll
25/Microsoft.VC80.CRT.manifest
25/msvcp80.dll
25/msvcr80.dll
30/fbclient.dll
30/firebird.conf
30/firebird.msg
30/gbak.exe
30/ib_util.dll
30/icudt52.dll
30/icudt52l.dat
30/icuin52.dll
30/icuuc52.dll
30/msvcp100.dll
30/msvcr100.dll
30/intl/fbintl.conf
30/intl/fbintl.dll
30/plugins/engine12.dll

Искусни администратор/програмер може приметити да датотеке 25/intl/fbintl.dll и 25/intl/fbintl.conf нису укључене. То је тачно, јер gbak не користи скуп знакова за везу и не конвертује податке између скупова знакова. Али, на страни пријемника, Firebird 3.0, потребне су icu* датотеке, јер се скупови знакова користе током креирања индекса (завршни корак резервне копије/враћања).

Препоручује се додати у firebird.conf за Firebird 3 две линије:

Code
MaxUnflushedWrites = -1
MaxUnflushedWriteTime = -1

Такође, добро је поставити различита имена за IpcName параметар за Firebird 2.5 и Firebird 3.0.

Остали параметри, ако желите, могу се променити имајући у виду да током конверзије базе података Firebird 2.5 чита податке, а Firebird 3 уписује податке и креира индексе.

Да бисте убрзали креирање индекса, препоручујемо повећање TempCacheLimit параметра на ~40% доступне RAM меморије (ако је ово наменски рачунар или сервер).

На пример, ако имате 16GB RAM-а, можете поставити

Code
TempCacheLimit=6G

Наравно, ова вредност може бити постављена само ако користите 64-битни Firebird 3, јер било који 32-битни процес не може да алоцира више од 2 гигабајта RAM меморије.

Не морате мењати овај параметар за 2.5, јер не утиче на брзину резервне копије, а сам Firebird 2.5 не може користити више од 2 гигабајта RAM меморије за овај параметар, чак ни 64-битна верзија.

Такође, пре почетка, проверите да је вредност “page buffers” једнака 0 на заглављу базе података (gstat -h имебазе).

Ако је параметар “page buffers” постављен у заглављу базе података, он замењује подешавања из firebird.conf-а, и у случају велике вредности може довести до огромне потрошње меморије и деградације перформанси процеса конверзије.

Затим, копирајте припремљени скуп датотека на циљни систем.

Имајте на уму да морате зауставити редовни сервис Firebird 2.5 пре конверзије.

Затим, покрените командну линију са повишеним правима (Покрени као администратор):

Code
set ISC_USER=<наведите_власника_ваше_базе_или_sysdba>
set ISC_PASSWORD=лозинка
"25/gbak" -z -b -g -v -st t -y 25.log db25 stdout|^
"30/gbak" -z -c -v -st t -y 30.log stdin db30

Овде је цела командна линија окружена двоструким наводницима, симбол | се користи за конкатенацију, а симбол ^ се користи за екранизацију прелома линије (корисно у случају дугих командних линија).

Опција -st(atus) је уведена у Firebird 2.5.8 и омогућава уписивање више информација о процесу резервне копије у датотеку дневника.

Linux

Firebird 3 зависи од tommath библиотеке на Linux-у. На CentOS-у (RHEL) ова библиотека се налази у epel-репозиторијуму, на Ubuntu-у (Debian) у системском репозиторијуму.

На CentOS-у, прво морате омогућити EPEL-репозиторијум и тек онда покренути « yum install libtommath».

На Ubuntu-у, не морате додавати додатне репозиторијуме, али Ubuntu 16 и Ubuntu 18 имају различите верзије пакета - libtommath0 и libtommath1, респективно.

Firebird 3 тражи tommath.so.0, а за Ubuntu 18 потребно је направити симболичку везу од tommath.so.0 ка tommath.so.1. Да бисте то урадили, прво морате пронаћи tommath.so.1. Уобичајена путања на Ubuntu-у - /usr/lib/x86.64- linux -gnu/, али може бити другачија у другим Debian-базираним дистрибуцијама.

Други проблем је што до Firebird 3.0.1, укључујући, није постојао једноставан начин да се инсталирају 2 различите верзије сервера. Опција “компајлирање из изворног кода са префиксом” се овде не разматра.

Firebird 3.0.2 има CORE‑5204 исправку: изградња са -enable-binreloc, (http://tracker.firebirdsql.org/browse/CORE-5204), и посебну опцију инсталатера -path.

Дакле, ако је tommath библиотека, и, ако је потребно, tommath.so.0 симболичка веза инсталирана, можете инсталирати најновију Firebird 3.0.4 дистрибуцију у /opt/fb3 следећом командом: ./install.sh -path /opt/fb3

Након тога, можете зауставити постојећи Firebird 2.5 и покренути стрим конверзију.

Ако користите Firebird 2.5 Classic, запамтите да Classic обично покреће xinetd - дакле, морате онемогућити firebird сервис за xinetd или потпуно зауставити xinetd.

Не морате постављати MaxUnflushed* параметре у firebird.conf-у за Firebird 3 (јер раде само на Windows-у), нити мењати било шта у Firebird 2.5.

Уграђени приступ у Firebird 2.5 на Linux-у није као на Windows-у - Firebird 2.5 ће радити унутар gbak процеса (без мрежног дела), али ће права приступа бити проверена са корисничком базом података, па је потребно навести не само корисничко име власника базе података већ и лозинку:

Code
export ISC_USER=корисничкоиме ISC_PASSWORD=лозинка
/opt/firebird/bin/gbak -b … db25 stdout\
|/opt/fb3/bin/gbak -c … stdin db30

Након успешне конверзије, потребно је уклонити “привремену инстанцу” Firebird 3, затим деинсталирати оригинални 2.5, и тек након тога можете извршити чисту инсталацију Firebird 3.

Боље је инсталирати Firebird 3 из tar.gz, а не из репозиторијума, јер tar.gz инсталира све на погодну локацију /opt/ firebird , а такође је верзија Firebird-а у репозиторијумима обично старија него у tar.gz.

Након што је конверзија завршена и Firebird 3 инсталиран, потребно је проверити да је “firebird” корисник власник датотеке базе података.

Ако није, потребно је то исправити:

Code
chown firebird.firebird имебазе

Резиме

Стрим конверзија је бржа од стандардног приступа (gbak -b, па gbak -c), јер прескаче операције “уписивања у резервну копију” у средини - као резултат, време стрим конверзије је отприлике “време резервне копије плус 10-15%” плус “време за креирање индекса”.

У нашој пракси, стрим конверзија је најмање 25-30% бржа од традиционалног “секвенцијалног” прављења резервне копије и враћања.

Поред уштеде времена и смањења потребе за слободним диском, стрим конверзија има још једну предност - не захтева уклањање постојећег Firebird 2.5, што вам омогућава да се брзо вратите на 2.5 у случају грешке током конверзије.

Контакти

Молимо вас да пошаљете повратне информације и упите IBSurgeon тиму за подршку.