التحويل المتدفق لقواعد بيانات Firebird 2.5 إلى تنسيق ODS12 (Firebird 3.0)

كل إصدار من Firebird له نسخته الخاصة من تنسيق بنية قرص قاعدة البيانات ، O (n) D (isk) S (tructure). حتى الإصدار 2.5 شاملاً ، يمكن لمحرك Firebird العمل مع ODS للإصدارات السابقة ، أي أن قواعد البيانات من الإصدارات القديمة تم فتحها بواسطة الإصدار الجديد وعملت في وضع التوافق ، لكن محرك Firebird 3.0 يعمل فقط مع قواعد البيانات في إصدار ODS الخاص به 12.0.

للانتقال إلى الإصدار 3.0 ، يجب تحويل قاعدة البيانات من 2.5 إلى التنسيق الجديد عبر النسخ الاحتياطي / الاستعادة. بالطبع ، نفترض أن قاعدة البيانات قد تم إعدادها مسبقًا للتحويل - أي تم فحص البيانات الوصفية والاستعلامات للتأكد من توافقها مع Firebird 3.0.

إذا اتبعت النهج القياسي ، فهذا يعني أنك بحاجة إلى عمل نسخة احتياطية على الإصدار 2.5 ، ثم تثبيت 3.0 وإجراء استعادة. مثل هذا الإجراء مقبول إذا كان هناك وقت كافٍ ، ولكن عند ترحيل قواعد البيانات الكبيرة ، أو عند ترحيل عدة عشرات من قواعد البيانات في نفس الوقت ، عندما ينفد الوقت ، يمكنك استخدام التحويل المتدفق ، والذي يكون أسرع بنسبة 30-40٪. كيف تفعل هذا بالضبط (تحت Windows وتحت Linux) ، اقرأ تحت القص.

الفكرة العامة هي أننا سنستخدم خط أنابيب لتسريع الأمور:

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

يقوم Gbak من 2.5 بإنشاء نسخة احتياطية بتنسيق خطي وإرسالها إلى stdout ، والتي تلتقط على الفور gbak من 3.0 عبر stdin وتنشئ قاعدة بيانات جديدة.

من الضروري تنظيم خط الأنابيب هذا باستخدام طريقة وصول (ملف) محلية ، لأن الوصول إلى الشبكة (حتى من خلال المضيف المحلي) سيؤدي إلى إبطاء العملية بشكل كبير.

نراجع التفاصيل لنظامي التشغيل Windows و Linux أدناه.

Windows

في حالة Windows ، فإن أسهل طريقة هي إنشاء بناء مستقل تمامًا من Firebird. لهذا نأخذ تضمين أرشيف Firebird 2.5، أعد تسمية fbemded.dll إلى fbclient.dll ، أضف أدوات gbak.exe و (اختياريًا) isql.exe من أرشيف 2.5 "العادي".

يستخدم 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

قد يلاحظ مسؤول متمرس أن الإصدار 2.5 لا يتضمن ملفات intl / fbintl.dll و intl / fbintl.conf. هذا صحيح ، نظرًا لأن 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٪ من ذاكرة الوصول العشوائي (إذا كان خادمًا مخصصًا ، بالطبع).

على سبيل المثال ، إذا كان الخادم يحتوي على 16 غيغابايت من ذاكرة الوصول العشوائي ، فيمكنك وضع

TempCacheLimit=6G

بالطبع ، لا يمكن تعيين هذه القيمة إلا لـ 64 بت Firebird 3 ، حيث لا يمكن لأي عملية 32 بت تخصيص أكثر من 2 غيغابايت من الذاكرة.

في 2.5 ، لا تحتاج هذه المعلمة إلى التغيير - لا يمكن أن تكون أكثر من 2 غيغابايت على أي حال ، ولا تؤثر على السرعة أثناء النسخ الاحتياطي.

قبل إجراء العملية ، تحتاج إلى التحقق من تعيين ذاكرة التخزين المؤقت للصفحة في رأس قاعدة البيانات على 0 (الأمر gstat -h databasename، راجع سطر الصفحة المخازن المؤقتة).

