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 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!
Esta é a mensagem de erro recebida ao tentar restaurar um bacpac:
Error SQL72014: Framework Microsoft SqlClient Data Provider: Msg 4630, Level 16, State 1, Line 1 The permission 'KILL DATABASE CONNECTION' is not supported in this version of SQL Server. Alternatively, use the server level 'ALTER ANY CONNECTION' permission.
Error SQL72045: Script execution error. The executed script:
GRANT KILL DATABASE CONNECTION TO [ms_db_configreader];
Eu apontei a seguinte dica como solução, mas ela funcionou apenas 01 vez: https://fsilvajunior.blogspot.com/2024/05/kill-database-connection-erro-ao.html
A solução apresentada abaixo funcionou:
Faça o download do arquivo .bacpac e renomeio alterando a extensão para .zip
SqlPackage.exe /a:import /sf:"c:\Temp\preprod.bacpac" /tsn:localhost /tdn:AXDB2_New /p:CommandTimeout=1200 /TargetTrustServerCertificate:True /mfp:"ModelCopy.xml"
Boa sorte!
If you find this error when importing a .bacpac package to your SQL Server pay attention to the way you are authenticating your connection to SQL Server, even if you are connected into the SQL instance server.
Your line of connection must have this additional parameter:
/TargetTrustServerCertificate:True
Example: SqlPackage.exe /a:import /sf:c:\temp\backup.bacpac /tsn:localhost /targetTrustServerCertificate:True /tdn:AxDBN /p:CommandTimeout=600
If you want to know more about it, go to this place:
https://techcommunity.microsoft.com/t5/azure-sql-blog/connection-security-improvements-in-sqlpackage-161/ba-p/3672758