Μετατροπή σε ροή βάσεων δεδομένων Firebird 2.5 σε μορφή ODS12 (Firebird 3.0)

Κάθε έκδοση του 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% ταχύτερη. Πώς ακριβώς να το κάνετε αυτό (στα Windows και στο Linux), διαβάστε κάτω από την περικοπή.

Η γενική ιδέα είναι ότι θα χρησιμοποιήσουμε έναν αγωγό για να επιταχύνουμε τα πράγματα:

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

Το Gbak από το 2.5 δημιουργεί ένα αντίγραφο ασφαλείας σε γραμμική μορφή και το στέλνει στο stdout, το οποίο παίρνει αμέσως το gbak από το 3.0 μέσω του stdin και δημιουργεί μια νέα βάση δεδομένων.

Είναι απαραίτητο να οργανωθεί ένας τέτοιος αγωγός με μια μέθοδο τοπικής πρόσβασης (αρχείου), καθώς η πρόσβαση στο δίκτυο (ακόμη και μέσω localhost) θα επιβραδύνει σημαντικά τη διαδικασία.

Αναλύουμε τις λεπτομέρειες για Windows και Linux παρακάτω.

Windows

Στην περίπτωση των Windows, ο ευκολότερος τρόπος είναι να φτιάξετε μια εντελώς αυτόνομη κατασκευή του Firebird. Για αυτό παίρνουμε embed-archive 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.

Όταν επιλέγουμε τις τιμές ευρετήρια.

Για να επιταχύνετε τη φάση δημιουργίας ευρετηρίου στην έκδοση 3.0, συνιστάται να αυξήσετε το μέγεθος της παραμέτρου TempCacheLimit σε ~ 40% RAM (αν πρόκειται φυσικά για αποκλειστικό διακομιστή).

Για παράδειγμα, αν ο διακομιστής έχει 16 GB μνήμης RAM, τότε μπορείτε να βάλετε

TempCacheLimit=6G

Φυσικά, αυτή η τιμή μπορεί να οριστεί μόνο για το Firebird 64 3 bit, καθώς οποιαδήποτε διεργασία 32 bit δεν μπορεί να εκχωρήσει περισσότερα από 2 gigabyte μνήμης.

Στο 2.5, αυτή η παράμετρος δεν χρειάζεται να αλλάξει - δεν μπορεί να είναι πάνω από 2 gigabyte ούτως ή άλλως και δεν επηρεάζει την ταχύτητα κατά τη δημιουργία αντιγράφων ασφαλείας.

Πριν εκτελέσετε τη λειτουργία, πρέπει να ελέγξετε ότι η προσωρινή μνήμη σελίδας στην κεφαλίδα της βάσης δεδομένων έχει οριστεί σε 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

Αυτό το παράδειγμα χρησιμοποιεί μια "προς τα εμπρός κάθετο" σε εισαγωγικά (έγκυρο "στυλ unix") και ένα "καπέλο" (ο χαρακτήρας "^") διαφεύγει από τον χαρακτήρα νέας γραμμής, που είναι χρήσιμο όταν πληκτρολογείτε μεγάλες εντολές. Η επιλογή -st(atus) εμφανίστηκε στο Firebird 2.5.8 και σας επιτρέπει να καταγράφετε δεδομένα σχετικά με το χρόνο εκτέλεσης της διαδικασίας gbak (για λεπτομέρειες, δείτε την τεκμηρίωση).

Linux

Στο 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/, αλλά άλλες διανομές που βασίζονται στο Debian μπορεί να είναι διαφορετικές.

Το δεύτερο πρόβλημα σχετίζεται με το γεγονός ότι μέχρι και συμπεριλαμβανομένου του Firebird 3.0.1, δεν υπήρχε εύκολος τρόπος εγκατάστασης δύο διαφορετικών εκδόσεων διακομιστή. Δεν εξετάζουμε την επιλογή "μεταγλώττιση από την πηγή με το απαιτούμενο πρόθεμα" λόγω της σχετικής πολυπλοκότητάς της.

Για Firebird 3.0.2 και μεταγενέστερη εφαρμογή δημιουργία με --enable-binreloc και μια ξεχωριστή επιλογή προγράμματος εγκατάστασης (διαδρομή διαδρομής).

Υποθέτοντας ότι η βιβλιοθήκη 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, γεγονός που απλοποιεί σημαντικά την επαναφορά σε περίπτωση αποτυχίας μετατροπής (τις περισσότερες φορές λόγω έλλειψης χώρου ή απροσδόκητης επανεκκίνησης κατά τη μετεγκατάσταση επεξεργάζομαι, διαδικασία).

Η εξοικονόμηση χρόνου οφείλεται στο γεγονός ότι η "κλασική" μετατροπή είναι "backup time" συν "restore time". Η ανάκτηση αποτελείται από δύο μέρη: ανάγνωση δεδομένων από ένα αρχείο αντιγράφου ασφαλείας και δημιουργία ευρετηρίου.

Με τη μετατροπή ροής, ο συνολικός χρόνος λαμβάνεται ως "χρόνος δημιουργίας αντιγράφων ασφαλείας συν πέντε έως δέκα τοις εκατό" και "χρόνος δημιουργίας ευρετηρίου".

Τα συγκεκριμένα αποτελέσματα εξαρτώνται από τη δομή της βάσης δεδομένων, αλλά κατά μέσο όρο, ο χρόνος ανάκτησης είναι περίπου διπλάσιος από τον χρόνο δημιουργίας αντιγράφων ασφαλείας. Επομένως, εάν πάρουμε τον χρόνο δημιουργίας αντιγράφων ασφαλείας ως μονάδα, τότε η "κλασική μετατροπή" είναι τρεις μονάδες χρόνου, η ροή είναι δύο μονάδες χρόνου. Η αύξηση του TempCacheLimit συμβάλλει στην περαιτέρω μείωση του χρόνου.

Γενικά, η μετατροπή ροής στην πράξη σάς επιτρέπει να εξοικονομήσετε 30-40% του χρόνου εναλλακτικής δημιουργίας αντιγράφων ασφαλείας και επαναφοράς.

Ερωτήσεις;

Γράψτε όλες τις ερωτήσεις στα σχόλια ή στείλτε τις στον συγγραφέα της μεθοδολογίας και συν-συγγραφέα αυτού του άρθρου - Vasily Sidorov, Κορυφαίος Μηχανικός Συστήματος iBase, στο bs στο ibase ru.

Μόνο εγγεγραμμένοι χρήστες μπορούν να συμμετάσχουν στην έρευνα. Συνδεθείτε, Σας παρακαλούμε.

Ποια έκδοση του Firebird χρησιμοποιείτε;

  • Firebird 3.χ

  • Firebird 2.5

  • Firebird 2.1

  • Firebird 2.0, 1.5 ή 1.0

Ψήφισαν 16 χρήστες. 1 χρήστης απείχε.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο