يحتوي كل إصدار من Firebird على نسخته الخاصة من تنسيق هياكل قرص قاعدة البيانات - O (n) D (isk) S (الهيكل). قبل الإصدار 2.5 ضمناً ، يمكن أن يعمل محرك Firebird مع ODS من الإصدارات السابقة ، أي تم فتح قواعد البيانات من الإصدارات القديمة بواسطة الإصدار الجديد وعملت في وضع التوافق ، لكن محرك Firebird 3.0 يعمل فقط مع قاعدة بيانات في ODS الخاصة به الإصدار 12.0.
للتبديل إلى 3.0 ، يجب تحويل قاعدة البيانات من 2.5 إلى تنسيق جديد عبر النسخ الاحتياطي / الاستعادة. بالطبع ، نحن نفترض أن قاعدة البيانات قد تم إعدادها مسبقًا للتحويل - أي تم اختبار بيانات التعريف والطلبات من أجل التوافق مع Firebird 3.0.
إذا اتبعت النهج القياسي ، فهذا يعني أنك تحتاج إلى النسخ الاحتياطي على الإصدار 2.5 ، ثم تثبيت 3.0 وإجراء استعادة. هذا الإجراء مقبول إذا كان هناك وقت كافٍ ، ولكن عند ترحيل قواعد البيانات الكبيرة ، أو أثناء ترحيل عشرات قواعد البيانات ، عندما ينفد الوقت ، يمكنك استخدام تحويل الدفق ، والذي يكون أسرع بنسبة 30-40٪. كيف بالضبط القيام بذلك (تحت ويندوز وتحت لينكس) ، وقراءة تحت القط.
الفكرة العامة هي أنه من أجل التسريع سوف نستخدم خط الأنابيب:
gbak -b … 25 stdout | gbak -c … stdin 30
ينشئ Gbak من 2.5 نسخة احتياطية بنسق خطي ويرسله إلى stdout ، والذي يلتقط gbak على الفور من 3.0 عبر stdin وينشئ قاعدة بيانات جديدة.
من الضروري تنظيم خط أنابيب من هذا القبيل باستخدام طريقة الوصول المحلية (ملف) ، لأن الوصول إلى الشبكة (حتى من خلال المضيف المحلي) سوف يبطئ العملية بشكل كبير.
أدناه نلقي نظرة على تفاصيل نظامي التشغيل Windows و Linux.
نوافذفي حالة Windows ، أسهل طريقة لإنشاء بنية مستقلة بالكامل من Firebird. للقيام بذلك ، خذ
أرشيف تضمين Firebird 2.5 وأعد تسمية fbemded.dll إلى fbclient.dll ، وقم بإضافة أدوات مساعدة gbak.exe من أرشيف "المعتاد" 2.5 و (اختياريًا) isql.exe.
يستخدم Firebird 3.0 مجموعة
واحدة ولا يتطلب أي تعديل.
يحتوي الخيار الأصغر (الذي لا يتطلب تثبيت مكتبات وقت التشغيل VS2008 / VS2010 على النظام الهدف) على الملفات التالية:
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
قد يلاحظ مسؤول متمرس أنه لا يتم تضمين intl / fbintl.dll و intl / fbintl.conf في 2.5. هذا صحيح لأن gbak لا يستخدم حرف اتصال أو يحول البيانات بين الأحرف ، لكن على الجانب "المتلقي" من Firebird 3.0 ، تكون هذه الملفات مطلوبة عند إنشاء فهارس.
في firebird.conf ، يوصي Firebird 3.0 بإضافة:
MaxUnflushedWrites = -1 MaxUnflushedWriteTime = -1
أيضًا ، من المستحسن تعيين قيم IpcName مختلفة لـ 2.5 و 3.0.
عند اختيار قيم المعلمات الأخرى ، يبدأ firebird.conf من اعتبار بسيط: في مرحلة نقل البيانات ، في إحدى العمليات ، يتم تشغيل gbak 2.5 ، وفي 3.0 الأخرى ، ينتهي 2.5 ، ويبدأ 3.0 إنشاء الفهارس.
لتسريع مرحلة إنشاء الفهارس في 3.0 ، يوصى بزيادة حجم المعلمة TempCacheLimit إلى ~ 40٪ RAM (إذا كان خادمًا مخصصًا ، بالطبع).
على سبيل المثال ، إذا كان لدى الخادم 16 جيجابايت من ذاكرة الوصول العشوائي ، فيمكنك وضعه
TempCacheLimit=6G
بالطبع ، لا يمكن ضبط هذه القيمة إلا على Firebird 3 64 بت ، لأن أي عملية 32 بت لن تكون قادرة على تخصيص أكثر من 2 غيغابايت من الذاكرة.عند 2.5 ، لا يلزم تغيير هذه المعلمة - لا يمكن أن يتجاوز بالفعل 2 غيغابايت ، ولا يؤثر على السرعة أثناء النسخ الاحتياطي.
قبل تنفيذ العملية ، تحتاج إلى التحقق من تعيين ذاكرة التخزين المؤقت للصفحة في رأس قاعدة البيانات على 0 (
gstat -h databasename
command ، راجع سطر المخازن المؤقتة للصفحة).
إذا تم تحديد ذاكرة التخزين المؤقت بشكل صريح في رأس قاعدة البيانات ، فإنه يتجاوز القيم من firebird.conf (و database.conf في 3.0) ، وفي حالة وجود قيم كبيرة غير كافية ، يمكن أن يؤدي ذلك إلى زيادة استهلاك الذاكرة والانتقال إلى المبادلة.
بعد ذلك ، انسخ الملفات إلى النظام المستهدف.
يتم التحويل بعد إيقاف خدمة "النظام" في Firebird 2.5 ، في سطر الأوامر مع زيادة الامتيازات للمسؤول المحلي (مثال):
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
يستخدم هذا المثال "منحرفًا مستقيمًا" في علامات اقتباس ("نمط unix صالح") ، وقبعة (حرف "^") تهرب من حرف تغذية السطر ، وهو مناسب عند كتابة أوامر طويلة. ظهر الخيار -st (atus) في Firebird 2.5.8 ويسمح لك بكتابة البيانات في وقت تشغيل عملية gbak إلى البروتوكول (انظر الوثائق للحصول على التفاصيل).
لينكسعلى نظام Linux ، يعتمد Firebird 3 على مكتبة tommath. في CentOS (RHEL) ، توجد هذه المكتبة في مستودع epel ، أما في Ubuntu (Debian) فهي موجودة في النظام.
بالنسبة إلى CentOS ، يجب عليك أولاً توصيل مستودع epel وبعد ذلك فقط
yum install libtommath
لا يحتاج Ubuntu إلى توصيل مستودعات إضافية ، ولكن يتم تثبيت إصدارات مختلفة من الحزم على Ubuntu 16 و Ubuntu 18 - libtommath0 و libtommath1 ، على التوالي.
يبحث Firebird 3.0 عن tommath.so.0 أما عن Ubuntu 18 فيُطلب أيضًا إنشاء رابط (symlink) من tommath.so.0 إلى tommath.so.1. للقيام بذلك ، تحتاج أولاً إلى العثور على tommath.so.1.
مسار البحث في Ubuntu هو
/usr/lib/x86_64-linux-gnu/
، ولكن في التوزيعات الأخرى المستندة إلى دبيان ، قد يكون الأمر مختلفًا.
المشكلة الثانية هي أنه قبل Firebird 3.0.1 ، شامل ، لم يكن هناك طريقة سهلة لتثبيت إصدارين مختلفين من الخادم. لا نعتبر الخيار "تجميع من المصدر بالبادئة المطلوبة" بسبب تعقيده النسبي.
بالنسبة إلى Firebird 3.0.2 والإصدارات الأحدث ، يتم تنفيذ
بناء باستخدام –enable-binreloc وخيار مثبت منفصل (مسار المسار).
على افتراض أن مكتبة tommath و ، إذا لزم الأمر ، قد تم إضافة symlink for tommath.so.0 إلى النظام ، يمكنك إضافة التوزيع الفعلي (في وقت كتابة هذا التقرير) Firebird 3.0.4 إلى ، على سبيل المثال ، / opt / fb3:
./install.sh -path /opt/fb3
بعد ذلك ، يمكنك إيقاف خدمة نظام Firebird وبدء تدفق التحويل.
عند إيقاف تشغيل Firebird ، يجب أن يؤخذ في الاعتبار أن عمليات Firebid 2.5 في الوضع الكلاسيكي تبدأ عادة xinetd - لذلك فمن الضروري إما تعطيل خدمة firebird لـ xinetd أو إيقاف xinetd بالكامل.في firebird.conf for 3.0 على Linux ، لا تحتاج إلى تعيين معلمات MaxUnflushed (تعمل فقط على Windows) وتغيير إعدادات Firebird 2.5.
في نظام Linux ، لا يعد الوصول المحلي (ملف) لـ Firebird 2.5 مكافئًا للإصدار الذي تم تضمينه لـ Windows - سيعمل الخادم 2.5 في عملية gbak (بدون جزء الشبكة) ، ولكن سيتم التحقق من حقوق الوصول مقابل قاعدة المستخدمين ، مما يعني أنه لن يلزم تسجيل الدخول فحسب ، بل ستكون هناك كلمة مرور مطلوبة أيضًا :
export ISC_USER=username ISC_PASSWORD=password /opt/firebird/bin/gbak -b … 25 stdout\ |/opt/fb3/bin/gbak -c … stdin 30
بعد التحويل الناجح ، يجب أولاً إزالة Firebird 3.0 "الإضافي" ، ثم Firebird 2.5 "الرئيسي" ، وفقط بعد إجراء تثبيت نظيف لـ Firebird 3.0 - الأفضل من كل ذلك من المثبت tar.gz العادي ، وليس من خلال المستودعات ، لأن قد يتخلف الإصدار الموجود في المستودعات.
أيضًا ، بعد استعادة قاعدة بيانات Linux وإعادة تثبيتها ، تحتاج إلى التحقق من أن قاعدة البيانات الجديدة بها مالك مستخدم firebird.
إذا لم يكن الأمر كذلك ، فسيلزم إصلاحه
chown firebird.firebird database
يؤديبالإضافة إلى توفير الوقت ومساحة القرص ، فإن تحويل الدفق له ميزة هامة أخرى - يتم تحويل قاعدة البيانات دون حذف Firebird 2.5 الموجود ، مما يبسط الاستعادة إلى حد كبير إذا كان التحويل غير ناجح (غالبًا بسبب نقص المساحة أو إعادة تشغيل غير متوقع أثناء عملية الترحيل).
يرجع توفير الوقت إلى حقيقة أن التحويل "الكلاسيكي" هو "وقت النسخ الاحتياطي" بالإضافة إلى "وقت الاسترداد". يتكون الاسترداد من جزأين: قراءة البيانات من ملف النسخ الاحتياطي وإنشاء فهرس.
في تحويل التدفق ، يتم الحصول على الوقت الإجمالي كـ "وقت نسخ احتياطي زائد خمسة إلى عشرة بالمائة" و "وقت بناء الفهرس".
تعتمد النتائج المحددة على بنية قاعدة البيانات ، ولكن في المتوسط ، يكون وقت الاسترداد مساوًا تقريبًا لوقت النسخ الاحتياطي المزدوج. لذلك ، إذا أخذنا وقتًا احتياطيًا لكل وحدة ، فإن "التحويل التقليدي" - ثلاث وحدات من الوقت ، التدفق - وحدتان من الوقت. زيادة في TempCacheLimit يساعد أيضًا في تقليل الوقت.
بشكل عام ، يتيح لك تحويل الدفق في الممارسة العملية توفير 30 إلى 40٪ من وقت النسخ الاحتياطي البديل والمطعم.
الأسئلة؟يرجى كتابة جميع الأسئلة في التعليقات ، أو إرسالها إلى مؤلف المنهجية والمؤلف المشارك لهذه المقالة - فاسيلي سيدوروف ، كبير مهندسي النظام في iBase ، في bs at ibase ru.