{"id":6345,"date":"2021-08-05T12:46:36","date_gmt":"2021-08-05T17:16:36","guid":{"rendered":"https:\/\/www.apps4rent.com\/blog\/?p=6345"},"modified":"2023-01-18T10:21:12","modified_gmt":"2023-01-18T14:51:12","slug":"migrate-databases-to-azure-sql-server","status":"publish","type":"post","link":"https:\/\/www.apps4rent.com\/blog\/migrate-databases-to-azure-sql-server\/","title":{"rendered":"How to Migrate Databases to Azure SQL Server with Transactional Replication?"},"content":{"rendered":"<p>Many enterprises are moving their on-premises workloads to the cloud, and SQL Server to Azure SQL Database migration is becoming increasingly common. Such enterprises typically have large databases with hundreds of GBs of data and a significant number of database objects. Moreover, the business-critical operations of large enterprises depend on the databases in the on-premises servers. This implies that they cannot afford long downtimes during the migration.<\/p>\n<p>While there are several methods to migrate SQL Server databases to the cloud, moving a database that is already in production can be challenging for most businesses. In this blog post, we will focus on using transactional replication to migrate on-premises SQL Server databases to Azure SQL Databases with minimal downtime.<\/p>\n<h2 style=\"font-size: 24px;\">How Does Transactional Replication for SQL Server Migration Work?<\/h2>\n<p>In an SQL database transactional replication migration, there are three subjects in the replication process. The Publisher is the source, which in this case is the on-premises SQL Server. The Subscriber is the replication target, which in this case will be the Azure instance. Finally, the Distributor, which can either be an Azure instance or a SQL Server, is the coordinator for the replication.<\/p>\n<p>Migration by transactional replication is done using three SQL Agent jobs. The Snapshot Agent gets the initial database snapshot, the Log Reader Agent tracks subsequent changes, and the Distribution Agent applies the database changes to the target. Depending on the replication model (push or pull), the Distributor can be deployed either on the Publisher or Subscriber side. Once the Distributor synchronizes the data between the Publisher and the Subscriber, the data and the schema appear in the Azure SQL Database, at which stage the on-premises to Azure SQL migration can be completed, and the connection string of applications can be changed to point to the new Azure SQL Database.<\/p>\n<h2 style=\"font-size: 24px;\">How To Setup a Transactional Replication for Migrating Database from SQL Server to Azure?<\/h2>\n<p>Transactional replication requires SQL Server Management Studio (SSMS) to remain synchronized with updates to Azure and SQL Database. Follow the steps below for migrating on-prem SQL Server to Azure SQL DB using the transaction replication workflow.<\/p>\n<ul>\n<li style=\"margin-bottom: 10px;\">Use the Microsoft Data Migration Assistant (DMA) to check on the database in the on-premises SQL Server can be migrated to Azure and resolve compatibility issues if any.<\/li>\n<li style=\"margin-bottom: 10px;\">Use the Azure Portal to create an Azure SQL database shell.<\/li>\n<li style=\"margin-bottom: 10px;\">As a part of the transactional replication setup, configure the on-prem SQL Server as the Distributor, and a new publication for the databases to be migrated to Azure.<\/li>\n<li style=\"margin-bottom: 10px;\">Create a Push subscriber and connect it to the newly created Azure SQL Database.<\/li>\n<li style=\"margin-bottom: 10px;\">Run the snapshot agent and synchronize the on-premises database with Azure.<\/li>\n<li style=\"margin-bottom: 10px;\">Test the application connectivity to the Azure SQL database, and remove replication.<\/li>\n<li style=\"margin-bottom: 10px;\">Schedule a cutover migration to move the production database to the Azure SQL database.<\/li>\n<li style=\"margin-bottom: 10px;\">Shut down the application and ensure that the replication is in sync. The replication can be removed and the on-prem production instance can be shut down after the cutover migration is complete.<\/li>\n<li style=\"margin-bottom: 10px;\">Make appropriate changes to the application configuration and perform functional testing after connecting to the Azure SQL database.<\/li>\n<\/ul>\n<h3 style=\"font-size: 23px;\">Apps4Rent Can Help in Migrating On-Premises SQL Server to Azure<\/h3>\n<p>One of the major challenges of migrating databases using transactional replication from on-premises SQL Server to Azure is compatibility issues that could arise due to the version of the server and the complexity of the database. Troubleshooting these issues could require advanced technical skills.<\/p>\n<p><strong>As a Tier 1 Microsoft CSP,<\/strong> Apps4Rent provides <span style=\"color: #007fac;\"><a style=\"color: #007fac;\" href=\"https:\/\/www.apps4rent.com\/managed-azure.html\">managed Azure services<\/a><\/span> to help enterprises migrate their on-premises SQL server to an appropriate Azure solution. Alternatively, we can host SQL Server in our top-tier SSAE 16 datacenters or Azure as a transitory solution. Contact our Microsoft-certified SQL Server consultants, available 24\/7 via phone, chat, and email for assistance.<\/p>\n<style>{#ddexitpopwrapper.open .ddexitpop {display: block;}#ddexitpopwrapper.open .ddexitpop{max-width:1000px;width:1000px;}}@media only screen and (min-width:99px) and (max-width:767px){#ddexitpopwrapper.open .ddexitpop {display: none;}}<\/style>\r\n<link rel=\"stylesheet\" type=\"text\/css\" href=\"https:\/\/www.apps4rent.com\/blog\/wp-content\/themes\/apps4rentoffice\/popup\/exitpopup\/ddexitpop.css\"\/><script src=\"https:\/\/www.apps4rent.com\/blog\/wp-content\/themes\/apps4rentoffice\/popup\/exitpopup\/ddexitpop.js\"><\/script>\r\n<div id=\"ddexitpop1\" class=\"ddexitpop\" style=\"z-index:1000;box-shadow: #00000085 -20px -5px 1200px 1000px;max-width:1000px;width:1000px;left:50%;top: 5px;margin-left: -500px;\">\r\n<div style=\"background: #fff;color: white;height:615px;\">\r\n<div class=\"col-md-6 popup1\" style=\"color:white;height:auto;padding-left: 0px;padding-right: 0px;background:none;\"><img decoding=\"async\" src=\"https:\/\/www.apps4rent.com\/blog\/wp-content\/uploads\/2020\/11\/apps4rent-manage-azure-services.png\" alt=\"Manage Azure\" style=\"height: inherit;\"\/><\/div>\r\n<div class=\"col-md-6\" style=\"background: white;\">\r\n<div style=\"margin-right: -15px;\"><span style=\"cursor: pointer;position: relative; top: 0px;left: 0px;float: right;font-family: Arial;font-size: 17px;background-color: #d1d1d1;color: #4c4c4c; padding-left: 10px;padding-right: 10px;text-decoration: none;right: -40px;\" onclick=\"myFunction()\">X<\/span><\/div>\r\n<p style=\"padding-top: 7px;color: #30508c;margin-bottom: 10px;margin-top: 30px;text-align: center;line-height: 35px;font-size:30px;font-weight: 500; font-family:roboto !important;\">Looking for help with Azure?<br \/>\r\nOur Azure experts can help you.<\/p>\r\n<p>\n<div class=\"wpcf7 no-js\" id=\"wpcf7-f7298-o1\" lang=\"en-US\" dir=\"ltr\" data-wpcf7-id=\"7298\">\n<div class=\"screen-reader-response\"><p role=\"status\" aria-live=\"polite\" aria-atomic=\"true\"><\/p> <ul><\/ul><\/div>\n<form action=\"\/blog\/wp-json\/wp\/v2\/posts\/6345#wpcf7-f7298-o1\" method=\"post\" class=\"wpcf7-form init\" aria-label=\"Contact form\" novalidate=\"novalidate\" data-status=\"init\">\n<fieldset class=\"hidden-fields-container\"><input type=\"hidden\" name=\"_wpcf7\" value=\"7298\" \/><input type=\"hidden\" name=\"_wpcf7_version\" value=\"6.1.5\" \/><input type=\"hidden\" name=\"_wpcf7_locale\" value=\"en_US\" \/><input type=\"hidden\" name=\"_wpcf7_unit_tag\" value=\"wpcf7-f7298-o1\" \/><input type=\"hidden\" name=\"_wpcf7_container_post\" value=\"0\" \/><input type=\"hidden\" name=\"_wpcf7_posted_data_hash\" value=\"\" \/><input type=\"hidden\" name=\"_wpcf7cf_hidden_group_fields\" value=\"[]\" \/><input type=\"hidden\" name=\"_wpcf7cf_hidden_groups\" value=\"[]\" \/><input type=\"hidden\" name=\"_wpcf7cf_visible_groups\" value=\"[]\" \/><input type=\"hidden\" name=\"_wpcf7cf_repeaters\" value=\"[]\" \/><input type=\"hidden\" name=\"_wpcf7cf_steps\" value=\"{}\" \/><input type=\"hidden\" name=\"_wpcf7cf_options\" value=\"{&quot;form_id&quot;:7298,&quot;conditions&quot;:[{&quot;then_field&quot;:&quot;apoint&quot;,&quot;and_rules&quot;:[{&quot;if_field&quot;:&quot;meeting&quot;,&quot;operator&quot;:&quot;equals&quot;,&quot;if_value&quot;:&quot;Yes&quot;}]}],&quot;settings&quot;:{&quot;animation&quot;:&quot;yes&quot;,&quot;animation_intime&quot;:200,&quot;animation_outtime&quot;:200,&quot;conditions_ui&quot;:&quot;normal&quot;,&quot;notice_dismissed&quot;:false,&quot;notice_dismissed_rollback-cf7-5.9.5&quot;:true}}\" \/>\n<\/fieldset>\n<style>.wpcf7 form .wpcf7-response-output{margin: 0.5em 0.5em 0.5em;}.first{width:60px;color: #2A363F;text-align: left;}.wpcf7-list-item-label{color: #2A363F;text-align: left;font-size: 20px 'Roboto';font-weight:400;font-style: normal;}.inputf{font: 16px 'Roboto !important';font-weight: normal;font-style: normal;line-height: 25px;color: #2A363F;padding: 5px 10px;font-size: 16px;border: #9d9fa0 1px solid !important;margin-bottom:20px !important;box-sizing: border-box;border-radius: 3px !important;width: 100%;}\n.cf7-style div.wpcf7-response-output{width:fit-content;margin: 0px;padding: 5px !important;}.button4 {padding: 15px 20px;font-size: 18px !important;background: #375181;font-family: sans-serif;color: #fff;border: #9dbfff 2px solid;box-shadow: none;font-weight: bold;margin-bottom:0px !important;width: 100% !important;}.wpcf7 form.invalid .wpcf7-response-output, .wpcf7 form.unaccepted .wpcf7-response-output, .wpcf7 form.payment-required .wpcf7-response-output{width: max-content;margin: 0px;}\n<\/style>\n<style>@media only screen and (min-width:99px) and (max-width:767px){#content{margin-left:0px auto;}.sec {width:100% !important;float: none !important;}.html input[type=\"button\"], input[type=\"reset\"], input[type=\"submit\"]{font-size:16px !important;}}\n<\/style>\n<div style=\"padding-left: 15px;padding-right: 15px;padding-top: 15px;padding-bottom: 0px;\">\n\t<div style=\"float: left;width: 100%;margin-right: 15px;\" class=\"sec\">\n\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"Name\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text wpcf7-validates-as-required inputf\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Name*\" value=\"\" type=\"text\" name=\"Name\" \/><\/span>\n\t\t<\/p>\n\t<\/div>\n\t<div style=\"float: left;width: 100%;margin-right: 15px;\" class=\"sec\">\n\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"contact\"><input size=\"40\" maxlength=\"10\" minlength=\"6\" class=\"wpcf7-form-control wpcf7-tel wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-tel inputf\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Contact Number*\" value=\"\" type=\"tel\" name=\"contact\" \/><\/span>\n\t\t<\/p>\n\t<\/div>\n\t<div style=\"float: left;width: 100%;\" class=\"sec\">\n\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"email\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-email wpcf7-validates-as-required wpcf7-text wpcf7-validates-as-email inputf\" aria-required=\"true\" aria-invalid=\"false\" placeholder=\"Email ID*\" value=\"\" type=\"email\" name=\"email\" \/><\/span>\n\t\t<\/p>\n\t\t<p style=\"font-size: 20px 'Roboto';font-weight:400;font-style: normal;color: #2A363F;text-align: left;margin-bottom: 10px;\">Schedule a meeting?<br \/>\n<span class=\"wpcf7-form-control-wrap\" data-name=\"meeting\"><span class=\"wpcf7-form-control wpcf7-checkbox wpcf7-validates-as-required wpcf7-exclusive-checkbox meeting\"><span class=\"wpcf7-list-item first\"><label><input type=\"checkbox\" name=\"meeting\" value=\"Yes\" \/><span class=\"wpcf7-list-item-label\">Yes<\/span><\/label><\/span><span class=\"wpcf7-list-item last\"><label><input type=\"checkbox\" name=\"meeting\" value=\"No\" \/><span class=\"wpcf7-list-item-label\">No<\/span><\/label><\/span><\/span><\/span>\n\t\t<\/p>\n\t\t<div data-id=\"apoint\" data-orig_data_id=\"apoint\"  class=\"\" data-class=\"wpcf7cf_group\">\n\t\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"time\"><input size=\"40\" maxlength=\"400\" class=\"wpcf7-form-control wpcf7-text inputf\" aria-invalid=\"false\" placeholder=\"Preferred Callback Time* (E.g. Monday, 4 PM EST, NJ, USA)\" value=\"\" type=\"text\" name=\"time\" \/><\/span>\n\t\t\t<\/p>\n\t\t<\/div>\n\t<\/div>\n\t<div style=\"float: left;width: 100%;\" class=\"sec\">\n\t\t<p><span class=\"wpcf7-form-control-wrap\" data-name=\"msg\"><textarea cols=\"40\" rows=\"5\" maxlength=\"2000\" class=\"wpcf7-form-control wpcf7-textarea inputf\" aria-invalid=\"false\" placeholder=\"Message\" name=\"msg\"><\/textarea><\/span>\n\t\t<\/p>\n\t<\/div>\n\t<div>\n\t\t<p><input class=\"wpcf7-form-control wpcf7-submit has-spinner button4\" type=\"submit\" value=\"SUBMIT REQUEST\" \/>\n\t\t<\/p>\n\t<\/div>\n<\/div><p style=\"display: none !important;\" class=\"akismet-fields-container\" data-prefix=\"_wpcf7_ak_\"><label>&#916;<textarea name=\"_wpcf7_ak_hp_textarea\" cols=\"45\" rows=\"8\" maxlength=\"100\"><\/textarea><\/label><input type=\"hidden\" id=\"ak_js_1\" name=\"_wpcf7_ak_js\" value=\"115\"\/><script>document.getElementById( \"ak_js_1\" ).setAttribute( \"value\", ( new Date() ).getTime() );<\/script><\/p><div class=\"wpcf7-response-output\" aria-hidden=\"true\"><\/div>\n<\/form>\n<\/div>\n<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<p><script>jQuery(function(){ddexitpop.init({contentsource: ['id', 'ddexitpop1'],fxclass: 'random',hideaftershow: true,displayfreq: 'always',onddexitpop: function($popup){console.log('Exit Pop Animation Class Name: ' + ddexitpop.settings.fxclass)}})})<\/script><script>function myFunction(){document.getElementById(\"ddexitpop1\").style.display = \"none\";}<\/script><\/p>\r\n\n","protected":false},"excerpt":{"rendered":"<p>Many enterprises are moving their on-premises workloads to the cloud, and SQL Server to Azure SQL Database migration is becoming increasingly common. Such enterprises typically have large databases with hundreds of GBs of data and a significant number of database objects. Moreover, the business-critical operations of large enterprises depend on the databases in the on-premises [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[545],"tags":[],"class_list":["post-6345","post","type-post","status-publish","format-standard","hentry","category-azure"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.apps4rent.com\/blog\/wp-json\/wp\/v2\/posts\/6345","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.apps4rent.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.apps4rent.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.apps4rent.com\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.apps4rent.com\/blog\/wp-json\/wp\/v2\/comments?post=6345"}],"version-history":[{"count":3,"href":"https:\/\/www.apps4rent.com\/blog\/wp-json\/wp\/v2\/posts\/6345\/revisions"}],"predecessor-version":[{"id":7316,"href":"https:\/\/www.apps4rent.com\/blog\/wp-json\/wp\/v2\/posts\/6345\/revisions\/7316"}],"wp:attachment":[{"href":"https:\/\/www.apps4rent.com\/blog\/wp-json\/wp\/v2\/media?parent=6345"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.apps4rent.com\/blog\/wp-json\/wp\/v2\/categories?post=6345"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.apps4rent.com\/blog\/wp-json\/wp\/v2\/tags?post=6345"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}