إذا تم تعيين ذاكرة التخزين المؤقت بشكل صريح في رأس قاعدة البيانات ، فإنها تتجاوز القيم من firebird.conf (و databases.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

يستخدم هذا المثال "شرطة مائلة للأمام" في علامات الاقتباس ("نمط يونيكس صالح") ، بينما تهرب "قبعة" (الحرف "^") من حرف السطر الجديد ، وهو أمر مفيد عند كتابة أوامر طويلة. ظهر الخيار -st (atus) في Firebird 2.5.8 ويسمح لك بتسجيل البيانات حول وقت تشغيل عملية gbak (للحصول على التفاصيل ، راجع الوثائق).

لينكس

يعتمد Firebird 3 على Linux على مكتبة 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 فإنه مطلوب أيضًا إنشاء رابط (رابط رمزي) من tommath.so.0 إلى tommath.so.1. للقيام بذلك ، عليك أولاً العثور على tommath.so.1.

مسار البحث في أوبونتو - /usr/lib/x86_64-linux-gnu/، لكن التوزيعات الأخرى القائمة على دبيان قد تكون مختلفة.

تتعلق المشكلة الثانية بحقيقة أنه حتى الإصدار 3.0.1 من Firebird ولم يكن هناك طريقة سهلة لتثبيت نسختين مختلفتين من الخوادم. لا نعتبر الخيار "تجميع من المصدر بالبادئة المطلوبة" بسبب تعقيده النسبي.

تم تنفيذ الإصدار 3.0.2 من Firebird والإصدارات الأحدث بناء باستخدام --enable-binreloc وخيار مثبت منفصل (مسار -path).

بافتراض أنه تمت إضافة مكتبة tommath ، وإذا لزم الأمر ، رابط رمزي لـ 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 للإصدار 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 2.5 - وهو الأفضل من مثبت tar.gz العادي ، وليس من خلال المستودعات ، لأن. قد يتخلف الإصدار الموجود في المستودعات عن الركب.

أيضًا ، بعد استعادة قاعدة البيانات على Linux وإعادة التثبيت ، تحتاج إلى التحقق من أن قاعدة البيانات الجديدة مملوكة لمستخدم Firebird.

إذا لم يكن الأمر كذلك ، فسيلزم تصحيحها.

chown firebird.firebird database

مجموع

بالإضافة إلى توفير الوقت ومساحة القرص ، فإن التحويل المتدفق له ميزة أخرى مهمة - يتم تحويل قاعدة البيانات دون حذف Firebird 2.5 الحالي ، مما يبسط بشكل كبير التراجع في حالة التحويل غير الناجح (غالبًا بسبب نقص المساحة أو إعادة التشغيل غير المتوقعة أثناء الترحيل عملية).

يرجع توفير الوقت إلى حقيقة أن التحويل "الكلاسيكي" هو "وقت النسخ الاحتياطي" بالإضافة إلى "وقت الاستعادة". يتكون الاسترداد من جزأين: قراءة البيانات من ملف النسخ الاحتياطي وإنشاء فهرس.

مع التحويل المتدفق ، يتم الحصول على الوقت الإجمالي على أنه "وقت النسخ الاحتياطي بالإضافة إلى خمسة إلى عشرة بالمائة" و "وقت إنشاء المؤشر".

تعتمد النتائج المحددة على بنية قاعدة البيانات ، ولكن في المتوسط ​​، يكون وقت الاسترداد ضعف وقت النسخ الاحتياطي تقريبًا. لذلك ، إذا أخذنا وقت النسخ الاحتياطي كوحدة واحدة ، فإن "التحويل الكلاسيكي" هو ثلاث وحدات زمنية ، والبث هو وحدتان من الوقت. تساعد زيادة TempCacheLimit على تقليل الوقت بشكل أكبر.

بشكل عام ، يتيح لك التحويل المتدفق عمليًا توفير 30-40 ٪ من وقت النسخ الاحتياطي والاستعادة البديل.

أسئلة؟

يرجى كتابة جميع الأسئلة في التعليقات ، أو إرسالها إلى مؤلف المنهجية والمؤلف المشارك لهذه المقالة - Vasily Sidorov ، iBase Leading System Engineer ، في bs at ibase ru.

يمكن للمستخدمين المسجلين فقط المشاركة في الاستطلاع. تسجيل الدخول، من فضلك.

ما هو إصدار Firebird الذي تستخدمه؟

  • فايربيرد 3.x

  • فايربيرد 2.5

  • فايربيرد 2.1

  • Firebird 2.0 أو 1.5 أو 1.0

صوّت 16 مستخدمًا. امتنع مستخدم واحد عن التصويت.

المصدر: www.habr.com

إضافة تعليق