{"id":20179,"date":"2023-02-27T21:32:05","date_gmt":"2023-02-27T20:32:05","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=20179"},"modified":"2024-09-10T15:42:10","modified_gmt":"2024-09-10T13:42:10","slug":"disaster-recovery-solution-to-azure-sql-database","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/disaster-recovery-solution-to-azure-sql-database\/","title":{"rendered":"Disaster Recovery Solution to Azure SQL Database"},"content":{"rendered":"\n<p><strong>Executive Summary<\/strong><\/p>\n\n\n\n<p>As preparation for migrating his MS SQL workload to the cloud, a customer ask for a disaster recovery solution from an On-Premise MS SQL Instance to an Azure Cloud. The starting point for the disaster recovery will be the existing backup on a shared-disk in the On-Premise environment of the customer. I will export the database as BACPAC and restore to the cloud. Then,&nbsp;the application will be connected to the resulting Azure SQL Database for a full test of the disaster recovery scenario. Testing the application goes beyond the scope of this article. Therefore, will not be part of the article.<\/p>\n\n\n\n<p><strong>Existing Infrastructure<\/strong><\/p>\n\n\n\n<p>The MS SQL environment for which the disaster recovery solution has to be implemented is a MS SQL 2019 Always On installation. The databases are in compatibility level SQL 2019. The configuration of the VM is not that relevant as we will not migrating from the production machine. At this stage it is important to mention that, it is not a good idea to run the following steps on your production server as the process can be CPU und Memory consuming. Running the process in the PROD will have a direct negative impact on your workload.<\/p>\n\n\n\n<p><strong>Prerequisite<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A non productive VM for exporting the BACPAC\n<ol class=\"wp-block-list\">\n<li>The <a href=\"https:\/\/learn.microsoft.com\/de-de\/sql\/tools\/sqlpackage\/sqlpackage-extract?view=sql-server-ver16\" target=\"_blank\" rel=\"noreferrer noopener\">SqlPackage <\/a>utility<\/li>\n\n\n\n<li>An instance of MS SQL<\/li>\n\n\n\n<li><a href=\"https:\/\/dbatools.io\/commands\/\" target=\"_blank\" rel=\"noreferrer noopener\">dbatools<\/a><\/li>\n\n\n\n<li>Azure Cli<\/li>\n\n\n\n<li><a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/storage\/common\/storage-use-azcopy-v10\" target=\"_blank\" rel=\"noreferrer noopener\">aZCopy<\/a><\/li>\n<\/ol>\n<\/li>\n\n\n\n<li>An Azure subscription\n<ol class=\"wp-block-list\">\n<li>An Azure SQL Database<\/li>\n\n\n\n<li>A storage account<\/li>\n<\/ol>\n<\/li>\n<\/ul>\n\n\n\n<p><strong>Step 1: Database Restore<\/strong> <\/p>\n\n\n\n<p>As the starting point of the disaster recovery process, we use the MS SQL Backup-File of our production database. The first step is to restore the database to the preinstall MS SQL instance. Use management studio to generate a script similar to listing 1.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: sql; title: ; notranslate\" title=\"\">\n-- Listing 1\n-- NTS_DR\\INST01: MS SQL Instance for Disaster Recovery\n-- replace \u201cNTS_xxx\u201d with the value appropriate to your environment \n--\nUSE &#x5B;master]\nRESTORE DATABASE &#x5B;NTS_TESTDB] FROM DISK = N&#039;NTS_BACKUP_DIR\\NTS_TESTDB.BAK&#039; WITH  FILE = 1, MOVE N&#039;NTS_TESTDB&#039; TO N&#039;NTS_DATA_DIR\\NTS_TESTDB.mdf&#039;,  MOVE N&#039;NTS_TESTDB_log&#039; TO N&#039;NTS_LOG_DIR\\NTS_TESTDB_log.ldf&#039;,  NOUNLOAD,  STATS = 5\nGO\n<\/pre><\/div>\n\n\n<p><strong>Step 2: Export the database<\/strong><\/p>\n\n\n\n<p><strong>2a.<\/strong> Before you export the database, you should first extract all user permissions from the database. I use dbatools for this export (see listing 2). The resulting T-SQL script can be used later to correct and double check the permissions, in the case something is missing. Basically you should export the user directly from your production workload. Do not forget to remove orphan users. Removing orphan users is a typical and regular dba task. <\/p>\n\n\n\n<p><strong>2b.<\/strong> Then drop all Windows User from the database. (see listing 2).<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\n# Listing 2\n# NTS_PROD\\INST01: PRODUCTION MS SQL Server Instance\n# NTS_DR\\INST01: MS SQL Server Instance for Disaster Recovery. \n# Powershell\n#clean up orphaned user. Should be run as regular task on your database.\nGet-DbaDbOrphanUser -SqlInstance NTS_PROD\\INST01\nRemove-DbaDbOrphanUser -SqlInstance NTS_PROD\\INST01\n\n#export user login with permissions\nExport-DbaUser -SqlInstance NTS_PROD\\INST01 -FilePath C:\\temp\\NTS_PROD_users.sql\n\n#If your demo DR environment is clean, normally after the restore step, all the user should be orphaned, as the user are not present in the DR MS SQL Instance.\n# so clean up all orphaned user from your DR Instance\nRemove-DbaDbOrphanUser -SqlInstance NTS_DR\\INST01\n<\/pre><\/div>\n\n\n<p><strong>2c.<\/strong> When the database is cleaned from Windows User, the export process can start. (see listing 3). Notice that you can use the parameter <em><strong>\/MaxParalelism<\/strong><\/em> to start multiple thread and make the export faster. During the export, you will notice high CPU usage. That is the reason why you should not run the process on your production server.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\n#listing 3\n# Create the BACPAC-File\n# I share some error message with you in the screenshot.\nSqlPackage \/Action:Export \/TargetFile:&quot;N:\\TS\\Az\\NTS_TESTDB.bacpac&quot; \/SourceConnectionString:&quot;Server=tcp:NTS_DR\\INST01,1433;Initial Catalog=NTS_TESTDB;Integrated Security=true;MultipleActiveResultSets=False;encrypt=false;TrustServerCertificate=False;Connection Timeout=30;&quot; \/DiagnosticsFile:&quot;N:\\TS\\Az\\NTS_TESTDB.log&quot; \/MaxParallelism:4\n<\/pre><\/div>\n\n\n<p>The result of the export will be a <strong><em>BACPAC<\/em><\/strong>-File. This file can be uploaded to a storage account to be restored in an Azure SQL Database.<\/p>\n\n\n\n<p>Before moving to the next steps let me share with you some common errors, you can get during the export process.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"939\" height=\"336\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/02\/image-4.png\" alt=\"\" class=\"wp-image-22982\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/02\/image-4.png 939w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/02\/image-4-300x107.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/02\/image-4-768x275.png 768w\" sizes=\"auto, (max-width: 939px) 100vw, 939px\" \/><figcaption class=\"wp-element-caption\">screenshot 1: encrypt connection error<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"939\" height=\"336\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/02\/image-5.png\" alt=\"\" class=\"wp-image-22983\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/02\/image-5.png 939w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/02\/image-5-300x107.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/02\/image-5-768x275.png 768w\" sizes=\"auto, (max-width: 939px) 100vw, 939px\" \/><figcaption class=\"wp-element-caption\">screenshot 2: please delete orphan users<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"940\" height=\"353\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/02\/image-6.png\" alt=\"\" class=\"wp-image-22984\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/02\/image-6.png 940w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/02\/image-6-300x113.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/02\/image-6-768x288.png 768w\" sizes=\"auto, (max-width: 940px) 100vw, 940px\" \/><figcaption class=\"wp-element-caption\">screenshot 3: please delete windows users and groups<\/figcaption><\/figure>\n\n\n\n<p><em> <\/em><\/p>\n\n\n\n<p><em> <\/em> <\/p>\n\n\n\n<p><strong>Step 3: upload to the storage account<\/strong><\/p>\n\n\n\n<p>You can upload the BACPAC-File in an Azure storage account (see Listing 4).  In listing 4, you connect to your azure account and create the necessary infrastructure.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\n### listing 4\n### I test using PowerShell\n###\n\n### the following parameter will be needed\n\n$ntsSubscriptionId=&quot;&quot;\n$ntsLocation = &quot;&quot;\n$ntsResourceGroup=&quot;nts-bacpac-rg-x1234&quot;\n$ntsStorageAC=&quot;ntsbacpacx1234&quot;\n$ntsStorageContainer=&quot;containerx1234&quot;\n$ntsStorageACKey=&quot;&quot;\n\n### the URI to the BACPAC in the storage account container \n$ntsBacpacStorageURI = &quot;&quot;\n\n### login to azure\naz login\n\n### Search for your subscription. Just enter a part of the subscriptions name\n### just if you need to choose another subscription\n\n$ntsSubscriptionId = az account list --query &quot;&#x5B;?contains(name,&#039;REPLACE_YOUR_STRING_TO_SEARCH&#039;)].{Company:name, TenantId:tenantId,   ID:id}  | &#x5B;].ID&quot; --output tsv\n\n### check that the subscription is correct\n$ntsSubscriptionId\n\n### Search for the location you want to use\n\n$ntsLocation = az account list-locations --query &quot;&#x5B;?contains(displayName,&#039;Switzerland N&#039;)].{DisplayName:displayName, Name:name} | &#x5B;].Name &quot; --output tsv\n\n### check that the location is correct\n$ntsLocation\n\n\n###\necho &quot;Creating $ntsResourceGroup in $ntsLocation...&quot;\naz group create --name $ntsResourceGroup --location $ntsLocation \n\n### maybe you want to check if your name is already in use....\n# az storage account check-name --name $ntsStorageAC\n\necho &quot;Creating $ntsStorageAC...&quot;\naz storage account create --name $ntsStorageAC --resource-group $ntsResourceGroup --location &quot;$ntsLocation&quot; --sku Standard_LRS\n\n### get the storage account key\n$ntsStorageACKey = az storage account keys list --account-name $ntsStorageAC --resource-group $ntsResourceGroup  --query &#x5B;0].value -o tsv \n\n### check the key\n$ntsStorageACKey\n\n### create the storage container\naz storage container create --name $ntsStorageContainer --account-key $ntsStorageACKey --account-name $ntsStorageAC\n<\/pre><\/div>\n\n\n<p>After creating the storage container, you can upload the BACPAC-file to Azure. You can do it manually in the portal or how you like. I use aZCopy (see listing 5 ). For that, I create a shared access signature (SAS)\u00a0 in the azure portal. See screenshot 4.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"940\" height=\"734\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/02\/image-7.png\" alt=\"\" class=\"wp-image-22985\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/02\/image-7.png 940w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/02\/image-7-300x234.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/02\/image-7-768x600.png 768w\" sizes=\"auto, (max-width: 940px) 100vw, 940px\" \/><figcaption class=\"wp-element-caption\">screenshot 4a: generate sas<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"129\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/02\/sas2-1024x129.png\" alt=\"\" class=\"wp-image-22996\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/02\/sas2-1024x129.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/02\/sas2-300x38.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/02\/sas2-768x97.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/02\/sas2-1536x194.png 1536w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/02\/sas2.png 1607w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">screenshot 4b: Blob SAS URL<\/figcaption><\/figure>\n\n\n\n<p><em> <\/em><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\n# listing 5\n# azcopy run in Powershell\n# include all the information\/credential to acces the container\n# This Connection String can be get from see screenshot\n$ntsBacpacDestination = &quot;FULL_SAS_URI_GET_THE_VALUE_FROM_THE_PORTAL&quot;\n\n$ntsBacpacSource = &quot; N:\\TS\\Az\\NTS_TESTDB.bacpac&quot;\n# go to azcopy.exe dir\n#cd C:\\dbi\\azcopy\n.\\azcopy.exe copy $ntsBacpacSource $ntsBacpacDestination  --recursive=false\n<\/pre><\/div>\n\n\n<p><strong>Step 4: Import the BACPAC to Azure SQL Database<\/strong><\/p>\n\n\n\n<p>In this step, the BACPAC will be imported in an Azure SQL Database. It is recommended to choose a High Service Tier during the import process. This can speed up the import process. When the migration\/import is finished, it is recommended to resize your Azure SQL Database. Resize it to the appropriate service tier for your workload. The full import process is described in listing 6. In listing 6, the necessary infrastructure will be provisioned and configured. You must activate the checkbox in screenshot 5. This allows azure services to access your newly created Azure SQL Database.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"940\" height=\"832\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/02\/image-8.png\" alt=\"\" class=\"wp-image-22986\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/02\/image-8.png 940w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/02\/image-8-300x266.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/02\/image-8-768x680.png 768w\" sizes=\"auto, (max-width: 940px) 100vw, 940px\" \/><figcaption class=\"wp-element-caption\">screenshot 5: enable &#8220;azure service access&#8221;<\/figcaption><\/figure>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\n### Listing 6\n\n###\n### I can start some preparation for the azure sql database\n### Check which service-objective are available in the selected region\naz sql db list-editions -a -o table -l $ntsLocation\n\n$ntsServer = &quot;ntssqlserverx1234&quot;\n$ntsAdminuser = &quot;ntsadminsql&quot;\n$ntsAdminuserpassword = &quot;NTSp@ssw0rd&quot;\n\naz sql server create -l $ntsLocation -g $ntsResourceGroup  -n $ntsServer -u $ntsAdminuser -p $ntsAdminuserpassword \n\n### please change the name to what you prefere\n$ntsEmptyDB = &quot;NTSDBTOIMPORT&quot;\n### Very Important: You should use for the import a high service-objective to make the import performant.\n### After the import you can scale down the service-objective to the one you need\naz sql db create -g $ntsResourceGroup -s $ntsServer -n $ntsEmptyDB --service-objective S9\n\n### you can also get this information from the azure portal.\n$ntsBacpacStorageURI = &quot;https:\/\/ntsbacpacx1234.blob.core.windows.net\/container-x1234\/NTS_TESTDB.bacpac&quot;\n### create the database skeleton if not already exist\n#az sql db create -g $ntsResourceGroup -s $ntsServer -n $ntsEmptyDB --service-objective S9\n\n### !!! IMPORTANT!!! DO NOT FORGET TO ENABLE &quot;azure service access&quot;  &gt;&gt;&gt; screenshot 5\naz sql db import -s $ntsServer -n $ntsEmptyDB -g $ntsResourceGroup -p $ntsAdminuserpassword -u $ntsAdminUser  --storage-key-type StorageAccessKey --storage-uri $ntsBacpacStorageURI \t--storage-key $ntsStorageACKey \n<\/pre><\/div>\n\n\n<p><strong>Final considerations<\/strong><\/p>\n\n\n\n<p>When the import process is finished, it is important to resize the Azure SQL Database to the appropriate service tier for your workload. It is also recommended to move the BACPAC-File in the storage account to a different access tier to safe money. The steps are showed in listing 7.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\n### Listing 7\n###\n### Final step\n### you should scale the service-objective to the appropriate one \naz sql db update -g $ntsResourceGroup -s $ntsServer -n $ntsEmptyDB --service-objective S1\n\n# move to Cool access tier\n$ntsBlobname =  &#039;\/NTS_TESTDB.bacpac&#039;\naz storage blob set-tier --account-name $ntsStorageAC --container-name  $ntsStorageContainer  --name  $ntsBlobname  --tier Cool  --account-key $ntsStorageACKey\n<\/pre><\/div>\n\n\n<p>Your database is now available as Azure SQL database. You should apply the extracted users permissions and additional steps if necessary.<\/p>\n\n\n\n<p><strong>Conclusion<\/strong><\/p>\n\n\n\n<p>In this blog I show you how to offline migrate an On-Premise MS SQL Database to an Azure SQL Database as part of a disaster recovery solution. Give you some important tips to make your migration quick and smooth.<\/p>\n\n\n\n<p>#besharing, #bemigrating<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Executive Summary As preparation for migrating his MS SQL workload to the cloud, a customer ask for a disaster recovery solution from an On-Premise MS SQL Instance to an Azure Cloud. The starting point for the disaster recovery will be the existing backup on a shared-disk in the On-Premise environment of the customer. I will [&hellip;]<\/p>\n","protected":false},"author":26,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[3271,955,229,99],"tags":[2859,1613,2858,135,2860,51],"type_dbi":[],"class_list":["post-20179","post","type-post","status-publish","format-standard","hentry","category-azure","category-cloud","category-database-administration-monitoring","category-sql-server","tag-azure-database-migration","tag-azure-sql-database","tag-bacpac","tag-cloud","tag-offline-migration","tag-sql-server"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Disaster Recovery Solution to Azure SQL Database - dbi Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/disaster-recovery-solution-to-azure-sql-database\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Disaster Recovery Solution to Azure SQL Database\" \/>\n<meta property=\"og:description\" content=\"Executive Summary As preparation for migrating his MS SQL workload to the cloud, a customer ask for a disaster recovery solution from an On-Premise MS SQL Instance to an Azure Cloud. The starting point for the disaster recovery will be the existing backup on a shared-disk in the On-Premise environment of the customer. I will [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/disaster-recovery-solution-to-azure-sql-database\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2023-02-27T20:32:05+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-09-10T13:42:10+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/02\/image-4.png\" \/>\n<meta name=\"author\" content=\"Microsoft Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Microsoft Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/disaster-recovery-solution-to-azure-sql-database\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/disaster-recovery-solution-to-azure-sql-database\\\/\"},\"author\":{\"name\":\"Microsoft Team\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/bfab48333280d616e1170e7369df90a4\"},\"headline\":\"Disaster Recovery Solution to Azure SQL Database\",\"datePublished\":\"2023-02-27T20:32:05+00:00\",\"dateModified\":\"2024-09-10T13:42:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/disaster-recovery-solution-to-azure-sql-database\\\/\"},\"wordCount\":800,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/disaster-recovery-solution-to-azure-sql-database\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2023\\\/02\\\/image-4.png\",\"keywords\":[\"Azure Database Migration\",\"Azure SQL Database\",\"BACPAC\",\"Cloud\",\"Offline Migration\",\"SQL Server\"],\"articleSection\":[\"Azure\",\"Cloud\",\"Database Administration &amp; Monitoring\",\"SQL Server\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/disaster-recovery-solution-to-azure-sql-database\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/disaster-recovery-solution-to-azure-sql-database\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/disaster-recovery-solution-to-azure-sql-database\\\/\",\"name\":\"Disaster Recovery Solution to Azure SQL Database - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/disaster-recovery-solution-to-azure-sql-database\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/disaster-recovery-solution-to-azure-sql-database\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2023\\\/02\\\/image-4.png\",\"datePublished\":\"2023-02-27T20:32:05+00:00\",\"dateModified\":\"2024-09-10T13:42:10+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/bfab48333280d616e1170e7369df90a4\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/disaster-recovery-solution-to-azure-sql-database\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/disaster-recovery-solution-to-azure-sql-database\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/disaster-recovery-solution-to-azure-sql-database\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2023\\\/02\\\/image-4.png\",\"contentUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2023\\\/02\\\/image-4.png\",\"width\":939,\"height\":336},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/disaster-recovery-solution-to-azure-sql-database\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Disaster Recovery Solution to Azure SQL Database\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/bfab48333280d616e1170e7369df90a4\",\"name\":\"Microsoft Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g\",\"caption\":\"Microsoft Team\"},\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/author\\\/microsoft-team\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Disaster Recovery Solution to Azure SQL Database - dbi Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dbi-services.com\/blog\/disaster-recovery-solution-to-azure-sql-database\/","og_locale":"en_US","og_type":"article","og_title":"Disaster Recovery Solution to Azure SQL Database","og_description":"Executive Summary As preparation for migrating his MS SQL workload to the cloud, a customer ask for a disaster recovery solution from an On-Premise MS SQL Instance to an Azure Cloud. The starting point for the disaster recovery will be the existing backup on a shared-disk in the On-Premise environment of the customer. I will [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/disaster-recovery-solution-to-azure-sql-database\/","og_site_name":"dbi Blog","article_published_time":"2023-02-27T20:32:05+00:00","article_modified_time":"2024-09-10T13:42:10+00:00","og_image":[{"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/02\/image-4.png","type":"","width":"","height":""}],"author":"Microsoft Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Microsoft Team","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/disaster-recovery-solution-to-azure-sql-database\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/disaster-recovery-solution-to-azure-sql-database\/"},"author":{"name":"Microsoft Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4"},"headline":"Disaster Recovery Solution to Azure SQL Database","datePublished":"2023-02-27T20:32:05+00:00","dateModified":"2024-09-10T13:42:10+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/disaster-recovery-solution-to-azure-sql-database\/"},"wordCount":800,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/disaster-recovery-solution-to-azure-sql-database\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/02\/image-4.png","keywords":["Azure Database Migration","Azure SQL Database","BACPAC","Cloud","Offline Migration","SQL Server"],"articleSection":["Azure","Cloud","Database Administration &amp; Monitoring","SQL Server"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/disaster-recovery-solution-to-azure-sql-database\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/disaster-recovery-solution-to-azure-sql-database\/","url":"https:\/\/www.dbi-services.com\/blog\/disaster-recovery-solution-to-azure-sql-database\/","name":"Disaster Recovery Solution to Azure SQL Database - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/disaster-recovery-solution-to-azure-sql-database\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/disaster-recovery-solution-to-azure-sql-database\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/02\/image-4.png","datePublished":"2023-02-27T20:32:05+00:00","dateModified":"2024-09-10T13:42:10+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/disaster-recovery-solution-to-azure-sql-database\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/disaster-recovery-solution-to-azure-sql-database\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/disaster-recovery-solution-to-azure-sql-database\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/02\/image-4.png","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/02\/image-4.png","width":939,"height":336},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/disaster-recovery-solution-to-azure-sql-database\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Disaster Recovery Solution to Azure SQL Database"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/bfab48333280d616e1170e7369df90a4","name":"Microsoft Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c44a1a792c059f24055763aa77d80a244467f6eef724a8bd13db8d4a350b7a4c?s=96&d=mm&r=g","caption":"Microsoft Team"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/microsoft-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/20179","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/26"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=20179"}],"version-history":[{"count":36,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/20179\/revisions"}],"predecessor-version":[{"id":23223,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/20179\/revisions\/23223"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=20179"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=20179"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=20179"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=20179"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}