From 52fbdca2ed29212ab8107da379d2cf3e8ac99181 Mon Sep 17 00:00:00 2001 From: Christopher C <37060219+cavonac@users.noreply.github.com> Date: Mon, 25 Jan 2021 17:31:43 -0800 Subject: [PATCH] Cavonac/offmig (#13865) * offline migration changes updates to offline migration notebooks, toc, glossary, creating a new notebook * variables table * Update offline-mig readme wording * Update readme.md * content * overview and titles for consistency, i updated the overview and titles * Update readme.md clarity and content * removed create sql backups * added term * updating notebook * adding code * wording updates * wording updates * removed image no longer used * avoid conflict with another PR replaced with a notebook --- .../hybridbook/content/Assessments/CMS.png | Bin 62107 -> 0 bytes .../notebooks/hybridbook/content/glossary.md | 8 +- .../offline-migration/db-to-SQLDB.ipynb | 379 ++++++++---------- .../content/offline-migration/db-to-VM.ipynb | 8 +- .../offline-migration/instance-to-VM.ipynb | 6 +- .../content/offline-migration/readme.md | 21 +- .../hybridbook/content/prereqs.ipynb | 17 +- .../notebooks/hybridbook/content/readme.md | 2 +- 8 files changed, 207 insertions(+), 234 deletions(-) delete mode 100644 extensions/azurehybridtoolkit/notebooks/hybridbook/content/Assessments/CMS.png diff --git a/extensions/azurehybridtoolkit/notebooks/hybridbook/content/Assessments/CMS.png b/extensions/azurehybridtoolkit/notebooks/hybridbook/content/Assessments/CMS.png deleted file mode 100644 index 1f015ffb995aebafc2082e70d840f7bba6701545..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62107 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

37G0O&r|lQjqp(cr4vhPLn@-N=23 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 diff --git a/extensions/azurehybridtoolkit/notebooks/hybridbook/content/glossary.md b/extensions/azurehybridtoolkit/notebooks/hybridbook/content/glossary.md index 79244411ce..1050049630 100644 --- a/extensions/azurehybridtoolkit/notebooks/hybridbook/content/glossary.md +++ b/extensions/azurehybridtoolkit/notebooks/hybridbook/content/glossary.md @@ -13,6 +13,8 @@ A list of terms and their definitions can be found below * **Azure Region** - Azure data centers are separated by geography into regions in order to ensure low-latency and security * **Azure Resource Group** - a logical container of Azure resources for management of Azure resources within it * **Azure SQL Database** - an Azure based version of SQL database offered as a PaaS +* **Azure SQL Managed Instance** - a PaaS Azure offer for SQL Server that is ran on Azure infrastructure. Microsoft will manage the complexities of the infrastructure for the user +* **Azure SQL Virtual Machine (VM)** - a IaaS Azure offer for SQL Server that is ran on Azure infrastructure. Microsoft will manage the complexities of the infrastructure for the user * **Azure Storage Account** - provides a unique namespace in Azure which forms the basis for addressing objects in Azure Storage * **Azure Storage SKU** - a *stock keeping unit* or SKU is a product unit designation that distinguishes between the product and other products based on its attributes such as manufacturer, description, and product type. (see Appendices for a list of Storage SKU types) * **Azure Subscription** - associates a user with Azure resources created by that user @@ -25,13 +27,13 @@ A list of terms and their definitions can be found below * **Juptyer Project** - a non-profit, OSS project that supports interactive data science computing across all programming languages * **Markdown** - lightweight markup language with text formatting widely used in web documents * **Microsoft PowerShell** - a task automation and configuration management framework. ADS Notebooks feature a PowerShell kernel in order to interface with the PS environment. PS is often used by systems engineers and admins. +* **Offline Migration** - moving data between environments in a manner that is disruptive to the operation of the database, usually when a system is able to tolerate the downtime required as a trade-off for simplicity * **OSS** - *open source software* is a decentralized software development model that encourages open collaboration and sharing. * **PaaS** - *Platform-as-a-Service* is a cloud service that allows the use of an application without the complexity of building and maintaining the hardware infrastructure required by the application -* **Point-to-Site VPN** - a VPN solution that allows a secure connection from an individual client computer to a remote network on the VPN. +* **Point-to-Site (P2S) VPN** - a VPN solution that allows a secure connection from an individual client computer to a remote network on the VPN. * **Python** - an interpreted high level OSS programming language often used by data scientists -* **Site-to-Site VPN** - a VPN connection created between two sites, usually over the public Internet or a WAN connection. Normally requires a network adminstrator to setup and configure. +* **Site-to-Site (S2S) VPN** - a VPN connection created between two sites, usually over the public Internet or a WAN connection. Normally requires a network adminstrator to setup and configure. * **SQL Assessment API** - evaluates a SQL instance configuration for best practices * **SQL Virtual Machine** - an IaaS Azure offer that provisions and manages virtual machine with SQL Server installed -* **SQL Managed Instance** - a PaaS Azure offer for SQL Server that is ran on Azure infrastructure. Microsoft will manage the complexities of the infrastructure for the user * **SMO** - SQL Management Objects are "objects designed for programmatic management of Microsoft SQL Server" ([Microsoft](https://docs.microsoft.com/en-us/sql/relational-databases/server-management-objects-smo/overview-smo)) * **VPN** - a *virtual private network* is a collection of computing resources that organizes and extends a private network configuration over the public Internet, normally using some kind of encryption for security and privacy. \ No newline at end of file diff --git a/extensions/azurehybridtoolkit/notebooks/hybridbook/content/offline-migration/db-to-SQLDB.ipynb b/extensions/azurehybridtoolkit/notebooks/hybridbook/content/offline-migration/db-to-SQLDB.ipynb index b92e49608d..a65ea8f63d 100644 --- a/extensions/azurehybridtoolkit/notebooks/hybridbook/content/offline-migration/db-to-SQLDB.ipynb +++ b/extensions/azurehybridtoolkit/notebooks/hybridbook/content/offline-migration/db-to-SQLDB.ipynb @@ -2,7 +2,8 @@ "metadata": { "kernelspec": { "name": "powershell", - "display_name": "PowerShell" + "display_name": "PowerShell", + "language": "powershell" }, "language_info": { "name": "powershell", @@ -17,33 +18,65 @@ { "cell_type": "markdown", "source": [ - "Migrate SQL Server Instance to Azure SQL Server VM\n", - "================================" + "# Migrate SQL Server Database to Azure SQL DB\n", + "\n", + "## Overview\n", + "\n", + "Use this notebook when attempting to migrate a SQL Server database to Azure SQL Database. The process is different than using an Azure SQL Virtual Machine or Azure SQL Managed Instance. Refer to this [Microsoft docs](https://docs.microsoft.com/en-us/azure/dms/howto-sql-server-to-azure-sql-powershell) article for the method described.\n", + "\n", + "## Variables\n", + "\n", + "Use the table below as reference when configuring this notebook for execution.\n", + "\n", + "| Line | Variable | Description | Example |\n", + "| --- | --- | --- | --- |\n", + "| 1 | Subscription | Azure subscription name or ID | guid |\n", + "| 2 | dmsName | Name of the Data Migration Service | MyDms |\n", + "| 3 | dmsResourceGroup | Exact name of resource group to target or create | _MyAz\\_RG_ |\n", + "| 4 | loc | Specifies the location of the service | EastUS2 |\n", + "| 5 | vNetName | Specify the name of the vnet Azure resource to use | vnet1 |\n", + "| 6 | Subnet | Name of the Azure subnet resource to use | subnet1 |\n", + "| 7-8 | dmsSku | This parameter corresponds to DMS Sku name. The currently supported sku is listed. | GeneralPurpose\\_4vCores |\n", + "| 9 | TargetSqlServer | Target SQL server to migrate to | \"sqllazuretarget.database.windows.net\" |\n", + "| 10 | SourceDb | Name of database to migrate from, the _source_ | AdventureWorks2016 |\n", + "| 11 | TargetDb | Name of database to migrate to, in case it differs from the source, the _target_ | AdventureWorks2016 |\n", + "\n", + "Lastly, specify the table names explicitly as a PowerShell list of names:\n", + "\n", + "> `$Tables = @(`\"HumanResources.Department\",  \"HumanResources.Employee\",  \"HumanResources.EmployeeDepartmentHistory\")" ], "metadata": { "azdata_cell_guid": "f706da59-22c3-4317-bf41-c00dde794097" } }, - { - "cell_type": "markdown", - "source": [ - "### Load Required Modules\r\n", - "" - ], - "metadata": { - "azdata_cell_guid": "67e288c6-63df-475e-9cad-bab323d30c4e" - } - }, { "cell_type": "code", "source": [ - "Import-Module dbatools\r\n", - "Import-Module Az.Resources\r\n", - "Import-Module Az.Storage" + "$Subscription = \"\"\r\n", + "$dmsName = \"\"\r\n", + "$dmsResourceGroup = \"\"\r\n", + "$loc = \"\"\r\n", + "$vNetName = \"\"\r\n", + "$Subnet = Subnet1\r\n", + "#$dmsSku = Basic_2vCores # unclear which is correct, listing both for now\r\n", + "$dmsSku = GeneralPurpose_4vCores \r\n", + "$TargetSqlServer = \"\"\r\n", + "$SourceDb = \"\"\r\n", + "$TargetDb = \"\"\r\n", + "\r\n", + "# Define a list of tables to migrate\r\n", + "$Tables = @()\r\n", + "<# :::For example::: \r\n", + "$Tables = @(\"HumanResources.Department\", `\r\n", + " \"HumanResources.Employee\", `\r\n", + " \"HumanResources.EmployeeDepartmentHistory\", `\r\n", + " \"HumanResources.EmployeePayHistory\", `\r\n", + " \"HumanResources.JobCandidate\", `\r\n", + " \"HumanResources.Shift\")\r\n", + "#>" ], "metadata": { - "azdata_cell_guid": "26df73fa-6f4f-40b4-8c47-10ce7e2db404", - "tags": [] + "azdata_cell_guid": "2624afc0-2403-4d42-ad88-6adcfe1a5c2b" }, "outputs": [], "execution_count": null @@ -51,180 +84,34 @@ { "cell_type": "markdown", "source": [ - "### Choose Migration Source\r\n", - "\r\n", - "Required parameters:\r\n", - "\r\n", - "- Server Name\r\n", - "- Database Name\r\n", - "- " + "## Connections" ], "metadata": { - "azdata_cell_guid": "1e70b806-c94d-4be2-87cf-ad73fb85821d" + "azdata_cell_guid": "f0a5e313-a2a6-4e75-ab94-5d96436b8473" } }, { "cell_type": "code", "source": [ - "$Credential = Get-Credential -Message \"Type the name and password of the local administrator account.\"\r\n", - "$Credential" - ], - "metadata": { - "azdata_cell_guid": "41faae8f-6245-4acb-88d5-dbb0b92ad7f5" - }, - "outputs": [], - "execution_count": null - }, - { - "cell_type": "code", - "source": [ - "# Variables\r\n", + "# Configure virtual network\r\n", + "$vNet = Get-AzVirtualNetwork -ResourceGroupName $dmsResourceGroup -Name $vNetName\r\n", "\r\n", - "## Global\r\n", - "$Location = \"West US 2\"\r\n", - "$ResourceGroupName = \"sqlmig\"\r\n", + "$vSubNet = Get-AzVirtualNetworkSubnetConfig -VirtualNetwork $vNet -Name $Subnet\r\n", "\r\n", - "## Storage\r\n", - "$StorageName = $ResourceGroupName + \"storage\"\r\n", - "$StorageSku = \"Premium_LRS\"\r\n", + "# Create a Database Connection Info object for the source connections\r\n", + "$sourceConnInfo = New-AzDmsConnInfo -ServerType SQL `\r\n", + " -DataSource $SourceSqlServer `\r\n", + " -AuthType SqlAuthentication `\r\n", + " -TrustServerCertificate:$true\r\n", "\r\n", - "## Network\r\n", - "$InterfaceName = $ResourceGroupName + \"ServerInterface\"\r\n", - "$NsgName = $ResourceGroupName + \"nsg\"\r\n", - "$VNetName = $ResourceGroupName + \"VNet\"\r\n", - "$SubnetName = \"Default\"\r\n", - "$VNetAddressPrefix = \"10.0.0.0/16\"\r\n", - "$VNetSubnetAddressPrefix = \"10.0.0.0/24\"\r\n", - "$TCPIPAllocationMethod = \"Dynamic\"\r\n", - "$DomainName = $ResourceGroupName\r\n", - "\r\n", - "##Compute\r\n", - "$VMName = $ResourceGroupName + \"VM\"\r\n", - "$ComputerName = $ResourceGroupName + \"Server\"\r\n", - "$VMSize = \"Standard_DS13_v2\"\r\n", - "$OSDiskName = $VMName + \"OSDisk\"\r\n", - "\r\n", - "##Image\r\n", - "$PublisherName = \"MicrosoftSQLServer\"\r\n", - "$OfferName = \"SQL2017-WS2016\"\r\n", - "$Sku = \"SQLDEV\"\r\n", - "$Version = \"latest\"\r\n", - "" + "# target connection\r\n", + "$targetConnInfo = New-AzDmsConnInfo -ServerType SQL `\r\n", + " -DataSource $TargetSqlServer `\r\n", + " -AuthType SqlAuthentication `\r\n", + " -TrustServerCertificate:$false" ], "metadata": { - "azdata_cell_guid": "7e251e62-b47c-4800-986d-b71be8bc0a21" - }, - "outputs": [], - "execution_count": null - }, - { - "cell_type": "code", - "source": [ - "# Resource Group\r\n", - "New-AzResourceGroup -Name $ResourceGroupName -Location $Location\r\n", - "$ResourceGroupName\r\n", - "$Location" - ], - "metadata": { - "azdata_cell_guid": "eea4904c-55f0-47a4-81a3-5daf0a864687" - }, - "outputs": [], - "execution_count": null - }, - { - "cell_type": "code", - "source": [ - "# Storage\r\n", - "$StorageAccount = New-AzStorageAccount -ResourceGroupName $ResourceGroupName -Name $StorageName -SkuName $StorageSku -Kind \"Storage\" -Location $Location\r\n", - "" - ], - "metadata": { - "azdata_cell_guid": "b19f1450-0283-4772-862a-3e59b65d0e75" - }, - "outputs": [], - "execution_count": null - }, - { - "cell_type": "code", - "source": [ - "$StorageAccount = Get-AzStorageAccount -ResourceGroupName $ResourceGroupName -Name $StorageName" - ], - "metadata": { - "azdata_cell_guid": "42602cef-76ed-4c91-a2f0-a7a8a6132eff" - }, - "outputs": [], - "execution_count": null - }, - { - "cell_type": "code", - "source": [ - "# Network\r\n", - "$SubnetConfig = New-AzVirtualNetworkSubnetConfig -Name $SubnetName -AddressPrefix $VNetSubnetAddressPrefix\r\n", - "$VNet = New-AzVirtualNetwork -Name $VNetName -ResourceGroupName $ResourceGroupName -Location $Location -AddressPrefix $VNetAddressPrefix -Subnet $SubnetConfig\r\n", - "$PublicIp = New-AzPublicIpAddress -Name $InterfaceName -ResourceGroupName $ResourceGroupName -Location $Location -AllocationMethod $TCPIPAllocationMethod -DomainNameLabel $DomainName\r\n", - "#$NsgRuleRDP = New-AzNetworkSecurityRuleConfig -Name \"RDPRule\" -Protocol Tcp -Direction Inbound -Priority 1000 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 3389 -Access Allow\r\n", - "$NsgRuleSQL = New-AzNetworkSecurityRuleConfig -Name \"MSSQLRule\" -Protocol Tcp -Direction Inbound -Priority 1001 -SourceAddressPrefix * -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 1433 -Access Allow\r\n", - "#$Nsg = New-AzNetworkSecurityGroup -ResourceGroupName $ResourceGroupName -Location $Location -Name $NsgName -SecurityRules $NsgRuleRDP,$NsgRuleSQL\r\n", - "$Nsg = New-AzNetworkSecurityGroup -ResourceGroupName $ResourceGroupName -Location $Location -Name $NsgName -SecurityRules $NsgRuleSQL\r\n", - "$Interface = New-AzNetworkInterface -Name $InterfaceName -ResourceGroupName $ResourceGroupName -Location $Location -SubnetId $VNet.Subnets[0].Id -PublicIpAddressId $PublicIp.Id -NetworkSecurityGroupId $Nsg.Id\r\n", - "" - ], - "metadata": { - "azdata_cell_guid": "0435fd83-3e9c-4929-930a-2b7022db3f99" - }, - "outputs": [], - "execution_count": null - }, - { - "cell_type": "code", - "source": [ - "$StorageAccount" - ], - "metadata": { - "azdata_cell_guid": "37e1869b-eb9f-465a-87d3-78120e4c6d06" - }, - "outputs": [], - "execution_count": null - }, - { - "cell_type": "code", - "source": [ - "# Compute\r\n", - "$VirtualMachine = New-AzVMConfig -VMName $VMName -VMSize $VMSize\r\n", - "#$Credential = Get-Credential -Message \"Type the name and password of the local administrator account.\"\r\n", - "$VirtualMachine = Set-AzVMOperatingSystem -VM $VirtualMachine -Windows -ComputerName $ComputerName -Credential $Credential -ProvisionVMAgent -EnableAutoUpdate #-TimeZone = $TimeZone\r\n", - "$VirtualMachine = Add-AzVMNetworkInterface -VM $VirtualMachine -Id $Interface.Id\r\n", - "#$OSDiskUri = $StorageAccount.PrimaryEndpoints.Blob.ToString() + \"vhds/\" + $OSDiskName + \".vhd\"\r\n", - "#$VirtualMachine = Set-AzVMOSDisk -VM $VirtualMachine -Name $OSDiskName -VhdUri $OSDiskUri -Caching ReadOnly -CreateOption FromImage\r\n", - "$VirtualMachine = Set-AzVMSourceImage -VM $VirtualMachine -PublisherName $PublisherName -Offer $OfferName -Skus $Sku -Version $Version" - ], - "metadata": { - "azdata_cell_guid": "d0a4da84-d591-436e-8b6c-d4cb2787a6e2" - }, - "outputs": [], - "execution_count": null - }, - { - "cell_type": "code", - "source": [ - "# Create the VM in Azure\r\n", - "New-AzVM -ResourceGroupName $ResourceGroupName -Location $Location -VM $VirtualMachine\r\n", - "" - ], - "metadata": { - "azdata_cell_guid": "70967b75-1ef7-4d69-aad9-0184cfb44aa9" - }, - "outputs": [], - "execution_count": null - }, - { - "cell_type": "code", - "source": [ - "# Add the SQL IaaS Extension, and choose the license type\r\n", - "New-AzSqlVM -ResourceGroupName $ResourceGroupName -Name $VMName -Location $Location -LicenseType \"PAYG\"" - ], - "metadata": { - "azdata_cell_guid": "a8db01b1-a009-4367-bd39-77187482afc3" + "azdata_cell_guid": "dbf40b4b-af83-46c6-9db1-15f45eb24382" }, "outputs": [], "execution_count": null @@ -232,24 +119,33 @@ { "cell_type": "markdown", "source": [ - "### Verify No Active Connections" + "## Select Data by Defining Database and Table Mapping" ], "metadata": { - "azdata_cell_guid": "81259d7e-62ac-4cdd-9e1b-2cb4ddb3d3b2" + "azdata_cell_guid": "b9113be6-0aef-41fd-afe8-e1ce51c5999b" } }, { "cell_type": "code", "source": [ + "# Create a list of databases to migrate\r\n", + "$dbInfo1 = New-AzDataMigrationDatabaseInfo -SourceDatabaseName $SourceDb\r\n", + "$dbList = @($dbInfo1)\r\n", "\r\n", - "$ServerName = \"sqltools2017-3\"\r\n", - "$DatabaseName = \"Keep_WideWorldImporters\"\r\n", + "# Create a table map \r\n", + "$tableMap = New-Object 'system.collections.generic.dictionary[string,string]'\r\n", + "foreach ($table in $Tables)\r\n", + "{\r\n", + " $tableMap.Add($table,$table)\r\n", + "}\r\n", "\r\n", - "Get-DbaProcess -SqlInstance $ServerName -Database $DatabaseName | \r\n", - "Select Host, login, Program" + "# Select the data\r\n", + "$selectedDbs = New-AzDmsSelectedDB -MigrateSqlServerSqlDb -Name $SourceDb `\r\n", + " -TargetDatabaseName $TargetDb `\r\n", + " -TableMap $tableMap" ], "metadata": { - "azdata_cell_guid": "28393e59-4ea1-4f0f-8f9f-8a504f15e723" + "azdata_cell_guid": "3b6551e9-4d42-441e-8fe1-f247471995df" }, "outputs": [], "execution_count": null @@ -257,19 +153,34 @@ { "cell_type": "markdown", "source": [ - "### Create Target SQL Server VM" + "## Create Service Project" ], "metadata": { - "azdata_cell_guid": "07d076d0-abf3-496c-8ecb-f85102c4104b" + "azdata_cell_guid": "a9abeeb9-4f45-4e0c-8b1b-20270dddece4" } }, { "cell_type": "code", "source": [ - "" + "$service = New-AzDms -ResourceGroupName $dmsResourceGroup `\r\n", + " -ServiceName $dmsName `\r\n", + " -Location $loc `\r\n", + " -Sku $dmsSku `\r\n", + " -VirtualSubnetId $vSubNet.Id\r\n", + "\r\n", + "# Create a project object\r\n", + "$project = New-AzDataMigrationProject -ResourceGroupName $dmsResourceGroup `\r\n", + " -ServiceName $service.Name `\r\n", + " -ProjectName $dmsNameProject `\r\n", + " -Location $loc `\r\n", + " -SourceType SQL `\r\n", + " -TargetType SQLDB `\r\n", + " -SourceConnection $sourceConnInfo `\r\n", + " -TargetConnection $targetConnInfo `\r\n", + " -DatabaseInfo $dbList" ], "metadata": { - "azdata_cell_guid": "6f190c2d-7361-4db8-819d-29087eae8aaa" + "azdata_cell_guid": "77415bea-b098-4a9f-a166-9751e4261fc1" }, "outputs": [], "execution_count": null @@ -277,60 +188,104 @@ { "cell_type": "markdown", "source": [ - "### Create temporary resources for data movement" + "## Credentials for Source and Target" ], "metadata": { - "azdata_cell_guid": "cc18027e-4636-465d-abaf-f3de88fea406" + "azdata_cell_guid": "f8c27b61-d2c9-43ee-bc93-8182752edb33" } }, { "cell_type": "code", "source": [ - "$location = \"westus\"\r\n", - "$resourceGroup = \"temp-sqlmigration\"\r\n", - "$blobStorageAccount = \"temp-sqlmigration\"\r\n", - "$containerName = \"backups\"\r\n", - "\r\n", - "\r\n", - "\r\n", - "New-AzResourceGroup" + "$secpasswd = ConvertTo-SecureString -String $sourcePassword -AsPlainText -Force\r\n", + "$sourceCred = New-Object System.Management.Automation.PSCredential ($sourceUserName, $secpasswd)\r\n", + "$secpasswd = ConvertTo-SecureString -String $targetPassword -AsPlainText -Force\r\n", + "$targetCred = New-Object System.Management.Automation.PSCredential ($targetUserName, $secpasswd)" ], "metadata": { - "azdata_cell_guid": "f7d53cb1-a55d-4634-95f7-d3e8cf9fab52" + "azdata_cell_guid": "61aa72d1-7492-41e8-847b-89a76ca28e0f" }, "outputs": [], "execution_count": null }, { - "cell_type": "code", + "cell_type": "markdown", "source": [ - "$targetLogin = Get-Credential -Message \"Login to target SQL Server instance as:\"" + "## Create the Migration Task\r\n", + "Uncomment lines to perform validation checks during the task." ], "metadata": { - "azdata_cell_guid": "c3dbd1a7-5514-4fdc-9430-736c92e875a4" + "azdata_cell_guid": "681feaa0-f7d8-4322-af0c-75ab6402fd6e" + } + }, + { + "cell_type": "code", + "source": [ + "$migTask = New-AzDataMigrationTask -TaskType MigrateSqlServerSqlDb `\r\n", + " -ResourceGroupName $dmsResourceGroup `\r\n", + " -ServiceName $service.Name `\r\n", + " -ProjectName $project.Name `\r\n", + " -TaskName $dmsNameTask `\r\n", + " -SourceConnection $sourceConnInfo `\r\n", + " -SourceCred $sourceCred `\r\n", + " -TargetConnection $targetConnInfo `\r\n", + " -TargetCred $targetCred `\r\n", + " -SelectedDatabase $selectedDbs `\r\n", + "# -SchemaValidation `\r\n", + "# -DataIntegrityValidation `\r\n", + "# -QueryAnalysisValidation `" + ], + "metadata": { + "azdata_cell_guid": "4dc629cc-1978-4bf8-80fc-69de093ac435" }, "outputs": [], "execution_count": null }, { - "cell_type": "code", + "cell_type": "markdown", "source": [ - "$myGwIp = Get-AzPublicIpAddress -Name $GwIP1 -ResourceGroup $RG1\r\n", - "$myGwIp.IpAddress" + "## Monitor the Migration Task" ], "metadata": { - "azdata_cell_guid": "bc6e8330-95bb-44a5-a117-020f657cad2b" + "azdata_cell_guid": "9074e9e5-f5f7-4d30-a4ec-b6d3f112a600" + } + }, + { + "cell_type": "code", + "source": [ + "# Monitor the migration\r\n", + "if (($migTask.ProjectTask.Properties.State -eq \"Running\") -or ($migTask.ProjectTask.Properties.State -eq \"Queued\"))\r\n", + "{\r\n", + " write-host \"migration task running\"\r\n", + "}\r\n", + "else \r\n", + "{\r\n", + " Write-Host \"migration task is $migTask.ProjectTask.Properties.State\"\r\n", + "}" + ], + "metadata": { + "azdata_cell_guid": "89af76b7-1801-4d26-b6cd-907a9b455839" }, "outputs": [], "execution_count": null }, { - "cell_type": "code", + "cell_type": "markdown", "source": [ - "" + "## Deleting the DMS Instance\r\n", + "This should remove the DMS instance from the Resource Group. Uncomment to perform the task. " ], "metadata": { - "azdata_cell_guid": "a61ffe69-0929-4246-8ad0-846f540f4e0c" + "azdata_cell_guid": "ed3bf1e7-a92f-4985-b89c-85f45b8e6821" + } + }, + { + "cell_type": "code", + "source": [ + "#Remove-AzDms -ResourceGroupName $dmsResourceGroup -ServiceName $dmsName" + ], + "metadata": { + "azdata_cell_guid": "245b4d4e-7559-4534-bff8-3af390ac1e3a" }, "outputs": [], "execution_count": null diff --git a/extensions/azurehybridtoolkit/notebooks/hybridbook/content/offline-migration/db-to-VM.ipynb b/extensions/azurehybridtoolkit/notebooks/hybridbook/content/offline-migration/db-to-VM.ipynb index e9a62190ae..71f999a7e4 100644 --- a/extensions/azurehybridtoolkit/notebooks/hybridbook/content/offline-migration/db-to-VM.ipynb +++ b/extensions/azurehybridtoolkit/notebooks/hybridbook/content/offline-migration/db-to-VM.ipynb @@ -2,7 +2,8 @@ "metadata": { "kernelspec": { "name": "powershell", - "display_name": "PowerShell" + "display_name": "PowerShell", + "language": "powershell" }, "language_info": { "name": "powershell", @@ -17,8 +18,7 @@ { "cell_type": "markdown", "source": [ - "Migrate SQL Server Database to Azure SQL Server VM\n", - "================================" + "# Migrate SQL Server Database to Azure SQL VM" ], "metadata": { "azdata_cell_guid": "f706da59-22c3-4317-bf41-c00dde794097" @@ -267,4 +267,4 @@ "execution_count": null } ] -} +} \ No newline at end of file diff --git a/extensions/azurehybridtoolkit/notebooks/hybridbook/content/offline-migration/instance-to-VM.ipynb b/extensions/azurehybridtoolkit/notebooks/hybridbook/content/offline-migration/instance-to-VM.ipynb index f786320307..d29bebdd9c 100644 --- a/extensions/azurehybridtoolkit/notebooks/hybridbook/content/offline-migration/instance-to-VM.ipynb +++ b/extensions/azurehybridtoolkit/notebooks/hybridbook/content/offline-migration/instance-to-VM.ipynb @@ -2,7 +2,8 @@ "metadata": { "kernelspec": { "name": "powershell", - "display_name": "PowerShell" + "display_name": "PowerShell", + "language": "powershell" }, "language_info": { "name": "powershell", @@ -17,8 +18,7 @@ { "cell_type": "markdown", "source": [ - "Migrate SQL Server Instance to Azure SQL Server VM\n", - "================================" + "# Migrate SQL Server Instance to Azure SQL VM" ], "metadata": { "azdata_cell_guid": "f706da59-22c3-4317-bf41-c00dde794097" diff --git a/extensions/azurehybridtoolkit/notebooks/hybridbook/content/offline-migration/readme.md b/extensions/azurehybridtoolkit/notebooks/hybridbook/content/offline-migration/readme.md index de8f83d568..44ddbbdf4e 100644 --- a/extensions/azurehybridtoolkit/notebooks/hybridbook/content/offline-migration/readme.md +++ b/extensions/azurehybridtoolkit/notebooks/hybridbook/content/offline-migration/readme.md @@ -1,12 +1,25 @@ # Offline Migration [Home](../readme.md) -This chapter contains a set of notebooks useful for doing offline migration of databases and SQL instances to Azure. For instance migration, these notebooks assume the Azure SQL Virtual Machine, Azure SQL Managed Instance, or Azure SQL DB Server have already been created. +This chapter is useful for performing an **Offline Migration** of SQL Server 2005 and above to Azure using ADS Notebooks. Offline migrations are by definition disruptive to the flow of data such as in a web application. With these notebooks, a foundation for automated offline migration can be built. + +There are [many methods](https://datamigration.microsoft.com/) to consider when migrating to the cloud. The notebooks in this chapter cover the following scenarios: ## Notebooks in this Chapter -- [Migrate Instance to Azure SQL VM](instance-to-VM.ipynb) +- [Migrate SQL Server Instance to Azure SQL VM](instance-to-VM.ipynb) using [dbatools](https://dbatools.io), a powerful PS library for SQL tasks. -- [Migrate Database to Azure SQL VM](db-to-VM.ipynb) +- [Migrate SQL Server Database to Azure SQL VM](db-to-VM.ipynb) using dbatools -- [Migrate Database to Azure SQL DB](db-to-SQLDB.ipynb) +- [Migrate SQL Server Database to Azure SQL DB](db-to-SQLDB.ipynb) using PowerShell +## Why Migrate Data Offline? +There are many reasons to do an offline data migration. If the cost of losing connectivity for the duration of an offline migration can be minimized, then it often outperforms ensuring uptime when moving to the cloud from on-premise. Consider the time it takes to develop and test the deployment process, the infrastructure required to switch networking routing dynamically, and the cost of managing a migration team with the appropriate skills required for an online migration. + +## Recommendations for a Successful Migration +Since the Data Migration Assistant and the Data Migration Service both complement a full migration, use the [Assessments](..\Assessments/readme.md) notebooks and fix all recommendations prior to migration to avoid potential problems during and after migration. +- All pre-requisite libraries are outlined in the [pre-requisites notebook](../prereqs.ipynb) +- Always keep backups of the data in standard formats available to be redeployed in case of a problem +- Test the entire migration process including the process used to restore from backup +- Automate the migration in such a way that anyone can perform it, given access +- Consider creating a new notebook that contains simple data tests with known values on the new system after deployment +## \ No newline at end of file diff --git a/extensions/azurehybridtoolkit/notebooks/hybridbook/content/prereqs.ipynb b/extensions/azurehybridtoolkit/notebooks/hybridbook/content/prereqs.ipynb index d8fa2f7b00..ffe2fb66df 100644 --- a/extensions/azurehybridtoolkit/notebooks/hybridbook/content/prereqs.ipynb +++ b/extensions/azurehybridtoolkit/notebooks/hybridbook/content/prereqs.ipynb @@ -2,7 +2,8 @@ "metadata": { "kernelspec": { "name": "powershell", - "display_name": "PowerShell" + "display_name": "PowerShell", + "language": "powershell" }, "language_info": { "name": "powershell", @@ -52,9 +53,9 @@ { "cell_type": "markdown", "source": [ - "## PowerShellGet and PowerShell Gallery Modules\n", + "## PowerShell Modules\n", "\n", - "If you do not have PS Nuget provider installed, then please see [Installing PowerShellGet](https://docs.microsoft.com/en-us/powershell/scripting/gallery/installing-psget). The initial setup for the PowerShellGet module may require elevated permissions and is recommended to be done in a separate PowerShell command prompt. \n", + "If you do not have PS Nuget provider installed, then please see [Installing PowerShellGet](https://docs.microsoft.com/en-us/powershell/scripting/gallery/installing-psget). If the following code block fails on the first line, setup PowerShellGet with an elevated PowerShell in a separate command window.\n", "\n", "The modules required by the toolkit are available on the [PowerShell Gallery](https://www.powershellgallery.com/), a central repository for sharing PS modules and scripts. The setup code in this notebook will create a temporary call to install required PowerShell modules in the current user scope. If the modules have not already been installed, the following code will install them with a new gallery registration setup as trusted to enable installation of modules without prompting. After installing the modules, the gallery registration will be removed.\n", "\n", @@ -125,14 +126,16 @@ "\n", "SQL Assessment API is part of the SQL Server Management Objects (SMO) and can be used with the SQL Server PowerShell module. Because installing the modules may require a local Administrator account's permission, it cannot be done automatically with this Notebook. The **Assessments** Notebooks require the following:\n", "\n", - "- [Install SMO](https://docs.microsoft.com/en-us/sql/relational-databases/server-management-objects-smo/installing-smo?view=sql-server-ver15)\n", - "- [Install SQL Server PowerShell module](https://docs.microsoft.com/en-us/sql/powershell/download-sql-server-ps-module?view=sql-server-ver15)\n", + "- [Install SMO](https://docs.microsoft.com/en-us/sql/relational-databases/server-management-objects-smo/installing-smo?view=sql-server-ver15)\n", + "- [Install SQL Server PowerShell module](https://docs.microsoft.com/en-us/sql/powershell/download-sql-server-ps-module?view=sql-server-ver15)\n", "\n", "## Compatibility Assessment Tool - Data Migration Assistant\n", "\n", - "The Compatibility Assessment Notebook requires the Data Migration Assistant tool to be installed in order to execute. The installation link would be [Data Migration Assistant download](https://www.microsoft.com/en-us/download/confirmation.aspx?id=53595)\n", + "The Compatibility Assessment Notebook requires the [Data Migration Assistant](https://www.microsoft.com/en-us/download/confirmation.aspx?id=53595) tool to be installed in order to execute.\n", "\n", - "With version 2.1 and above, when installation of Data Migration Assistant is successful, it will install dmacmd.exe in _%ProgramFiles%\\\\Microsoft Data Migration Assistant_ folder." + "**Note:**\n", + "\n", + "> By Default, DMACMD.EXE will be installed to the \"%ProgramFiles%\\\\Microsoft Data Migration Assistant\" folder." ], "metadata": { "azdata_cell_guid": "1b49a7e5-a773-4104-8f88-bd2ea3c806a3" diff --git a/extensions/azurehybridtoolkit/notebooks/hybridbook/content/readme.md b/extensions/azurehybridtoolkit/notebooks/hybridbook/content/readme.md index e655d71b68..8d02c1f218 100644 --- a/extensions/azurehybridtoolkit/notebooks/hybridbook/content/readme.md +++ b/extensions/azurehybridtoolkit/notebooks/hybridbook/content/readme.md @@ -14,7 +14,7 @@ * [High Availability and Disaster Recovery](hadr/readme.md) - Notebooks to leverage Azure SQL for business continuity in a hybrid cloud environment. -* [Offline Migration](offline-migration/readme.md) - Notebooks to perform various migrations. +* [Offline Migration](offline-migration/readme.md) - Notebooks to manage SQL migration tasks to the cloud * [Glossary](glossary.md) - set of defined terms.