NoLock – Remote table-valued function calls

Olá pessoas. Estou participando de uma migração e achei interessante compartilhar um caso com vocês.

O Post é bem pequenino somente a título de curiosidade mesmo.

Nessa migração estamos retirando as bases de dados do ambiente de produção SQL Server 2008 R2 com modo de compatibilidade 80 para SQL Server 2014 com modo de compatibilidade 120.

A maior dificuldade dessa migração é sair do modo de compatibilidade 80, pois a partir dele muita sintaxe deixou de funcionar como o * = / = * substituído pelo Left join / Right Join e a sintaxe do Raiserror sendo exigido colocar os parâmetros entre parênteses, porém uma coisa que deixou a equipe mais “encucada”  foi o NoLock .

Sabemos que os desenvolvedores quase nunca usam o NoLock, né? (sarcasmo). Então tivemos uma amostra legal do erro.

Na documentação do SQL Server 2016 está dizendo que em versões futuras não será mais permitido a utilização de Hints sem a clausula “With”, porém EM VERSÕES FUTURAS, ou seja, ainda conseguimos usar o NoLock sem o With.

hintssqlserver

Porém quando executamos uma consulta via linked server sem a clausula with, é retornado o seguinte erro:

SELECT *
FROM [sqlh110].master.sys.databases (NOLOCK)

Msg 4122, Level 16, State 1, Line 2
Remote table-valued function calls are not allowed.

Obs.: A consulta foi realizada em um SQL Server 2014 (SP2).

Agora vocês pensam: “O quê é que tem a ver erro de Remote table-value function com o NoLock? “.

Tudo indica que o parse do SQL Server entende aqui que ao colocar o NoLock entre parênteses (NOLOCK) na verdade está chamando uma função remotamente e que não é uma Hint. Vi essa explicação no seguinte link:

