Instalando o novo SQL Server Management Studio

No final de Junho, foi anunciado pela Microsoft [1] uma versão independente do SQL Server Management Studio (SSMS) para download. Obviamente, isso saiu em diversos blogs/posts conhecidos [2][3][4], por isso não vou falar muito mais sobre ele aqui. Esta versão, além de só existir em Inglês, contém um instalador pequeno (aproximadamente 32MB) que torna o processo muito prático. Vale ressaltar que no momento deste post, a versão mais atual é a “July 2015 Preview”.

Se você quiser baixar este novo SSMS, basta ir para a página de download do SSMS [5] e clicar em “Download SQL Server Management Studio July 2015 Preview”. Após baixar o arquivo, basta executá-lo para que ele comece a baixar os arquivos necessários para a instalação como uma prévia do .NET Framework 4.6.

NewManagementStudio

Caso você esbarre em algum erro no processo de instalação, veja nas notas de lançamento do SSMS [6] se o erro ou comportamento é conhecido e documentado. Eu acabei não conseguindo instalar o novo SSMS na primeira tentativa, pois estava com o SQL Server 2016 CTP 2.0 instalado na minha VM.

Depois de instalado, sempre que o novo SSMS for iniciado, ele verificará se existem novas atualizações disponíveis para download. Mas caso você queria verificar manualmente, basta clicar no botão “Check for Updates…”.

NewManagementStudio_Updates

E aí, você já instalou ou tem instalado o novo SSMS? O que achou dessa novidade?

REFERÊNCIAS / LINKS

