{"id":9817,"date":"2018-12-03T07:51:44","date_gmt":"2018-12-03T09:51:44","guid":{"rendered":"http:\/\/www.fabriciolima.net\/?p=9817"},"modified":"2018-12-03T07:51:44","modified_gmt":"2018-12-03T09:51:44","slug":"managed-instance-13-como-migrar-uma-base-para-o-mi-via-backup-e-restore","status":"publish","type":"post","link":"https:\/\/fabriciolima.net\/blog\/2018\/12\/03\/managed-instance-13-como-migrar-uma-base-para-o-mi-via-backup-e-restore\/","title":{"rendered":"Managed Instance (#13) \u2013 Como migrar uma base para o MI via Backup e Restore?"},"content":{"rendered":"<p>Fala Pessoal,<\/p>\n<p>Esse \u00e9 mais um post da s\u00e9rie sobre o Azure SQL Database Managed Instance. Caso ainda n\u00e3o tenha visto, seguem os posts anteriores:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.fabriciolima.net\/blog\/2018\/03\/17\/azure-sql-db-managed-instance-introducao\/https:\/\/www.fabriciolima.net\/blog\/2018\/11\/16\/managed-instance-criando-minha-primeira-instancia\/\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\">Azure SQL DB Managed Instance \u2013 Introdu\u00e7\u00e3o<\/a><\/li>\n<li><a href=\"https:\/\/www.fabriciolima.net\/blog\/2018\/11\/16\/managed-instance-criando-minha-primeira-instancia\/\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\">Managed Instance \u2013 Criando minha primeira inst\u00e2ncia<\/a><\/li>\n<li><a href=\"https:\/\/www.fabriciolima.net\/blog\/2018\/11\/19\/managed-instance-como-se-conectar-direto-do-ssms-utilizando-uma-vpn\/\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\">Managed Instance \u2013 Como se conectar direto do SSMS utilizando uma VPN?<\/a><\/li>\n<li><a href=\"https:\/\/www.fabriciolima.net\/blog\/2018\/11\/20\/managed-instance-como-se-conectar-atraves-do-ssms-de-uma-vm-do-azure\/\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\">Managed Instance \u2013 Como se conectar atrav\u00e9s do SSMS de uma VM do Azure?<\/a><\/li>\n<li><a href=\"https:\/\/www.fabriciolima.net\/blog\/2018\/11\/21\/managed-instance-5-quanto-custa-tudo-isso\/\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\">Managed Instance (#5) \u2013 Quanto custa tudo isso?<\/a><\/li>\n<li><a href=\"https:\/\/www.fabriciolima.net\/blog\/2018\/11\/22\/managed-instance-6-consigo-fazer-um-join-entre-tabelas-de-bases-diferentes\/\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\">Managed Instance (#6) \u2013 Consigo fazer um Join entre tabelas de bases diferentes?<\/a><\/li>\n<li><a href=\"https:\/\/www.fabriciolima.net\/blog\/2018\/11\/23\/managed-instance-7-a-funcao-getdate-ja-retorna-a-data-da-minha-localidade\/\" target=\"_blank\" rel=\"noopener\" data-wpel-link=\"internal\">Managed Instance (#7) \u2013 A fun\u00e7\u00e3o getdate() j\u00e1 retorna a data da minha localidade?<\/a><\/li>\n<li><a href=\"https:\/\/www.fabriciolima.net\/blog\/2018\/11\/26\/managed-instance-8-suporte-microsoft-em-portugues\/\" target=\"_blank\" rel=\"noopener\">Managed Instance (#8) \u2013 Suporte Microsoft em Portugu\u00eas<\/a><\/li>\n<li><a href=\"https:\/\/www.fabriciolima.net\/blog\/2018\/11\/27\/managed-instance-9-agora-consigo-mandar-e-mail-do-sql-server\/\" target=\"_blank\" rel=\"noopener\">Managed Instance (#9) \u2013 Agora consigo mandar E-mail do SQL Server?<\/a><\/li>\n<li><a href=\"https:\/\/www.fabriciolima.net\/blog\/2018\/11\/28\/managed-instance-10-consigo-criar-linked-server\/\" target=\"_blank\" rel=\"noopener\">Managed Instance (#10) \u2013 Consigo criar Linked Server?<\/a><\/li>\n<li><a href=\"https:\/\/www.fabriciolima.net\/blog\/2018\/11\/29\/managed-instance-11-agora-consigo-criar-jobs-direto-no-ssms\/\" target=\"_blank\" rel=\"noopener\">Managed Instance (#11) \u2013 Agora consigo criar Jobs direto no SSMS?<\/a><\/li>\n<li><a href=\"https:\/\/www.fabriciolima.net\/blog\/2018\/11\/30\/managed-instance-12-configuracao-da-collation-da-instancia\/\" target=\"_blank\" rel=\"noopener\">Managed Instance (#12) \u2013 Configura\u00e7\u00e3o da Collation da inst\u00e2ncia<\/a><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>No Azure SQL Database n\u00e3o t\u00ednhamos a op\u00e7\u00e3o de migrar os dados para o Azure via backup e restore da nossa base On Premise.<\/p>\n<p>Agora no Managed Instanced isso j\u00e1 \u00e9 poss\u00edvel!!!<\/p>\n<p>Para testar vou fazer um backup de uma base em um SQL Server no meu notebook.<\/p>\n<p>O processo de fazer um backup para o Azure via URL est\u00e1 descrito em detalhes nesse post abaixo do Tiago Neves:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.tiagoneves.net\/blog\/fazendo-um-backup-database-no-azure\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.tiagoneves.net\/blog\/fazendo-um-backup-database-no-azure\/<\/a><\/li>\n<\/ul>\n<p>Criei minha credencial:<\/p>\n<pre class=\"lang:tsql decode:true\">CREATE CREDENTIAL [Backup_Azure] \r\nWITH IDENTITY = 'bkpsqlserver'\r\n, SECRET = 'jshdfkasjhfkasjdfhaskljdhflUD\/8FbXgHiqR1\/zfC4NIShny63RfFKhhhaK3q2HdY38c2Q9LDBUZ8TQ==' \r\n<\/pre>\n<p>Em seguida fiz o Backup da base com o comando abaixo:<\/p>\n<pre class=\"lang:tsql decode:true \">backup database TesteMigracaoMI\r\nto url = 'https:\/\/bkpsqlserver.blob.core.windows.net\/bkpsqlmibc\/TesteMigracao_MI.bak'\r\nwith compression,credential = 'Backup_Azure'\r\n<\/pre>\n<p>Validei o backup e est\u00e1 tudo certo:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-9826 aligncenter\" src=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_1.png\" alt=\"\" width=\"924\" height=\"197\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_1.png 1154w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_1-300x64.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_1-1024x218.png 1024w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_1-768x164.png 768w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_1-700x149.png 700w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_1-410x87.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_1-100x21.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_1-275x59.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_1-20x4.png 20w\" sizes=\"auto, (max-width: 924px) 100vw, 924px\" \/><\/p>\n<p><strong>O processo de restore no MI que \u00e9 um pouco diferente.<\/strong><\/p>\n<p>Primeiro. Mesmo com uma vpn, se voc\u00ea fizer um backup da base em um disco local e tentar restaurar direto no MI, n\u00e3o vai funcionar:<\/p>\n<pre class=\"lang:tsql decode:true \">restore database TesteMigracaoMI\r\nfrom disk = 'C:\\Temp\\TesteMigracaoMI.bak'<\/pre>\n<p>Erro retornado:<\/p>\n<p><span style=\"color: #ff0000;\">Msg 41902, Level 16, State 1, Line 1<\/span><br \/>\n<span style=\"color: #ff0000;\">Unsupported device type. SQL Database Managed Instance <strong>supports database restore from URI backup device only<\/strong>.<\/span><\/p>\n<p>O restore s\u00f3 funciona via URL.<\/p>\n<p>Se eu fizer o mesmo processo de restore descrito no post do Tiago, n\u00e3o vai funcionar.<\/p>\n<p>A credencial at\u00e9 cria normalmente:<\/p>\n<pre class=\"lang:tsql decode:true \">CREATE CREDENTIAL [Backup_Azure] \r\nWITH IDENTITY = 'bkpsqlserver'\r\n, SECRET = 'jshdfkasjhfkasjdfhaskljdhflUD\/8FbXgHiqR1\/zfC4NIShny63RfFKhhhaK3q2HdY38c2Q9LDBUZ8TQ=='<\/pre>\n<p>Mas quando tentamos restaurar temos o erro abaixo:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-9825 aligncenter\" src=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_2.png\" alt=\"\" width=\"1081\" height=\"156\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_2.png 1461w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_2-300x43.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_2-1024x148.png 1024w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_2-768x111.png 768w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_2-700x101.png 700w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_2-410x59.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_2-100x14.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_2-275x40.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_2-20x3.png 20w\" sizes=\"auto, (max-width: 1081px) 100vw, 1081px\" \/><\/p>\n<p>Se tentar restaurar sem a op\u00e7\u00e3o <strong>WITH CREDENTIAL<\/strong> gera o erro abaixo:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-9824 aligncenter\" src=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_3.png\" alt=\"\" width=\"988\" height=\"159\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_3.png 1336w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_3-300x48.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_3-1024x165.png 1024w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_3-768x124.png 768w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_3-700x113.png 700w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_3-410x66.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_3-100x16.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_3-275x44.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_3-20x3.png 20w\" sizes=\"auto, (max-width: 988px) 100vw, 988px\" \/><\/p>\n<p>Eita&#8230; E agora Fabr\u00edcio?<\/p>\n<p>Temos que usar uma chave\u00a0<strong>Shared Access Signature (SAS) <\/strong>para ler o backup da Storage account:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-9823 aligncenter\" src=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_4.png\" alt=\"\" width=\"780\" height=\"401\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_4.png 1540w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_4-300x154.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_4-1024x527.png 1024w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_4-768x395.png 768w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_4-1536x790.png 1536w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_4-700x360.png 700w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_4-410x211.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_4-100x51.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_4-275x141.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_4-20x10.png 20w\" sizes=\"auto, (max-width: 780px) 100vw, 780px\" \/><\/p>\n<p>1 &#8211; Procure a Storage Account onde est\u00e1 armazenando seu Backup<\/p>\n<p>2 &#8211; Clique em Shared Acess Signature<\/p>\n<p>3 &#8211; Voc\u00ea pode definir quais acessos dar para essa chave que vai compartilhar.<\/p>\n<p>4 &#8211; Defina uma data limite para essa data ficar v\u00e1lida. Fiz um teste aqui e ao tentar restaurar ap\u00f3s passar a data, \u00e9 retornado um erro.<\/p>\n<p>5 &#8211; Pode limitar qual IP vai poder ser usado para fazer o restore (olha o n\u00edvel de seguran\u00e7a).<\/p>\n<p>6 &#8211; Gere a SAS.<\/p>\n<p>Ao gerar a SAS, vai ser gerado as informa\u00e7\u00f5es abaixo:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-9822 aligncenter\" src=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_5.png\" alt=\"\" width=\"991\" height=\"320\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_5.png 2151w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_5-300x97.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_5-1024x330.png 1024w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_5-768x248.png 768w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_5-1536x496.png 1536w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_5-2048x661.png 2048w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_5-700x226.png 700w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_5-410x132.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_5-100x32.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_5-275x89.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_5-20x6.png 20w\" sizes=\"auto, (max-width: 991px) 100vw, 991px\" \/><\/p>\n<p>Vamos precisar da SAS Token, mas quando for usar temos que tirar o &#8220;?&#8221; que aparece na primeira letra.<\/p>\n<p>Mais informa\u00e7\u00f5es sobre SAS:<\/p>\n<ul>\n<li><a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/storage\/common\/storage-dotnet-shared-access-signature-part-1\" target=\"_blank\" rel=\"noopener\">https:\/\/docs.microsoft.com\/en-us\/azure\/storage\/common\/storage-dotnet-shared-access-signature-part-1<\/a><\/li>\n<li><a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/storage\/blobs\/storage-dotnet-shared-access-signature-part-2\" target=\"_blank\" rel=\"noopener\">https:\/\/docs.microsoft.com\/en-us\/azure\/storage\/blobs\/storage-dotnet-shared-access-signature-part-2<\/a><\/li>\n<\/ul>\n<p>Agora vamos criar a credencial com essa chave gerada:<\/p>\n<pre class=\"lang:tsql decode:true\">CREATE CREDENTIAL [Backup_Azure_SAS]\r\nWITH IDENTITY = 'Shared access signature'\r\n, SECRET = 'sv=2017-11-09&amp;ss=bfqt&amp;srt=sco&amp;sp=rwdlacup&amp;se=2018-11-30T18:22:21Z&amp;st=2018-11-30T10:22:21Z&amp;spr=https&amp;sig=W3GB9ZR5Uc5U1EyrRkWDGlCCfOxn0oJLbdIOHym98sE%3D'\r\n<\/pre>\n<p>Se tentar restaurar vai gerar o erro abaixo:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\" wp-image-9821 aligncenter\" src=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_6.png\" alt=\"\" width=\"1194\" height=\"148\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_6.png 1607w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_6-300x37.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_6-1024x127.png 1024w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_6-768x95.png 768w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_6-1536x190.png 1536w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_6-700x87.png 700w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_6-410x51.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_6-100x12.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_6-275x34.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_6-20x2.png 20w\" sizes=\"auto, (max-width: 1194px) 100vw, 1194px\" \/><\/p>\n<p>Para funcionar temos que criar a credencial com nome do nosso caminho do blob storage + container que conseguimos pegar na tela abaixo:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-9834 aligncenter\" src=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Restore_11.png\" alt=\"\" width=\"449\" height=\"229\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Restore_11.png 1071w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Restore_11-300x153.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Restore_11-1024x523.png 1024w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Restore_11-768x392.png 768w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Restore_11-700x358.png 700w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Restore_11-410x209.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Restore_11-100x51.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Restore_11-275x140.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Restore_11-20x10.png 20w\" sizes=\"auto, (max-width: 449px) 100vw, 449px\" \/><\/p>\n<p>Criada a credencial correta:<\/p>\n<pre class=\"lang:tsql decode:true\">CREATE CREDENTIAL [https:\/\/bkpsqlserver.blob.core.windows.net\/bkpsqlmibc]\r\nWITH IDENTITY = 'Shared access signature'\r\n, SECRET = 'sv=2017-11-09&amp;ss=bfqt&amp;srt=sco&amp;sp=rwdlacup&amp;se=2018-11-30T18:22:21Z&amp;st=2018-11-30T10:22:21Z&amp;spr=https&amp;sig=W3GB9ZR5Uc5U1EyrRkWDGlCCfOxn0oJLbdIOHym98sE%3D'<\/pre>\n<p>Finalmente conseguimos chegar no Restore:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-9820 aligncenter\" src=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_7.png\" alt=\"\" width=\"1179\" height=\"204\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_7.png 1495w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_7-300x52.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_7-1024x177.png 1024w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_7-768x133.png 768w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_7-700x121.png 700w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_7-410x71.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_7-100x17.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_7-275x48.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_7-20x3.png 20w\" sizes=\"auto, (max-width: 1179px) 100vw, 1179px\" \/><\/p>\n<p>Agora conseguimos executar o restore com sucesso:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-9833 aligncenter\" src=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Restore_9.png\" alt=\"\" width=\"1140\" height=\"125\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Restore_9.png 1600w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Restore_9-300x33.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Restore_9-1024x113.png 1024w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Restore_9-768x84.png 768w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Restore_9-1536x169.png 1536w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Restore_9-700x77.png 700w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Restore_9-410x45.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Restore_9-100x11.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Restore_9-275x30.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Restore_9-20x2.png 20w\" sizes=\"auto, (max-width: 1140px) 100vw, 1140px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>Realizando um select em uma tabela da base restaurada:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-9832 aligncenter\" src=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Restore_10.png\" alt=\"\" width=\"995\" height=\"337\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Restore_10.png 1538w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Restore_10-300x102.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Restore_10-1024x347.png 1024w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Restore_10-768x260.png 768w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Restore_10-1536x520.png 1536w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Restore_10-700x237.png 700w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Restore_10-410x139.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Restore_10-100x34.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Restore_10-275x93.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Restore_10-20x7.png 20w\" sizes=\"auto, (max-width: 995px) 100vw, 995px\" \/><\/p>\n<p><strong>Fabricio, eu consigo usar a estrat\u00e9gia de backup FULL+DIFF para migrar para o MI com um tempo menor de parada do meu ambiente?<\/strong><\/p>\n<p>R: Isso ainda n\u00e3o \u00e9 poss\u00edvel.<\/p>\n<p>Se tentar restaurar um backup com NORECOVERY vai tomar o erro abaixo:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-9819 aligncenter\" src=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_8.png\" alt=\"\" width=\"1132\" height=\"172\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_8.png 1443w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_8-300x46.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_8-1024x155.png 1024w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_8-768x117.png 768w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_8-700x106.png 700w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_8-410x62.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_8-100x15.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_8-275x42.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Restore_8-20x3.png 20w\" sizes=\"auto, (max-width: 1132px) 100vw, 1132px\" \/><\/p>\n<p>Para fazer uma migra\u00e7\u00e3o de uma base grande com um tempo m\u00ednimo de Downtime temos que usar outra estrat\u00e9gia que mostrarei em posts futuros.<\/p>\n<p>Aproveitando a brincadeira de restore&#8230;. =)<\/p>\n<p>Ligando um profile consigo ver que o MI transforma meu comando simples de restore no comando abaixo:<\/p>\n<pre class=\"lang:tsql decode:true\">RESTORE DATABASE [2d16a9d2-e77f-4317-9f7d-56e18fdd09ba] \r\nFROM URL = N'https:\/\/bkpsqlserver.blob.core.windows.net\/bkpsqlmibc\/TesteMigracao_MI.bak' \r\nWITH STATS=10, BUFFERCOUNT=8, MAXTRANSFERSIZE=3145728, NORECOVERY, REPLACE, \r\nMOVE N'TesteMigracaoMI' TO N'C:\\WFRoot\\DB.4\\Fabric\\work\\Applications\\Worker.CL_App14\\work\\data\\2d16a9d2-e77f-4317-9f7d-56e18fdd09ba.mdf' , \r\nMOVE N'TesteMigracaoMI_log' TO N'C:\\WFRoot\\DB.4\\Fabric\\work\\Applications\\Worker.CL_App14\\work\\data\\2d16a9d2-e77f-4317-9f7d-56e18fdd09ba.ldf' , \r\nMOVE N'xtp' TO N'C:\\WFRoot\\DB.4\\Fabric\\work\\Applications\\Worker.CL_App14\\work\\data\\2d16a9d2-e77f-4317-9f7d-56e18fdd09ba.xtp'<\/pre>\n<p>Repara no caminho do disco local que o MI est\u00e1 armazenando nossa base:\u00a0<strong>C:\\WFRoot\\DB.4\\Fabric\\work\\Applications\\Worker.CL_App14\\work\\data<\/strong><\/p>\n<p>Isso acontece na contrata\u00e7\u00e3o do Business Critical. Contratando o General Purpose \u00e9 diferente, mas vamos ver as diferen\u00e7as entre Business Critical e General Purpose em um post futuro.<\/p>\n<p>Tamb\u00e9m \u00e9 interessante ver que o nome da nossa base se transforma em um ID e que ele usa a op\u00e7\u00e3o <strong>NORECOVERY\u00a0<\/strong>por debaixo dos panos.<\/p>\n<p>Ainda analisando os comandos que o MI executa ap\u00f3s o nosso restore, olha que interessante o que ele faz:<\/p>\n<ul>\n<li>Ele n\u00e3o nos deixa restaurar com NORECOVERY, mas ele restaura assim. Em seguida deixa a base online com o RECOVERY.<\/li>\n<li>Colocou em MULTI_USER e READ_WIRTE<\/li>\n<li>Ligou o QUERY_STORE que \u00e9 o padr\u00e3o do MI e Azure SQL Database.<\/li>\n<li>Colocou o Recovery da base como FULL, caso ela ela tenha vindo no backup como SIMPLE.<\/li>\n<li>Habilitou o CHECKSUM e setou o AUTO_CLOSE OFF caso essas op\u00e7\u00f5es viessem com as configura\u00e7\u00f5es erradas no Backup.<\/li>\n<\/ul>\n<pre class=\"lang:tsql decode:true\">RESTORE DATABASE [2d16a9d2-e77f-4317-9f7d-56e18fdd09ba] WITH RECOVERY, CHECKSUM, KEEP_CDC, KEEP_CDC, NEW_BROKER\r\n\r\nALTER DATABASE [2d16a9d2-e77f-4317-9f7d-56e18fdd09ba] SET MULTI_USER\r\n\r\nALTER DATABASE [2d16a9d2-e77f-4317-9f7d-56e18fdd09ba] SET READ_WRITE WITH NO_WAIT\r\n\r\nALTER DATABASE [2d16a9d2-e77f-4317-9f7d-56e18fdd09ba] SET QUERY_STORE = ON\r\n\r\nALTER DATABASE [2d16a9d2-e77f-4317-9f7d-56e18fdd09ba] SET RECOVERY FULL\r\n\r\nALTER DATABASE [2d16a9d2-e77f-4317-9f7d-56e18fdd09ba] SET PAGE_VERIFY CHECKSUM WITH NO_WAIT\r\n\r\nALTER DATABASE [2d16a9d2-e77f-4317-9f7d-56e18fdd09ba] SET AUTO_CLOSE OFF\r\n\r\nALTER AUTHORIZATION ON DATABASE::[2d16a9d2-e77f-4317-9f7d-56e18fdd09ba] TO [dba_admin]\r\n<\/pre>\n<p>Cool!!!<\/p>\n<p>Nesse post come\u00e7amos a entrar em mais detalhes de como o MI funciona internamente.<\/p>\n<p>A brincadeira est\u00e1 ficando mais legal. =)<\/p>\n<p><b>Gostou dessa Dica?<\/b><\/p>\n<p>Curta, comente, compartilhe\u2026<\/p>\n<p>Assine meu canal no\u00a0<a class=\"external-link wpel-icon-left\" href=\"https:\/\/www.youtube.com\/channel\/UCeBRAO_LLrUdSrOXIywjzRA\" target=\"_blank\" rel=\"external noopener noreferrer nofollow\" data-wpel-link=\"external\">Youtube<\/a>\u00a0, curta minha p\u00e1gina no\u00a0<a class=\"external-link wpel-icon-left\" href=\"https:\/\/www.facebook.com\/FabricioLimaSolucoesemBancodeDados\/\" target=\"_blank\" rel=\"external noopener noreferrer nofollow\" data-wpel-link=\"external\">Facebook<\/a>\u00a0 ou siga nossa p\u00e1gina no\u00a0<a class=\"external-link wpel-icon-left\" href=\"https:\/\/www.instagram.com\/fabriciolimasolucoesembd\" target=\"_blank\" rel=\"noopener nofollow external noreferrer\" data-wpel-link=\"external\">Instagram<\/a>\u00a0para receber Dicas de Leituras, V\u00eddeos e Eventos sobre SQL Server.<\/p>\n<p>At\u00e9 o pr\u00f3ximo post.<\/p>\n<p>Abra\u00e7os,<\/p>\n<p>Fabr\u00edcio Lima<\/p>\n<p>Microsoft Data Platform MVP<\/p>\n<p>Consultor e Instrutor SQL Server<\/p>\n<p>Trabalha com SQL Server desde 2006<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Fala Pessoal, Esse \u00e9 mais um post da s\u00e9rie sobre o Azure SQL Database Managed Instance. Caso ainda n\u00e3o tenha visto, seguem os posts anteriores: Azure SQL DB Managed Instance \u2013 Introdu\u00e7\u00e3o Managed Instance \u2013 Criando minha primeira inst\u00e2ncia Managed Instance \u2013 Como se conectar direto do SSMS utilizando uma VPN? Managed Instance \u2013 Como [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"footnotes":""},"categories":[1616,1617,1512,280],"tags":[1641],"class_list":["post-9817","post","type-post","status-publish","format-standard","hentry","category-azure-sql-database","category-managed-instance","category-sql-azure","category-virtual-pass-br","tag-azure"],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/9817","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/comments?post=9817"}],"version-history":[{"count":10,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/9817\/revisions"}],"predecessor-version":[{"id":9853,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/9817\/revisions\/9853"}],"wp:attachment":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/media?parent=9817"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/categories?post=9817"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/tags?post=9817"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}