Πώς κάνουμε online migration ένα instance από on-premise σε Azure Managed Instance στο Cloud (Azure Database Migration Service)

- Πώς φτιάχνουμε Logon Trigger για να ελέγχουμε τους χρήστες που επιτρέπουμε να συνδεθούν σε Oracle Database - 13 Ιανουάριος 2025
- Πώς συλλέγουμε to actual execution plan από τα queries με χρήση Extended Event και πως διαβάζουμε τα δεδομένα του - 2 Δεκέμβριος 2024
- Πώς βρίσκουμε τι δικαιώματα έχει ένας χρήστης σε Oracle Database - 1 Νοέμβριος 2024
Σε αυτό το άρθρο θα αναλύσουμε τον τρόπο που μπορούμε να κάνουμε online migration ενός SQL Server Instance από on-premise σε Azure Managed Instance. Για να μπορεί να γίνει online, με near zero downtime θα χρησιμοποιήσουμε το Azure Database Migration Service σε hybrid mode.

Η διαδικασία γίνεται με χρήση εγκαταστημένου client worker service σε Windows Server 2012 και μετέπειτα εκδόσεις σε συνεργασία με το Database Migration Service στο Azure.
Το παράδειγμα
Είναι μια σύνθετη διαδικασία οπότε θα πρέπει να ακολουθήσουμε πολύ αυστηρά τα βήματα.
Για αρχή η διαδικασία απαιτεί να έχουμε φτιάξει το Azure SQL Managed Instance. Το πως γίνεται αυτό μπορούμε να δούμε αναλυτικά σε αυτό το άρθρο.
Για να ξεκινήσουμε το στήσιμο της διαδικασίας του migration, θα ψάξουμε στο search το Azure Database Migration Services.

Επιλέγουμε Add.

Βάζουμε το Resource Group που είναι το Managed Instance που θα κάνουμε migrate, ένα όνομα στο service και επιλέγουμε Hybrid Service mode.

Σε αυτό το σημείο θα πρέπει να φτιάξουμε ένα Azure App το οποίο θα είναι υπεύθυνο για την επικοινωνία μεταξύ του client worker και του Database Migration Service.
Οπότε πάμε στο Tenant του Azure Active Directory που έχουμε, App registrations και New registration.

Ορίζουμε ένα όνομα και αφήνουμε τα υπόλοιπα ως έχει.

Τώρα θα πρέπει να γυρίσουμε στο Azure Database Migration Service που φτιάξαμε στην αρχή και να δώσουμε τον ρόλο του Contributor ώστε να έχει την πρόσβαση που απαιτήτε. Οπότε επιλέγουμε Access Control, Add role assignment, ορίζουμε τον ρόλο και ψάχνουμε το όνομα της εφαρμογής που ορίσαμε.

Την ίδια διαδικασία θα πρέπει να την κάνουμε για την εφαρμογή και κάτω από το Subscription που έχουμε.

Ξαναγυρνάμε στο Azure Database Migration Service και επιλέγουμε την καρτέλα Hybrid και Installer download. Από εκεί θα κατευάσουμε τον client worker που θα κάνουμε εγκατάσταση.

Αφού κατέβει και το κάνουμε unzip θα πρέπει να βάλουμε τις παραμέτρους που μας ζητάει στο dmsSettings.json.
- Το ApplicationId το βρίσκουμε από Azure Active Directory, App registrations στο Application (client) ID.
- Το CertificateThumbprint το αφήνουμε για τώρα με την default τιμή καθώς θα το φτιάξουμε εμείς στο επόμενο βήμα, τότε θα γυρίσουμε και θα το συμπληρώσουμε.
- Tα resourceId, subscriptionId, resourcegroup και serviceName θα το βρούμε πηγαίνοντας στο Azure Database Migration Service, Properties.

Στη συνέχεια θα πρέπει να φτιάξουμε το Certificate, ανοίγουμε command prompt, κάνουμε cd στον φάκελο του DMSHybrid και τρέχουμε την παρακάτω εντολή:
DMSWorkerBootstrap.exe -a GenerateCert

Με το που το τρέξουμε επιτυχώς θα δημιουργηθεί στον φάκελο ένα αρχείο με το όνομα DMS Hybrid App Key.cer. Το certificate αυτό θα πρέπει να το κάνουμε upload στην εφαρμογή. Για να γίνει αυτό πάμε πάλι Azure Active Directory, App registrations, επιλέγουμε την εφαρμογή μας, Certificates & Secrets και Upload certificate.
Απο εκεί θα κρατήσουμε το Thumbprint.

Προσθέτουμε το Thumbprint στο πεδίο CertificateThumbprint του dmsSettings.json
{
"Authentication": {
"isCertificateAuthentication": true,
"ApplicationId": "d9c257c2-4323-4395-af23-4475c8f65e68",
"CertificateThumbprint": "B89967539FF2BAF04255F29228AFA63EFB20F49F"
},
"DMSService": {
"resourceId": "/subscriptions/aa15be35-988b-4f4e-b7fe-476eb0cb81b2/resourcegroups/RG_DPGR_I/providers/Microsoft.DataMigration/services/dms",
"subscriptionId": "aa15be35-988b-4f4e-b7fe-476eb0cb81b2",
"resourceGroup": "RG_DPGR_I",
"serviceName": "hybriddms"
}
}
Αργότερα θα χρειαστούμε και ένα secret οπότε ας το φτιάξουμε από τώρα επιλέγοντας New client secret. Κρατάμε την τιμή που έχει στο Value καθώς μετά από λίγο κρύβεται.