(http://stackoverflow.com/questions/17242733/why-is-with-required-when-using-nolock-on-a-remote-table-call)

Podemos provar isso com a seguinte consulta:

SELECT *
FROM [sqlh110].master.sys.databases NOLOCK

resultadoselectnolock

Ao retirar o parênteses a consulta retorna o resultado normalmente, mesmo sem a clausula “With”.

Identificamos que para o código voltar a funcionar basta retirar os parênteses, porém já que o mesmo será editado para corrigir o erro recomendo que editem da forma “completa”, pois, como olhamos na documentação, isso será descontinuado, então não custa nada sempre que forem utilizar a Hint “NoLock”, que a mesma seja precedida pela clausula “With”, evitando assim, erros em versões futuras.

Editado em 28/12/2016

Conforme observado pelo Reginaldo Silva o nolock sem os parênteses funciona, pois na verdade o SQL Server entende que a palavra “NoLock” é um alias e não uma Hint para realizar a leitura suja, ou seja, para consertar de fato o erro citado no post é colocando o with antes do (nolock).

Anúncios

HomeLab – Crie um Template usando um Answer File

Quando estou montando um laboratório, um dos processos que considero mais demorados e repetitivos é a configuração inicial da máquina virtual. Aquele momento em que você bota a ISO [1] na VM e liga pela primeira vez…

001

Você sai clicando nas telas que já viu milhares de vezes até iniciar o processo de instalação do Windows e espera… Se estiver criando a VM em um SSD, este intervalo de tempo pode ser de alguns segundos até poucos minutos. No entanto, se estiver num HD tradicional, você pode abrir o Netflix e rever as 10 temporadas de Supernatural pela enésima vez até que a VM precise de mais interação.

002

Não sei você, mas eu não vou colocar uma senha diferente para cada VM nova que eu criar… Geralmente, vou usar a mesma senha para todas as VMs do meu Home Lab. E convenhamos, a vida é muito curta para ficar instalando Windows.

Após algumas várias instalações de Windows, resolvi pesquisar sobre formas de automatizar todo o processo de instalação, incluindo itens como:

  • Idioma dos aplicativos;
  • Formato de horas, datas, etc;
  • Configuração do teclado; e
  • Senha do administrador.

Além disso, depois de ligar a VM, queria interagir com ela apenas quando eu fosse executar os meus testes.

ENTER THE ANSWER FILE

O Answer File [2] é um documento XML usado para instalações automáticas (unattended). Nele, são determinadas inúmeras configurações para a criação de uma imagem, das quais utilizei apenas as que permitiam a geração de um template para as demais VMs com as configurações que queria.

Já aviso, esse processo parece longo, chato e que não vale o tempo. Mas o objetivo é exatamente economizar tempo para todas as próximas VMs… E ele parece mais difícil do que realmente é.

Dado o aviso, baixe o Windows Assessment and Development Kit (ADK) [3]. Dentro do ADK, está o Windows System Image Manager (SIM) [4] que é exatamente do que precisaremos. Depois de instalar o Gerenciador de Imagem de Sistema do Windows (caso esteja usando o Windows em português), precisaremos da ISO [1] que utilizaremos como base para o template. Na verdade, usaremos apenas o arquivo “install.wim” que geralmente está em “.\sources”. Copie este arquivo para um outro lugar onde possa trabalhar com ele (i.e. “C:\temp”).

Então, vamos ao Windows SIM criar nosso Answer File. Ao clicar em “Novo Arquivo de Respostas…”, é requisitada uma imagem do Windows. Clique em “Sim” e escolha o arquivo que copiou localmente.

003

Depois, escolhemos a edição que usaremos como template e seguimos em frente.

004

Em seguida, caso não possua um arquivo de catálogo, a mensagem abaixo será exibida. Basta clicar em “Sim” e aguardar até que o arquivo seja criado no local onde copiou a imagem.

005

Após a criação do catálogo, a imagem será carregada e aparecerá um Answer File em branco. No painel da imagem, temos os componentes que utilizaremos para customizar o Answer File. Expandindo essa pasta, precisaremos adicionar o “Microsoft-Windows-International-Core” (não confundir com a variação de final WinPE) para configuração de idioma, formatação de hora e teclado. Clicando com o botão direito sobre o componente, vamos adicioná-lo ao “Pass 7 oobeSystem”. Nesta sessão, estamos colocando configurações para a “Out Of the Box Experience” que ficarão no template após rodar o sysprep com o parâmetro “/oobe”.

Eu utilizo os seguintes valores para esse componente:

006

O que se traduz em formatos de hora, data e teclado no padrão brasileiro e o Windows instalado em Inglês. Se quiser entender melhor cada opção, veja aqui [5].

Para o resto das configurações pendentes, usaremos o componente “Microsoft-Windows-Shell-Setup” que também adicionaremos ao “Pass 7 oobeSystem”. Na raiz dele, iremos determinar o “TimeZone”. Para hora de Brasília, uso “E. South America Standard Time”, mas a lista completa está aqui [6].

007

Expandindo o componente, em OOBE, configuro “HideEULAPage” como “True” e “ProtectYourPC” para “1”. Assim, evitamos a página de EULA e definimos as configurações recomendadas de proteção do PC.

008

Finalmente, vamos em “UserAccounts” – no mesmo local onde está OOBE – e definimos a senha de administrador da máquina. Basta colocar a senha em “AdministratorPassword” no campo “Value”. Pronto! Aí, é só salvar o Answer File e partir para o sysprep.

BACK TO THE LAB AGAIN

Voltando para a VM que será o template, pegaremos o arquivo xml que geramos e salvaremos dentro da VM. Supondo que você salvou o xml em “C:\Template_AnswerFile.xml”, no momento em que for rodar o sysprep irá usar este arquivo como valor para o parâmetro “unattend”.

Sysprep.exe /oobe /generalize /shutdown /unattend:C:\Template_AnswerFile.xml

Desta forma, estamos gerando uma imagem com uma nova SID que utilizará o arquivo que criamos para definir as configurações pré-determinadas. Assim que o sysprep terminar a execução, a VM será desligada e estará pronta para ser clonada/gerar um template/etc.

Então, da próxima vez que criar uma máquina a partir deste template, você precisará apenas ligar a VM e ela será configurada automaticamente! Basta colocar a senha que definiu no Answer File e começar os testes!

LINKS

[1] https://www.microsoft.com/en-US/evalcenter/evaluate-windows-server-2016

[2] https://technet.microsoft.com/en-us/library/cc749113(v=ws.10).aspx

[3] https://developer.microsoft.com/en-us/windows/hardware/windows-assessment-deployment-kit

[4] https://technet.microsoft.com/en-us/library/hh824929.aspx

[5] https://technet.microsoft.com/en-us/library/cc766400(v=ws.10).aspx

[6] https://technet.microsoft.com/en-us/library/cc749073(v=ws.10).aspx

Minha primeira palestra

08f4ad19-7b49-4b0c-b4de-14722d6337d3

No dia 26/11/2016 aconteceu o SQL Saturday 573 aqui em Brasília conforme já havia falado no post de divulgação do evento , mas o quê eu não tinha falado é que eu ia palestrar. De fato, até a data que lancei o post, eu não havia decidido bem se ia palestrar ou não, mas com muito incentivo dos meus colegas/amigos de trabalho e SQL decidi palestrar juntamente com o Gustavo (também colaborador do blog) .

Então aproveitando a oportunidade que me foi concedida de palestrar no Sat de Brasília (que já me sentiria a vontade por ser a minha cidade), juntando em ter meu parceiro de algum tempo de SQL Server (Gustavo) palestrando do meu lado e um tema que gosto muito (índices) tive a coragem e encaminhei minha palestra.

A palestra foi voltada para os alunos da faculdade e para todos os DBA’s iniciantes que querem entender melhor para que serve um índice. Como o próprio tema deixa bem claro, “Indexação para iniciantes” foi bem básica mesmo, expliquei para que servia um índice, suas vantagens, melhores práticas e desvantagens seguidos de exemplos. Apesar da palestra ser bem básica, tive a presença de colegas DBA’s, que já entendem bastante do assunto, assistindo a nossa palestra. Todo esse apoio me deixou mais segura e confiante para passar um pouco do meu conhecimento.

Sou muito grata por ter essa oportunidade de poder contribuir um pouco com a comunidade. Essa gratidão é grande, pois a comunidade SQL Server é muito forte, cada um apoia o outro, passam o conhecimento sem nenhum interesse e sem nenhuma cobrança e posso dizer que minha carreira de DBA teve muita ajuda dela, então poder devolver um pouco do conhecimento adquirido é uma felicidade enorme. Agradecimento mais que especial para o Gustavo parceiro do blog e por ter palestrado comigo , Edvaldo pelo evento incrível e pela oportunidade de palestrar nele e Renato por ter assistido minha palestra e pelo feedback.

Espero que essa seja a primeira palestra de muitas que estão por vir (realmente espero não parar por aqui), aperfeiçoando cada vez mais a forma de passar o conhecimento.

Enfim, o material estará disponível no site do sql sat em alguns dias.

Seguem algumas fotos do evento para que quem não foi, não perder o próximo!