Firebird 2.5 ma'lumotlar bazalarini ODS12 formatiga (Firebird 3.0) oqimli konvertatsiya qilish

Firebird-ning har bir versiyasida ma'lumotlar bazasi disk tuzilishi formatining o'z versiyasi mavjud, O(n)D(isk)S(truktura). 2.5 inklyuziv versiyasigacha Firebird dvigateli oldingi versiyalarning ODS bilan ishlashi mumkin edi, ya'ni eski versiyalardagi ma'lumotlar bazalari yangi versiyada ochilgan va moslik rejimida ishlagan, ammo Firebird 3.0 dvigateli faqat o'zining ODS versiyasidagi ma'lumotlar bazalari bilan ishlaydi. 12.0.

3.0 ga o'tish uchun 2.5 dan ma'lumotlar bazasini zaxiralash/tiklash orqali yangi formatga aylantirish kerak. Albatta, biz ma'lumotlar bazasi oldindan konvertatsiya qilish uchun tayyorlangan deb taxmin qilamiz - ya'ni. metama'lumotlar va so'rovlar Firebird 3.0 bilan muvofiqligi tekshirildi.

Agar siz standart yondashuvga amal qilsangiz, bu 2.5 versiyasiga zaxiralashni, keyin 3.0 ni o'rnatishni va tiklashni anglatadi. Agar sizda yetarli vaqt bo'lsa, bu protsedura qabul qilinadi, lekin katta ma'lumotlar bazalarini ko'chirishda yoki bir vaqtning o'zida bir nechta o'nlab ma'lumotlar bazalarini ko'chirishda va vaqt juda muhim bo'lsa, siz 30-40% tezroq bo'lgan oqimli konversiyadan foydalanishingiz mumkin. Buni qanday qilish kerak (quyida) Windows va ostida Linux), kesma ostida o'qing.

Umumiy fikr shundan iboratki, biz ishlarni tezlashtirish uchun quvur liniyasidan foydalanamiz:

gbak -b … база25 stdout | gbak -c … stdin база30

2.5 dan Gbak chiziqli formatda zaxira nusxasini yaratadi va uni stdout-ga yuboradi, u darhol stdin orqali 3.0 dan gbakni tanlaydi va yangi ma'lumotlar bazasini yaratadi.

Bunday quvur liniyasini mahalliy (fayl) kirish usuli bilan tashkil qilish kerak, chunki tarmoqqa kirish (hatto localhost orqali ham) jarayonni sezilarli darajada sekinlashtiradi.

Quyida biz tafsilotlarni ko'rib chiqamiz Windows и Linux.

Windows

taqdirda Windows Eng oson yo'li - Firebirdning butunlay mustaqil versiyasini yaratish. Buning uchun quyidagilarni bajaring: Embed-arxiv Firebird 2.5, fbemded.dll nomini fbclient.dll ga o'zgartiring, "muntazam" 2.5 arxividan gbak.exe va (ixtiyoriy) isql.exe yordam dasturlarini qo'shing.

Firebird 3.0 dan foydalanadi yagona yig'ilish va hech qanday o'zgartirishni talab qilmaydi.