[1] Announcing SQL Server Management Studio – June 2015 Release (http://blogs.msdn.com/b/sqlreleaseservices/archive/2015/06/24/sql-server-management-studio-june-2015-release.aspx)
[2] SQL Server 2016 launches new rapid preview model with CTP 2.1 (http://blogs.technet.com/b/dataplatforminsider/archive/2015/06/24/sql-server-2016-launches-new-rapid-preview-model-with-ctp-2-1.aspx)
[3] SQL Server Management Studio Now Has Its Own Upgrade Path (http://sqlmag.com/sql-server-2016/sql-server-management-studio-now-has-its-own-upgrade-path)
[4] New SQL Server Management Studio 2015/June – with Check for Updates! (http://www.brentozar.com/archive/2015/06/new-sql-server-management-studio-2015june-with-check-for-updates/)
[5] Download SQL Server Management Studio (https://msdn.microsoft.com/en-us/library/mt238290.aspx)
[6] SQL Server Management Studio – Release Notes (https://msdn.microsoft.com/en-us/library/mt238486.aspx)

Migração do MSX SQL Server 2005 para SQL Server 2014

Após escrever o Post anterior, a equipe de DBA’s no qual faço parte, decidiu migrar o servidor do MSX para uma instância que temos com o SQLServer 2014. Escrevo aqui os detalhes dessa migração.

Ao migrar de servidor, os jobs já existentes devem ser criados no novo servidor master.

Para migrar os jobs é bem simples, basta realizar os seguintes passos no servidor SQL Server 2005:

Abrir o Object Explorer Details (F7) -> SQL Server Agent (MSX) -> Jobs -> Multi-Server Jobs. Selecionar todos os Jobs que deseja migrar, clica com o botão direito e escolher a opção Script Job as -> Create To e gerar o script da melhor forma que achar para manipulá-lo ou executá-lo.

Foto1MigracaoMSX

Lembrando que esse script é alterado facilmente, trazendo maior flexibilidade. No meu caso, eu retirei a parte que associa o Job ao servidor target para realizar esse vínculo mais tarde.

Simples de realizar a migração dos Jobs não? Exatamente, realmente é bem simples, mas às vezes pode ocorrer o seguinte erro:

ErroMigracaoMSX

“Unable to cast object of type ‘System.DBNull’ to type ‘System.String’.”

Esse erro pode atrapalhar ou atrasar um pouquinho na migração. No post anterior foi relatado que frequentemente o servidor master, perdia a conexão com o servidor target e que a solução era excluir o servidor target e recriá-lo, com isso, o Server_id na sysjobservers muda, ocasionando esse erro na hora de migrar, já que no histórico de execuções, teremos o nome do Job como NULL, sendo que esse servidor não existe mais.

Executemos o seguinte comando para verificar :

 USE MSDB

SELECT j.Name,

js.server_id,

ts.Server_id

FROM dbo.sysjobservers js

INNER JOIN msdb.dbo.sysjobs j ON j.job_id = js.job_id

LEFT JOIN msdb.dbo.systargetservers ts ON ts.server_id = js.server_id

WHERE j.name IS NULL

 

Ao encontrar registros no SELECT anterior, executar o seguinte script para eliminar esses registros:



USE MSDB

DELETE FROM js

FROM dbo.sysjobservers js

INNER JOIN dbo.sysjobs j ON j.job_id = js.job_id

LEFT JOIN dbo.systargetservers ts ON ts.server_id = js.server_id

WHERE ts.server_id IS NULL

Como aqui estamos excluindo os registros de associação de determinado job  com um target server que não existe mais, não há problemas de executar esse script. Lembrando que é sempre bom realizar a verificação antes (SELECT).

Resolvendo esse problema, é só executar o passo de gerar o script para migração novamente.

Como os scripts que geram os jobs estão salvos, iremos desassociar todos os servidores target do servidor master que está na versão SQL Server 2005 (SQLServer2005) com o seguinte script:

Conectar no servidor SQLServer2005:


USE msdb

DELETE FROM dbo.systargetservers

WHERE server_name in ('','','','','','') --Colocar aqui a lista dos servidores <em>target</em>

Às vezes, por motivo de falha de atualização e na comunicação entre os servidores, essa dissociação não é realizada tão facilmente, fazendo com que seja necessário realizar manualmente com os seguintes passos:

Conectar no Servidor Target:

No Microsoft SQL Server Management Studio, clicar com o botão direito no SQL Server Agent -> Multi Server Administration -> Defect

Obs.: é importante que essa dissociação seja realizada, pois só é possível ter um servidor master para cada servidor target.

Após realizar a dissociação, iremos configurar o novo servidor como Master seguindo os seguintes passos:

No Microsoft SQL Server Management Studio, clicar com o botão direito no SQL Server Agent -> Multi Server Administration -> Make This a Master …

É só realizar a configuração solicitada. É bem simples e intuitivo.

E prontinho! É só gerar os scripts de criação dos jobs e testar a conexão. Após essa migração, que tem 15 dias, os problemas que ocorreriam com frequência e que foram relatados no Post Anterior não aconteceram.

Obs.: É importante lembrar que se você tiver alertas configurados e que nesses alertas é disparado um Job  a associação Alert + Job deverá ser refeita, pois ao alterar um job essa referência é perdida.


USE MSDB

EXEC msdb.dbo.sp_update_alert @name=N'NomeAlert',

@job_name=N'NomeJob'

Podemos perceber que a migração é bem simples de ser realizada necessitando apenas tomar alguns cuidados.

Referências:

https://sqlsanctum.wordpress.com/2015/02/12/multi-server-job-scripting-failure/

Como verificar o HASH de um arquivo?

Após o lançamento do último patch de segurança nesta terça-feira (14/07/2015) que foi descrito no Security Bulletin MS15-058 [1] e no KB #3065718 [2], muita gente – eu inclusive – correu atrás de mais informações sobre o hotfix em blogs confiáveis. Em casos de atualizações em geral, costumo verificar alguns blogs do Aaron Bertrand [3][4] (twitter) que sempre comenta sobre o assunto. Sobre este patch em específico, o post dele no SQL Sentry contém um quadro que facilitou bastante identificar qual arquivo baixar de acordo com sua versão.

Após verificar as repercussões do patch, o próximo passo é baixar o arquivo adequado contendo o hotfix e aplicá-lo no ambiente de desenvolvimento. Certo? Ainda não. Como você pode garantir que o arquivo que baixou é realmente o mesmo arquivo disponibilizado pela Microsoft? Quem garante que você não está sendo vítima de um ataque de clickjacking e acabou baixando um malware? E se baixou o arquivo de uma outra fonte que não a Microsoft? Para isso utiliza-se o HASH de um arquivo.

A ideia de um HASH é criar uma forma única de identificação de um arquivo como uma impressão digital de uma pessoa. Diversos algoritmos estão disponíveis para a criação de HASHES. Um dos algoritmos mais famosos é o MD5, porem este já foi quebrado tem alguns anos. Atualmente utiliza-se mais a família de algoritmos SHA-2 (SHA-224, SHA-256, SHA-384 e SHA-512) e, apesar de colisões diversas terem sido identificadas no SHA-1, o algoritmo SHA 1 ainda é bastante utilizado em protocolos de segurança como SSL e IPSec.

“Mas por que você está falando sobre HASHES? O que isso tem a ver com o patch?” Se você olhar no final do KB na seção “File hash information”, existem 2 HASHES (SHA-1 e SHA-256) para cada arquivo disponibilizado. Então, após baixar o arquivo, basta verificar o HASH do arquivo para garantir que este é o arquivo verdadeiro.

GERANDO O HASH DE UM ARQUIVO

Para gerar o HASH desses arquivos, você pode usar o antigo File Checksum Integrity Verifier (FCIV) [5]. O problema do FCIV é sua limitação: ele gera apenas os HASHES MD5 e SHA-1. Como eu disse, ele é bem antigo. No entanto, só de verificar um dos HASHES do arquivo, você garante uma camada adicional de segurança.

Utilizar o FCIV é bem direto. Supondo que quero verificar o SHA-1 do arquivo “D:\SQLServer2008R2-KB3045314-x64.exe”, basta eu executar o comando abaixo e voilà.

Não importa o que digam, você ainda faz o seu trabalho FCIV!

Não importa o que digam, você ainda faz o seu trabalho FCIV!

Outra forma de gerar os HASHES é através do comando Get-FileHash [6] do PowerShell (testado na versão 4.0 em diante). Este método já está atualizado com o algoritmo SHA-256. Para gerarmos os HASHES do mesmo arquivo, basta executarmos os seguintes comandos e verificar com os fornecidos pela Microsoft.

Quanta elegância esse PoSh!

Quanta elegância esse PoSh!

Agora você executar os arquivos tendo certeza de que são verdadeiros! Bom patching!

REFERÊNCIAS / LINKS

[1] Microsoft Security Bulletin MS15-058 – Important (https://technet.microsoft.com/en-us/library/security/MS15-058)
[2] MS15-058: Vulnerabilities in SQL Server could allow remote code execution: July 14, 2015 (https://support.microsoft.com/en-us/kb/3065718)
[3] SQLblog.com (http://sqlblog.com/blogs/aaron_bertrand/default.aspx)
[4] Blogs.SqlSentry.com (http://blogs.sqlsentry.com/author/AaronBertrand/)
[5] File Checksum Integrity Verifier utility (https://support.microsoft.com/en-us/kb/841290)
[6] Get-FileHash (https://technet.microsoft.com/en-us/library/dn520872.aspx)