A opção 6 do XKTools é simples.
Selecione-a no menu inicial, escolha o arquivo .bacpac, modificado ou não, e clique em "open":
A opção 6 do XKTools é simples.
Selecione-a no menu inicial, escolha o arquivo .bacpac, modificado ou não, e clique em "open":
Após fazer download do bacpac vamos limpar ele antes mesmo de iniciar o restore. Este processo é de extrema utilidade no caso de bancos de dados com tabelas de log grandes demais. Ao remover tabelas não necessárias para uso em uma VM de DEV, o processo de restore ficará muito mais rápido!
Escolha a opção 4 e aperte ENTER, aguarde alguns segundos.
Juntei scripts uteis nas tarefas administrativas de ambientes do F&O em um conjunto que chamei de XKTools. São comandos de powershell simples. Utilizei o ChatGPT para otimizar alguns, criar outros e juntar tudo no que chamei de XKTools.
Como sempre, vou documentar o uso do XKTools aqui para meu futuro uso, caso isso ajude mais alguém ótimo!
Em um servidor de F&O abra um Powershell e execute o comando abaixo para efetuar o download dos arquivos que estão no meu Git:
iwr -useb https://raw.githubusercontent.com/fsilva-jr/XKtools/main/DownloadXKTools.ps1 | iex
O download será iniciado, na sequência o arquivo será descompactado e a pasta XKTools será criada dentro da pasta C:\temp. Uma nova janela do Powershell será aberta, este é o menu inicial!
É comum que antes de um D365F&O entrar em produção você precise pegar um banco de dados de um ambiente Tier 1, seja ele uma VM no Azure ou hospedada em seu servidor local.
Muitos testes e parametrizações são feitas na fase inicial, quando tudo está pronto para entrar em produção, esta movimentação é necessária.
Neste tutorial vamos preparar uma base de dados hospedada em minha VM de desenvolvimento e fazer o upload dela para o LCS.
Com o arquivo de backup disponivel no LCS, poderemos restaurar ela em um ambiente Tier 2 e consequentemente executar a restauração para o ambiente de produção!
Já existem diversos tutoriais na internet que tratam deste assunto. Registro este processo aqui simplesmente pelo fato de sempre ter funcionado em minhas atividades e para me servir de consulta em trabalhos futuros!
O primeiro passo para este processo é executar o backup de seu banco de dados em sua VM, depois você deve restaurar este backup também em seu SQL Server.
Obs: Se você não souber fazer um backup/restore em seu SQL Server, larga tudo e me liga!!!
Ao final deste processo você terá 02 bancos de dados disponiveis, algo mais ou menos assim:
Detalhes importantes:
Agora precisamos "preparar" o banco de dados. Devemos executar o script abaixo, este script executará as alterações necessárias para que o banco de dados possa ser utilizado na nova estrutura de servidores onde ele ficará armazenado. Mais detalhes sobre as alterações você encontrará no final deste tutorial!
Script:
update sysglobalconfiguration
set value = 'SQLAZURE'
where name = 'BACKENDDB'
update sysglobalconfiguration
set value = 1
where name = 'TEMPTABLEINAXDB'
drop procedure XU_DisableEnableNonClusteredIndexes
drop procedure if exists SP_ConfigureTablesForChangeTracking
drop procedure if exists SP_ConfigureTablesForChangeTracking_V2
drop schema [NT AUTHORITY\NETWORK SERVICE]
drop user [NT AUTHORITY\NETWORK SERVICE]
drop user axdbadmin
drop user axdeployuser
drop user axmrruntimeuser
drop user axretaildatasyncuser
drop user axretailruntimeuser
drop user axdeployextuser
-- Clear encrypted hardware profile merchand properties
update dbo.RETAILHARDWAREPROFILE set SECUREMERCHANTPROPERTIES = null where SECUREMERCHANTPROPERTIES is not null
Depois de ter executado o script contra a base de dados correta, vamos exporta-la no formato .bacpac.
Eu tenho o costume de SEMPRE baixar o SQLPackage, já tive problemas com versões desatualizadas!
https://aka.ms/sqlpackage-windows
Obs2: Se não sabe, me liga!Obs3: o D365fo.tool também pode ser utilizado neste caso!
SqlPackage.exe /a:export /ssn:localhost /sdn:AxDBToLCS /tf:c:\temp\AXDBToLCS.bacpac /p:CommandTimeout=4200 /p:VerifyFullTextDocumentTypesSupported=false /SourceTrustServerCertificate:True
Agora que temos o arquivo .bacpac de nosso banco de dados preparado após execução do script, é só fazer o upload dele para o LCS Assets.
É comum termos problemas com o tempo necessário para que um arquivo do tipo .bacpac seja restaurado independente de ser uma VM em seu PC ou Laptop ou em uma VM hospedada no Azure (CHE).
As ferramentas disponiveis para trabahar com o bacpac são as seguintes: SQLPackage e D365fo.tools
Ambas as ferramentas possuem variáveis para ajudar nesta tarefa de acelerar o tempo necessário para o restore...
Utilizar disco SSD durante o restore obviamente ajuda a melhorar o tempo de restore se comparado a um disco do tipo HDD. Não creio que você utilize disco do tipo HDD em seu PC ou Laptop hoje em dia, se este for o seu caso, você não tem salvação amigo... vai comprar um SSD pelamor!!!
Em VM´s no Azure, estratégias de gerenciamento de disco podem lhe ajudar a melhorar a performance de toda a VM. Após a criação da VM, com poucas mudança, você pode ter a flexibilidade de alterar o disco onde os arquivos do banco de dados ficam armazenados. Desta forma será possível conrverte-los entre SSD e HDD de acordo com a necessidade!
Tendo o hardware adequado você verá uma melhora no tempo de restore do bacpac com certeza!
Utilizando o SQLPackage, temos alguns comandos que podem ajudar nesta situação. um deles é o RebuildIndexesOfflineForDataPhase=True. Com este comando o rebuild dos indices acontece de forma offline. Sugiro obviamente que você faça seus testes! O ganho de tempo com este comando é visivel e significativo.
Outro comando usando o SQLPackage é o DisableIndexesForDataPhase=FALSE. Durante o restore notamos que o "disable index" é executado, logo após o bacpac começa a trabalhar com as tabelas e ao final os indices são habilitados novamente. Usando o comando DisableIndexesForDataPhase=FALSE a importação acontece sem o "disable" e o "enable" dos indices. Basicamente com este comando os indices não são recriados. As tabelas continuam com os indices, eles apenas não serão atualizados! Em meu teste o tempo de restore do bacpac caiu pela metade! Reforço que você DEVE fazer seus próprios testes e analisar o resultado com cuidado!
Outra alternativa é a opção "Delayed Durability". Esta opção está disponivel apenas quando o banco de dados já existe:
USE [master]
GO
ALTER DATABASE [DBName] SET RECOVERY SIMPLE WITH NO_WAIT
GO
ALTER DATABASE [DBName] SET DELAYED_DURABILITY = FORCED WITH NO_WAIT
GOExistem outros comandos para o SQLPackage, veja mais deles neste link: SQL Pacakge
O D365fo.tools tem outros comandos que nos ajudam a melhorar o tempo de restore, um deles é o "Clear-D365TableDataFromBacpac". Com este comando você pode remover tabelas "indesejadas" antes de iniciar o restore caso você não tenha feito isso antes de exportar o arquivo .bacpac pelo LCS. Exemplo de uso deste comando: Clear-D365TableDataFromBacpac -Path "C:\Temp\preprod.bacpac" -TableName "*Staging*","BatchHistory","SYSDATABASELOG*", -ClearFromSource
Desta forma o bacpac a ser importado não terá estas tabelas, isso vai acelerar um pouco mais o processo!
Com as dicas acima o tempo de restore com certeza será menor!
Utilize as dicas acima por sua conta e risco, todos juntos ou um a um, faça seus próprios testes e analise os resultados em sua VM.
Boa sorte!
Encontrei este erro recentemente ao importar um arquivo .bacpac no SQL de uma VM tier 1 do D365F&O:
Download and install SqlPackage - SQL Server | Microsoft Learn
No dia de hoje a versão é: sqlpackage-win-x64-en-162.2.111.2
Até a próxima!