Eng minimal versiya (maqsadli tizimda VS2008/VS2010 ish vaqti kutubxonalarini o'rnatishni talab qilmaydi) quyidagi fayllarni o'z ichiga oladi:

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

Tajribali administrator 2.5 intl/fbintl.dll va intl/fbintl.conf fayllarini o'z ichiga olmaydi. Bu to'g'ri, chunki gbak ulanish belgilari to'plamidan foydalanmaydi va ma'lumotlarni belgilar to'plamlari o'rtasida o'zgartirmaydi, lekin Firebird 3.0 ning "qabul qiluvchi" tomonida bu fayllar indekslarni yaratishda kerak bo'ladi.

Firebird.conf da Firebird 3.0 ni qo'shish tavsiya etiladi:

MaxUnflushedWrites = -1
MaxUnflushedWriteTime = -1

Bundan tashqari, 2.5 va 3.0 uchun turli xil IpcName qiymatlarini o'rnatish tavsiya etiladi.

Firebird.conf ning boshqa parametrlarining qiymatlarini tanlashda biz oddiy mulohazadan boshlaymiz: ma'lumotlarni uzatish bosqichida gbak bir jarayonda 2.5, ikkinchisida 3.0 ishlaydi, keyin 2.5 chiqadi va 3.0 qurishni boshlaydi. indekslar.

3.0 da indeks yaratish bosqichini tezlashtirish uchun TempCacheLimit parametrining hajmini ~ 40% RAMgacha oshirish tavsiya etiladi (agar u ajratilgan server bo'lsa, albatta).

Misol uchun, agar serverda 16 GB operativ xotira bo'lsa, unda siz qo'yishingiz mumkin

TempCacheLimit=6G

Albatta, bu qiymat faqat 64 bitli Firebird 3 uchun o'rnatilishi mumkin, chunki har qanday 32 bitli jarayon 2 gigabaytdan ortiq xotirani ajrata olmaydi.

2.5-da, bu parametrni o'zgartirish kerak emas - u baribir 2 gigabaytdan oshmasligi kerak va bu zaxira paytida tezlikka ta'sir qilmaydi.

Amaliyotni bajarishdan oldin ma'lumotlar bazasi sarlavhasidagi sahifa keshi 0 ga o'rnatilganligini tekshirishingiz kerak (buyruq). gstat -h databasename, Sahifa buferlari qatoriga qarang).

Agar kesh ma'lumotlar bazasi sarlavhasida aniq o'rnatilgan bo'lsa, u firebird.conf (va 3.0 da databases.conf) dan qiymatlarni bekor qiladi va agar qiymatlar etarli bo'lmasa, bu ortiqcha xotira sarfiga va almashtirishga olib kelishi mumkin.

Keyinchalik, fayllarni maqsadli tizimga nusxalash.

Konvertatsiya Firebird 2.5 "tizimi" xizmatini to'xtatgandan so'ng, mahalliy ma'murga yuqori huquqlarga ega buyruq satrida amalga oshiriladi (misol):

set ISC_USER=владелец
"25/gbak" -z -b -g -v -st t -y 25.log база25 stdout|^
"30/gbak" -z -c -v -st t -y 30.log stdin база30

Bu misolda qo'shtirnoq ichida "oldinga qiyshiq chiziq" ishlatiladi (yaroqli "unix uslubi") va "shapka" ("^" belgisi) yangi qator belgisidan qochadi, bu uzun buyruqlarni kiritishda foydalidir. -st(atus) opsiyasi Firebird 2.5.8 da paydo bo'ldi va sizga gbak jarayoni ishlayotgan vaqt haqidagi ma'lumotlarni jurnalga kiritish imkonini beradi (batafsil ma'lumot uchun hujjatlarga qarang).

Linux

ning Linux Firebird 3 tommath kutubxonasiga bog'liq. CentOS (RHEL) bu kutubxona epel omborida, ichida Ubuntu (Debian) ichida – tizimli.

uchun CentOS Avval epel omborini ulashingiz kerak va shundan keyingina buni amalga oshiring

yum install libtommath

Ubuntu qo'shimcha omborlarni ulashning hojati yo'q, lekin Ubuntu 16 va undan keyin Ubuntu Paketlarning 18 xil versiyasi o'rnatilgan - mos ravishda libtommath0 va libtommath1.

Firebird 3.0 tommath.so.0 va ni qidiradi Ubuntu 18-rasmda qo'shimcha ravishda, siz tommath.so.0 dan tommath.so.1 ga simvolik havola yaratishingiz kerak. Buning uchun avval tommath.so.1 ni topishingiz kerak.

Izlangan yo'l Ubuntu - /usr/lib/x86_64-linux-gnu/, lekin boshqalarda Debianasoslangan taqsimotlar boshqacha bo'lishi mumkin.

Ikkinchi muammo Firebird 3.0.1 ga qadar ikkita turli server versiyasini o'rnatishning oson yo'li yo'qligi bilan bog'liq. Nisbatan murakkabligi sababli biz "kerakli prefiks bilan manbadan kompilyatsiya qilish" variantini hisobga olmaymiz.

Firebird 3.0.2 va undan yuqori versiyalari uchun amalga oshirildi --enable-binreloc bilan tuzing va alohida o'rnatish opsiyasi (-yo'l yo'li).

Tizimga tommath kutubxonasi va agar kerak bo'lsa, tommath.so.0 uchun simli havola qo'shilgan deb hisoblasangiz, siz joriy (ushbu yozish vaqtida) Firebird 3.0.4 distributivini, masalan, /opt-ga o'rnatishingiz mumkin. /fb3:

./install.sh -path /opt/fb3

Shundan so'ng siz Firebird tizimi xizmatini to'xtatib, oqimli konvertatsiya qilishni boshlashingiz mumkin.

