Restaurando um banco apenas com o .mdf

Surgiu uma solicitação para eu restaurar um banco. Até aí, tudo ok, é um processo normal. RESTORE DATABASE Blábláblá, permissões dadas e assunto encerrado. Ao ver o arquivo, havia apenas um .mdf. Ou seja, não é mais um restore, é um ATTACH. Seria outro processo normal também… Se existissem os arquivos de log (.ldf). Ao tentar restaurar, o seguinte erro surgiu: File activation failure. The physical file name “C:\Caminho\Original\do\banco\arquivo_log.LDF” may be incorrect. The log cannot be rebuilt because there were open transactions/users when the database was shutdown, no checkpoint occurred to the database, or the database was read-only. This error could occur if the transaction log file was manually deleted or lost due to a hardware or environment failure. Mas vamos lá, passo a passo, para vermos os problemas que podem aparecer e como resolver. ...

24 mai. 2016 · 3 minutos · 587 palavras · Logan D. Merazzi

Acessando um banco MySQL pelo SQL Server via Linked Server

Surgiu uma demanda onde era necessário migrar algumas tabelas de alguns bancos em MySQL para dentro do SQL Server e tínhamos disponível apenas o backup (a.k.a. dump) dos bancos de origem. Realizar o tratamento do arquivo (manualmente) para que fosse possível criar os bancos e inserir os dados estava fora de cogitação. Como temos uma VM com o Linux (Ubuntu) e com o MySQL instalado, optei por realizar a criação de um Linked Server entre os dois servidores. ...

16 nov. 2015 · 3 minutos · 510 palavras · Logan D. Merazzi

Tratamento de Exceções. Parte 2

Essa é a parte 2 de uma série de 3 posts (ou 4, quem sabe), onde eu quero falar sobre as formas de realizar o tratamento de exceções no SQL Server. Se você caiu aqui por acaso, sugiro antes dar uma olhada na parte 1 da série, onde eu trato de alguns detalhes no que diz respeito à forma que o SQL Server realiza o encerramento de processos, nos casos de erro. Hoje irei falar sobre como realizar o tratamento de exceções, via TRY / CATCH. ...

10 nov. 2015 · 4 minutos · 798 palavras · Logan D. Merazzi

Introdução ao tratamento de Exceções

O seu código vai dar erro. Isso é um fato. Mesmo que seja a pessoa mais cuidadosa do mundo, você tem que preparar o seu código para o pior: O bug! Até porque no momento que os erros aparecerem, você vai precisar verificar o que está ocorrendo e ajustar da forma mais rápida possível. E tem outra: Ninguém gosta de rodar uma aplicação e dar de cara com uma tela exibindo o stack do erro. E para isso, você deve tratar as exceções que o teu código pode gerar. Mas antes de entrar no assunto de tratamento de erros, primeiramente, gostaria de alinhar algumas ideias… Esse será o primeiro de uma série de 2 ou 3 posts, veremos como ficará o próximo, pois este já ficou consideravelmente grande. ...

03 nov. 2015 · 5 minutos · 915 palavras · Logan D. Merazzi

Alterando o schema de objetos em lote

Não vou entrar aqui no mérito do que são os schemas e como especificamos (deixemos isso para um outro momento). Quero apenas deixar o seguinte cenário: Um usuário criou uma série de scripts e, ao aplicá-lo no banco, todos os objetos ficaram com o nome do usuário no schema: usuário.procedure, usuario.function, usuario.table Como ajustar isso, sem que seja necessário abrir cada objeto individualmente e colocar no schema correto (vamos usar o schema dbo aqui, para simplificar as coisas)? ...

28 out. 2015 · 2 minutos · 282 palavras · Logan D. Merazzi

Renomeando um Profile ou Account Name (Database Mail)

Muito provavelmente, para utilizar o Database Mail dentro do SQL Server você utilizou a interface gráfica… Criou o profile, a conta, ativou como público (né, fala a verdade…) e manteve as opções padrão. Os e-mails estão sendo enviados normalmente, até que surge a necessidade de criar um outro profile. Como o nome ficou parecido, você resolve ir nas configurações do database mail e mudar o nome do profile anterior: Botão direito em Database Mail -> Configure Database Mail -> View, Change, or delete an existing Profile, seleciona o profile desejado e… fuéfuéfué… Como altera o nome? ...

01 out. 2015 · 2 minutos · 219 palavras · Logan D. Merazzi

“Login failed for user ‘NT Authority\ANONYMOUS LOGON’ ” ao criar um Linked Server

Ao criar um Linked Server entre dois servidores com SQL Server 2008, via Windows Authentication, me deparei com o erro abaixo: Dando uma Googleada investigada, li que poderia ser por causa da delegação via Kerberos não estar funcionando. O nome do “cara”: Kerberos constrained delegation. ...

31 jul. 2015 · 2 minutos · 239 palavras · Logan D. Merazzi

Usando o Some | Any | All

Olhando os operadores lógicos do SQL Server (link), me deparei com algo curioso, que até então não tinha visto: os operadores Some, Any e All que, vejam só, está disponível desde do SQL Server 2008. #facepalm O objetivo deles: Comparar um valor escalar (lembrem-se disso) com os valores de um dataset (a.k.a. subquery). O ALL validará se TODOS os valores do dataset correspondem ao valor comparado. O SOME e o ANY são equivalentes, eles retornaram TRUE se algum dos valores do dataset corresponder à comparação. Se você ouviu um IN na explicação, pense nele como um IN com esteroides para um valor escalar, uma vez que você pode validar com os operadores =, <, >, <>, etc. ...

10 jul. 2015 · 2 minutos · 388 palavras · Logan D. Merazzi

Escapando caracteres usando o ESCAPE

Pessoal, aproveitando para tirar um pouco a poeira, uma dica rápida que surgiu no trabalho hoje… Como sabemos (sabemos, né?), temos alguns caracteres que são chamados de coringas, para facilitar a busca por um padrão. Não vou explicar aqui o que cada um faz, mas eles são: %, _ , [], [^] O problema: Quero pesquisar na minha tabela por todas as linhas que comecem com [OK]. Porém, se eu fizer um simples WHERE Coluna like ‘[OK]%’ (um exemplo esdrúxulo, mas que mantém o fluxo do raciocínio), a consulta vai me retornar todas as linhas que comecem com O ou com K e o que houver mais nesse registro, o que não é bem o que queremos. ...

07 jul. 2015 · 1 minuto · 202 palavras · Logan D. Merazzi

Dicionário de Dados – A Exclusão.

Um dos meus papéis dentro da empresa onde trabalho é o de ser chato e verificar os scripts que são enviados antes de entrar em produção. Uma parte das verificações é garantir que o dicionário de dados esteja o mais atualizado possível para que consigamos entender o objetivos das tabelas, colunas, constraints, etc. Para inserir uma propriedade em um objeto, deve ser utilizada a procedure sp_addextendedproperty. Para remover: sp_dropextendedproperty. E para atualizar: sp_updateextendedproperty. Não vou entrar no mérito de como usar, pois o BOL (Books On Line – RTFM!) explica bem como usar e os parâmetros necessários. ...

19 mar. 2015 · 4 minutos · 843 palavras · Logan D. Merazzi