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 siz 2.5 versiyasida zaxira nusxasini yaratishingiz, keyin 3.0 ni o'rnatishingiz va qayta tiklashingiz kerakligini anglatadi. Agar etarli vaqt bo'lsa, bunday protsedura qabul qilinadi, lekin katta ma'lumotlar bazalarini ko'chirishda yoki bir vaqtning o'zida bir necha o'nlab ma'lumotlar bazalarini ko'chirishda, vaqt tugashi bilan siz 30-40% tezroq oqimli konversiyadan foydalanishingiz mumkin. Buni qanday qilish kerak (Windows va Linux ostida), kesish 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 Windows va Linux uchun tafsilotlarni ko'rib chiqamiz.

Windows

Windows misolida, eng oson yo'li Firebird-ning butunlay mustaqil tuzilishini yaratishdir. Buning uchun biz olamiz 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

Linux-da Firebird 3 tomat kutubxonasiga bog'liq. CentOS (RHEL) da bu kutubxona epel omborida, Ubuntuda (Debian) tizim omborida joylashgan.

CentOS uchun avval epel omborini ulashingiz kerak va shundan keyingina ulashingiz kerak

yum install libtommath

Ubuntu qo'shimcha omborlarni o'z ichiga olishi shart emas, lekin Ubuntu 16 va Ubuntu 18 paketlarning turli versiyalarini o'rnatadi - mos ravishda libtommath0 va libtommath1.

Firebird 3.0 tommath.so.0 ni qidiradi va Ubuntu 18 uchun qo'shimcha ravishda tommath.so.0 dan tommath.so.1 ga havola (simvol) yaratish talab qilinadi. Buning uchun avval tommath.so.1 ni topishingiz kerak.

Ubuntuda qidirilgan yo'l - /usr/lib/x86_64-linux-gnu/, lekin Debian-ga asoslangan boshqa tarqatishlar 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.

Linux-dagi 3.0 uchun firebird.conf-da MaxUnflushed parametrlarini o'rnatishingiz shart emas (ular faqat Windows-da ishlaydi) va Firebird 2.5 sozlamalarini o'zgartirishingiz kerak.

Linux-da Firebird 2.5 mahalliy (fayl) ruxsati Windows-ning o'rnatilgan versiyasiga teng emas - 2.5 server gbak jarayonida (tarmoq qismisiz) ishlaydi, lekin kirish huquqlari foydalanuvchi bazasiga nisbatan tekshiriladi, ya'ni nafaqat login, balki parol ham talab qilinadi:

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.

Bundan tashqari, Linux-da ma'lumotlar bazasini qayta tiklab, qayta o'rnatganingizdan so'ng, yangi ma'lumotlar bazasi firebird foydalanuvchisiga tegishli ekanligini tekshirishingiz 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

a Izoh qo'shish