Πλέον είμαστε έτοιμοι να προχωρήσουμε στην εγκατάσταση του client worker.
Για να γίνει αυτό κάνουμε cd στον φάκελο DMSHybrid και εκτελούμε το παρακάτω:
DMSWorkerBootstrap.exe -a Install -IAcceptDMSLicenseTerms -d

Σε περίπτωση που μας εμφανίσει κάποιο error όπως το παρακάτω μπορεί να σημαίνει ότι κάποια άλλη εφαρμογή χρησιμοποιεί την πόρτα.
Σε αυτή την περίπτωση βλέπουμε στο log είναι αυτός ο λόγος.

Αν όντως ισχύει ανοίγουμε ένα command prompt με run as administrator και τρέχουμε την παρακάτω εντολή ώστε να δούμε ποια εφαρμογή χρησιμοποιεί την πόρτα και να την κλείσουμε (στην δική μου περίπτωση ήτανε το onedrive):
netstat -a -b
Αν έχουμε κάνει αυτή τη διόρθωση θα πρέπει να το κάνουμε uninstall και ξανά install με την εντολή που εκτελέσαμε πριν.
DMSWorkerBootstrap.exe -a uninstall -ReuseCert
Αφού έχει ολοκληρωθεί η εγκατάσταση του hybrid client worker θα δούμε στο Azure Database Migration Service του, στην καρτέλα Hybrid το Worker Name.

Συνεχίζουμαι επιλέγοντας Overview και New Migration Project.

Εκεί ορίζουμε ένα όνομα για το Project, ότι πρόκειται για SQL Server, ότι το target είναι Azure Managed Instance και ότι θα κάνουμε χρήση του Online data migration.

Στη συνέχεια θα πρέπει να συμπληρώσουμε τα στοιχεία για την σύνδεση στο on-premise source. Hostname, Authentication και έναν sysadmin χρήστη. Επίσης επιλέγουμε Encrypt connection, Trust server certificate.

Στο επόμενο βήμα θα πρέπει να συμπληρώσουμε τις πληροφορίες για το target στο Azure Managed Instance.
- Το ApplicationID (αν δεν το θυμόμαστε το βρίσκουμε στο Azure Database Migration Service, Properties)
- Ως Key το Value του secret που δημιουργήσαμε στο Application και κρατήσαμε στην εικόνα 12.
- Το Azure Managed Instance που θα έχουμε ως target.
- Το sql username / password από sysadmin χρήστη στο target, μπορούμε να χρησιμοποιήσουμε τον admin χρήστη που φτιάξαμε κατά την δημιουργία του Managed Instance.

Διαλέγουμε τις βάσεις που θα κάνουμε migrate.

Σε αυτό το σημείο θα χρειαστούμε έναν φάκελο στο on-premise source τον οπόιο θα κάνουμε Share σαν network path ώστε να έχει πρόβαση ο Hybrid client worker.
Σε αυτό το path θα αποθηκεύουμε τα backups που θα χρειαστούν για το migration.

Στο επόμενο βήμα συμπληρώνουμε το network path για τα backups από το προηγούμενο βήμα, στο επόμενο πεδίο συμπληρώνουμε τα credentials ενός χρήστη που έχει πρόβαση στο network path αυτό ή ενός local admin.
Στο τέλος θα μας ζητήσει να διαλέξουμε το Storage Account που θα θέλουμε να αποθηκευτούν τα backups, μπορούμε να χρησιμοποιήσουμε κάποιο που έχουμε ήδη ή να φτιάξουμε καινούργιο.

Στο τέλος πριν ξεκινήσουμε το migration θα πρέπει να έχουμε πάρει τα backup των βάσεων δεδομένων στο network path.
Τα backup θα πρέπει να είναι με το option with checksum.
backup database mig_db to disk='C:\backups\full_mig.bak' with checksum backup log mig_db to disk='C:\backups\log.trn' with checksum
Αφού βεβαιωθούμε ότι τα backups είναι ΟΚ, προχωράμε στο Start Migration.

Θα δούμε ότι έχει ξεκινήσει η διαδικασία. Αν επιλέξουμε την κάθε βάση θα δούμε αναλυτικά σε ποιό βήμα βρίσκεται.

Αφού δούμε ότι έχουν γίνει Restored όλα τα backup files μπορούμε όποια στιγμή θέλουμε να ξεκινήσουμε την διαδικασία Start Cutover ώστε να μεταφέρουμε και την πληροφορία από τα τελευταία δευτερόλεπτα από τον on-premise server στη βάση μας στο Azure Managed Instance.

Με το που επιλέξουμε Start Cutover, αυτό θα είναι το μόνο σημείο που θα πρέπει η εφαρμογή που συνδέεται στη βάση μας να είναι offline.
Αφού κατέβει η εφαρμογή παίρνουμε το τελευταίο tail log backup το οποίο είναι ένα transaction log backup το οποίο δεν επιτρέπει να υπάρχει πρόβαση στη βάση. Αυτό το κάνουμε ώστε να είμαστε σίγουροι ότι έχουμε πάρει backup όλα τα δεδομένα.
backup log mig_db to disk='C:\backups\log_final.trn' with checksum,norecovery
Όταν ολοκληρωθεί και αυτό το backup και βεβαιωθούμε ότι έχει γίνει και αυτό Restored. Μπορούμε να πατήσουμε το Apply.

Κάπου εδώ τελειώνει η διαδικασία και άμα συνδεθούμε στο Managed Instance θα δούμε να έχει μεταφερθεί η βάση δεδομένων που είχαμε επιλέξει να κάνουμε migrate.

Πηγές:
- Quickstart: Create a hybrid mode instance with Azure portal & Azure Database Migration Service
- Tutorial: Migrate SQL Server to an Azure SQL Managed Instance online using DMS