Μεταφορά δεδομένων αντιγράφων ασφαλείας από μια νέα έκδοση του MS SQL Server σε μια παλαιότερη έκδοση

Ιστορικό

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

Προς έκπληξή μου, αντιμετώπισα τους ακόλουθους περιορισμούς:

  1. Το αντίγραφο ασφαλείας της βάσης δεδομένων έγινε στην έκδοση SQL Server 2016 και δεν ήταν συμβατό με το δικό μου SQL Server 2014.
  2. Στον υπολογιστή εργασίας μου, το λειτουργικό σύστημα που χρησιμοποιούσα ήταν Windows 7οπότε δεν μπόρεσα να ενημερώσω Ο SQL Server μέχρι την έκδοση 2016
  3. Το υποστηριζόμενο προϊόν αποτελούσε μέρος ενός μεγαλύτερου συστήματος με στενά συνδεδεμένη αρχιτεκτονική παλαιού τύπου και επίσης μιλούσε με άλλα προϊόντα και βάσεις, επομένως θα μπορούσε να χρειαστεί πολύς χρόνος για να αναπτυχθεί σε άλλο σταθμό.

Με βάση τα παραπάνω, κατέληξα στο συμπέρασμα ότι έχει έρθει η ώρα για δεκανίκια μη τυποποιημένων λύσεων.

Επαναφορά δεδομένων από αντίγραφο ασφαλείας

Επέλεξα να χρησιμοποιήσω μια εικονική μηχανή Oracle VM VirtualBox με Windows 10 (μπορείτε να τραβήξετε μια δοκιμαστική εικόνα για το πρόγραμμα περιήγησης Edge ως εκ τούτου,). Ο SQL Server 2016 εγκαταστάθηκε στην εικονική μηχανή και έγινε επαναφορά της βάσης δεδομένων της εφαρμογής από το αντίγραφο ασφαλείας (εντολή).

Διαμόρφωση πρόσβασης στον SQL Server σε εικονική μηχανή

Στη συνέχεια, ήταν απαραίτητο να γίνουν κάποια βήματα για να μπορέσετε να αποκτήσετε πρόσβαση στον SQL Server από έξω:

  1. Για το τείχος προστασίας, προσθέστε έναν κανόνα για παράβλεψη αιτημάτων θύρας 1433.
  2. Είναι επιθυμητό η πρόσβαση στον διακομιστή να μην γίνεται μέσω ελέγχου ταυτότητας των Windows, αλλά μέσω SQL με χρήση σύνδεσης και κωδικού πρόσβασης (είναι ευκολότερο να ρυθμίσετε την πρόσβαση). Ωστόσο, σε αυτήν την περίπτωση, πρέπει να θυμάστε να ενεργοποιήσετε τον έλεγχο ταυτότητας SQL στις ιδιότητες του SQL Server.
  3. Στις ρυθμίσεις χρήστη στον SQL Server στην καρτέλα Χαρτογράφηση χρήστη καθορίστε το ρόλο χρήστη για την επαναφερόμενη βάση δεδομένων db_securityadmin.

Μεταφορά δεδομένων

Στην πραγματικότητα, η ίδια η μεταφορά δεδομένων αποτελείται από δύο στάδια:

  1. Μεταφορά σχήματος δεδομένων (πίνακες, προβολές, αποθηκευμένες διαδικασίες κ.λπ.)
  2. Μεταφορά των ίδιων των δεδομένων

Μεταφορά σχήματος δεδομένων

Εκτελούμε τις ακόλουθες λειτουργίες:

  1. Επιλέξτε Εργασίες -> Δημιουργία σεναρίων για φορητή βάση.
  2. Επιλέξτε τα αντικείμενα που θέλετε να μεταφέρετε ή αφήστε την προεπιλεγμένη τιμή (σε αυτήν την περίπτωση, θα δημιουργηθούν σενάρια για όλα τα αντικείμενα βάσης δεδομένων).
  3. Καθορίστε τις ρυθμίσεις για την αποθήκευση του σεναρίου. Είναι πιο βολικό να αποθηκεύσετε το σενάριο σε ένα μόνο αρχείο Unicode. Στη συνέχεια, σε περίπτωση αποτυχίας, δεν χρειάζεται να επαναλάβετε ξανά όλα τα βήματα.

