Fala galerinha, imaginem o cenário… você está aplicando um Service Pack no SQL e derrepende recebe uma mensagem de erro similar à abaixo:
“The cached MSI file ‘C:WindowsInstaller932b909.msi’ is missing. Its original file is ‘sql_engine_core_inst.msi’ and it was installed for product ‘SQL Server 2008 R2 SP1 Database Engine Services’ from ‘<network path>’, version ‘10.51.2500.0’, language ‘ENU’.“
Bom a mensagem de erro na verdade pode variar dependendo da versão instalada mas a causa é uma só…. arquivos MSIs necessários para o setup do SQL e que deveriam estar na pasta C:WindowsInstaller, misteriosamente desapareceram. Você que já passou por isso, principalmente naqueles ambientes de administração compartilhada, sabe que agora começa o calvário :). E acredite.. isso é bastante comum!!
Bom o artigo How to restore the missing Windows Installer cache files and resolve problems that occur during a SQL Server update cobre em detalhes como resolver este problema, ele disponibiliza um .vbs que você deve executar no servidor SQL Server. Sua execução irá gerar um .txt como output e então você deve começar uma verdadeira mineração para identificar os MSIs faltantes.
Basicamente é sair varrendo o output procurando por “DOES NOT exist on the path”, onde deverá encontrar algo como abaixo.
!!!! sql_engine_core_inst.msi DOES NOT exist on the path in the path G:x64setupsql_engine_core_inst_msi !!!!
Depois é identificar os build/versão de cada MSI para saber se ele é da versão RTM ou Service Pack ou Cumulative Update ou ainda um HotFix, é… as vezes você vai constatar que está faltando um mesmo MSI (exemplo: sql_engine_core_inst.msi), mas de vários builds diferentes e não adianta querer enganar não porque o setup não vai passar :).
Então o próximo passo será restaurar o caminho de origem de todos os MSI (o Patch LastUsedSource) para cada build. Ou seja, supondo que o caminho seja n;1;c: ca91e857a4f12dd390f0821a3HotFixSQLFiles, pode se preparar para baixar o mesmo Hotfix e recriar o patch original. E se você achar o mesmo MSI para a versão RTM, Service Pack 1/2, Cumulative Update, etc, pode fazer a mesma coisa para todos. É … facíl não colega!
O lado bom é que depois que você recriar todos os caminhos originais você pode reexecutar o .vbs que ele já identicará os MSI e fará a recuperação dos mesmos para o C:WindowsInstaller. Lembre-se que para Service Packs ou CU você deve usar a opção X para poder extrair os arquivos para um diretório de sua escolha. Você pode por exemplo colocar o caminho originalmente usado por um fix como c: ca91e857a4f12dd390f0821a3
Bom o artigo que citei acima descreve passo-a-passo como resolver isso! No entanto, em Jan/18 um Sr. Escalation Engineer to time de CSS, motivado por um caso que ele pegou e que deve ter levado horas para resolver, desenvolveu a ferramenta FixMissingMSI (acredite este problema é bem comum).
A grande sacada da ferramenta é que além de ser gráfica ela facilita muito a identificação dos MSI (missing/mismatched) e suas respectivas versões/builds. Então, é recriar os caminhos e usar a própria ferramenta para recuperar os MSI.
Bom, a partir de agora é com vocês. Visite o artigo sobre a ferramenta, faça o download e não deixem de ler o manual que o Simon fez sobre a ferramenta ok!?
Artigo: https://blogs.msdn.microsoft.com/psssql/2018/01/24/sql-setup-toolsuite-introduction-1-fixmissingmsi/
Download: https://github.com/suyouquan/SQLSetupTools
Na página de download do Github você verá que o cara também fez duas outras ferramentinhas muito legais.
Abraços e boa sorte 🙂
Nilton Pinheiro