Firebird-ni to'xtatganda, klassik rejimdagi Firebid 2.5 jarayonlari odatda xinetd tomonidan ishga tushirilishini yodda tuting - shuning uchun siz xinetd uchun Firebird xizmatini o'chirib qo'yishingiz yoki xinetd-ni butunlay to'xtatishingiz kerak.

3.0 uchun firebird.conf faylida Linux MaxUnflushed parametrlarini o'rnatishga hojat yo'q (ular faqat ishlaydi) Windows) va Firebird 2.5 sozlamalarini o'zgartiring.

Linuxda Firebird 2.5 ning mahalliy (fayl) kirish imkoniyati quyida keltirilgan o'rnatilgan versiyaga teng emas Windows – Server 2.5 gbak jarayonida (tarmoq qismisiz) ishlaydi, lekin kirish huquqlari foydalanuvchi ma'lumotlar bazasi bilan taqqoslanadi, bu nafaqat login, balki parol ham talab qilinishini anglatadi:

export ISC_USER=username ISC_PASSWORD=password
/opt/firebird/bin/gbak -b … база25 stdout
|/opt/fb3/bin/gbak -c … stdin база30

Muvaffaqiyatli konvertatsiyadan so'ng, avval "qo'shimcha" Firebird 3.0, so'ngra "asosiy" Firebird 2.5 ni o'chirib tashlashingiz kerak va shundan so'ng Firebird 2.5 ni toza o'rnatishni amalga oshirishingiz kerak - va bu oddiy tar.gz o'rnatuvchisidan yaxshi bo'ladi. omborlar, chunki. omborlardagi versiya orqada qolishi mumkin.

Shuningdek, BD qayta tiklanganidan keyin Linux va yangi ma'lumotlar bazasi Firebird foydalanuvchisiga tegishli ekanligiga ishonch hosil qilish uchun qayta o'rnatishni tekshirish kerak.

Agar bunday bo'lmasa, uni tuzatish kerak bo'ladi.

chown firebird.firebird database

Xulosa

Vaqt va disk maydonini tejashga qo'shimcha ravishda, oqimli konvertatsiya yana bir muhim afzalliklarga ega - ma'lumotlar bazasini konvertatsiya qilish mavjud Firebird 2.5-ni o'chirmasdan amalga oshiriladi, bu muvaffaqiyatsiz konvertatsiya qilingan taqdirda (ko'pincha bo'sh joy etishmasligi yoki migratsiya paytida kutilmagan qayta ishga tushirish tufayli) orqaga qaytishni sezilarli darajada osonlashtiradi. jarayon).

Vaqtni tejash "klassik" konvertatsiya "zaxira vaqti" va "tiklash vaqti" bo'lganligi bilan bog'liq. Qayta tiklash ikki qismdan iborat: zaxira faylidan ma'lumotlarni o'qish va indeks yaratish.

Oqimli konvertatsiya bilan umumiy vaqt "zaxira vaqti plyus beshdan o'n foizgacha" va "indeks yaratish vaqti" sifatida olinadi.

Muayyan natijalar ma'lumotlar bazasining tuzilishiga bog'liq, ammo o'rtacha hisobda tiklash vaqti zahiradan ikki baravar ko'p. Shuning uchun, agar biz zaxira vaqtini birlik sifatida oladigan bo'lsak, unda "klassik konvertatsiya" uch vaqt birligi, oqim ikki vaqtning birligi. TempCacheLimitni oshirish vaqtni yanada qisqartirishga yordam beradi.

Umuman olganda, oqimli konvertatsiya amalda muqobil zaxiralash va tiklash vaqtining 30-40 foizini tejash imkonini beradi.

Savollaringiz bormi?

Iltimos, barcha savollarni sharhlarda yozing yoki ularni metodologiya muallifi va ushbu maqolaning hammuallifi - Vasiliy Sidorov, iBase tizimidagi yetakchi muhandis, bs at ibase ru-ga yuboring.

So'rovda faqat ro'yxatdan o'tgan foydalanuvchilar ishtirok etishlari mumkin. tizimga kirishiltimos.

Firebirdning qaysi versiyasidan foydalanasiz?

  • Firebird 3.x

  • Firebird 2.5

  • Firebird 2.1

  • Firebird 2.0, 1.5 yoki 1.0

16 ta foydalanuvchi ovoz berdi. 1 foydalanuvchi betaraf qoldi.

Manba: www.habr.com

DDoS himoyasi, VPS VDS serverlari bo'lgan saytlar uchun ishonchli hosting sotib oling 🔥 DDoS himoyasi, VPS VDS serverlari bilan ishonchli veb-sayt xostingini sotib oling | ProHoster