Μόλις αποθηκευτεί το σενάριο, μπορεί να εκτελεστεί στον αρχικό SQL Server (παλιά έκδοση) για να δημιουργηθεί η απαιτούμενη βάση.

Внимание: Μετά την εκτέλεση του σεναρίου, πρέπει να ελέγξετε την αντιστοιχία μεταξύ των ρυθμίσεων της βάσης δεδομένων από το αντίγραφο ασφαλείας και της βάσης δεδομένων που δημιουργήθηκε από το σενάριο. Στην περίπτωσή μου, δεν υπήρχε ρύθμιση για το COLLATE στο σενάριο, κάτι που οδήγησε σε αποτυχία κατά τη μεταφορά δεδομένων και τον χορό με ένα ντέφι να αναδημιουργηθεί η βάση δεδομένων χρησιμοποιώντας το συμπληρωμένο σενάριο.

Μεταφορά δεδομένων

Πριν από τη μεταφορά δεδομένων, πρέπει να απενεργοποιήσετε τον έλεγχο όλων των περιορισμών στη βάση δεδομένων:

EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'

Η μεταφορά δεδομένων πραγματοποιείται χρησιμοποιώντας τον οδηγό εισαγωγής δεδομένων Εργασίες -> Εισαγωγή δεδομένων στον SQL Server, όπου βρίσκεται η βάση δεδομένων που δημιουργήθηκε από το σενάριο:

  1. Καθορίστε τις ρυθμίσεις σύνδεσης στην πηγή (SQL Server 2016 σε εικονική μηχανή). Χρησιμοποίησα πηγή δεδομένων SQL Server Native Client και τον προαναφερθέντα έλεγχο ταυτότητας SQL.
  2. Καθορίστε τις ρυθμίσεις σύνδεσης για τον προορισμό (SQL Server 2014 στον κεντρικό υπολογιστή).
  3. Στη συνέχεια, ρυθμίστε τη χαρτογράφηση. Πρέπει να επιλεγούν όλα όχι μόνο για ανάγνωση αντικείμενα (για παράδειγμα, οι προβολές δεν χρειάζεται να επιλεγούν). Ως πρόσθετες επιλογές, επιλέξτε "Να επιτρέπεται η εισαγωγή σε στήλες ταυτότητας"εάν χρησιμοποιούνται τέτοια.
    Внимание: εάν, όταν προσπαθείτε να επιλέξετε πολλούς πίνακες και να ορίσετε την ιδιότητά τους "Να επιτρέπεται η εισαγωγή σε στήλες ταυτότητας" η ιδιότητα έχει ήδη οριστεί για τουλάχιστον έναν από τους επιλεγμένους πίνακες, το παράθυρο διαλόγου θα υποδείξει ότι η ιδιότητα έχει ήδη οριστεί για όλους τους επιλεγμένους πίνακες. Αυτό το γεγονός μπορεί να προκαλέσει σύγχυση και να οδηγήσει σε σφάλματα μετανάστευσης.
  4. Ξεκινάμε τη μεταφορά.
  5. Επαναφορά ελέγχου περιορισμών:
    EXEC sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'

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

Συμπέρασμα

Αυτή η εργασία είναι αρκετά σπάνια και εμφανίζεται μόνο λόγω των παραπάνω περιορισμών. Η πιο συνηθισμένη λύση είναι η αναβάθμιση του SQL Server ή η σύνδεση σε έναν απομακρυσμένο διακομιστή εάν το επιτρέπει η αρχιτεκτονική της εφαρμογής. Ωστόσο, κανείς δεν είναι απρόσβλητος από τον κώδικα παλαιού τύπου και τα στραβά χέρια κακής ποιότητας ανάπτυξης. Ελπίζω ότι δεν θα χρειαστείτε αυτήν την οδηγία, αλλά αν εξακολουθείτε να τη χρειάζεστε, θα σας βοηθήσει να εξοικονομήσετε πολύ χρόνο και νεύρα. Σας ευχαριστώ για την προσοχή σας!

Κατάλογος πηγών που χρησιμοποιήθηκαν

Πηγή: www.habr.com