Colocando um banco de dados em Read-Only – SQL Server

Olá pessoal.

Pode acontecer de seu seu superior lhe pedir para colocar um ou mais banco de dados em modo apenas leitura (Read-Only).
Hoje existe duas maneiras para fazer essa tarefa, vamos ver quais?

Primeira forma:

Comandos T-SQL, o exemplo abaixo é realizado com o banco de dados criado para esse post, veja:

BaseApenasLeituraCod1

No momento da alteração pode ocorrer uma mensagem de erro:

BaseApenasLeituraErro1

Caso isso aconteça, use o comando set single_user with rollback immediate

Ficando assim:

BaseApenasLeituraCod2.PNG

Após isso, execute novamente o comando para deixar o banco em modo de leitura.

Para retirar o único usuário que está com acesso a base de dados utilize o comando abaixo:

BaseApenasLeituraCod3

Com isso seu banco já está no modo apenas leitura (Read Only).

BaseApenasLeituraReadOnly

E aí você pergunta, mas se o superior pedir para voltar para o modo de leitura e escrita, como fazer?
Simples, repita os passos para deixar em usuário único e utilize o comando set read_write with no_wait;

Ficando assim:

BaseApenasLeituraCod4

Segunda forma:

Através de telas com alguns cliques, veja o passo a passo:

1º – Clique com o botão direito do mouse sobre o banco de dados e vá até propriedades:

BaseApenasLeituraPropertis

2º – Após abrir a tela de propriedades, clique em Opções e visualize a opção State, veja que está com o modo Read-Only igual a false:

BaseApenasLeituraOptions

3º – Altere de false para true, caso exista conexões em aberto, será exibido a mensagem abaixo:BaseApenasLeituraOpenConnections

4º – Clique em sim, para que ele encerre todas as conexões, assim será feito a alteração do modo de escrita para apenas leitura, ficando conforme imagem abaixo:

BaseApenasLeituraReadOnly

Pronto, seu banco de dados está agora em modo leitura.

Espero poder ajudar com essa dica.

Até mais.

Felippe Oliveira

Anúncios

Copiar nome de colunas SSMS

Olá pessoal.

Estou passando aqui para falarmos de um comando simples que pode nos ajudar no dia a dia, na (correria) hehe… Como copiar dados com cabeçalho do Sql Server Management Studio(SSMS) para um Excel por exemplo.
Claro que existem outras maneiras de copiar os dados para Excel, mas essa me chamou a atenção, pois eu era a pessoa que clicava com o botão direito do mouse conforme a imagem abaixo:

CopiarCabecalhoBTNDireito

Agora, experimente apertar as teclas Ctrl + Shift + C;
Pronto você pode colar no Excel e verá que o nome das colunas foram copiadas.

CopiarCabecalhoTeclasAtalho

Espero que gostem da dica.

Até mais.

Felippe Oliveira

 

2017 – Feliz com SQL Server

Olá pessoal!

Mais um ano se iniciando e com ele sonhos, planos e metas, deixo aqui um breve recado para todos… Que nesse ano possamos conseguir aprender mais, trabalhar mais, ir em todos os eventos de SQL, viajar, e entre outras coisas sorrir mais, para que assim façamos de 2017, o ano de muitos alegrias e conquistas.

Um grande abraço e até o próximo post.

Felippe Oliveira

 

 

 

Merge com T-SQL

Tags

,

Olá pessoal!

Hoje vamos ver o que se pode fazer com o comando Merge, utilizado no MS SQL SERVER, ele ajuda a mesclar dados entre duas fontes (origem, destino).
É possível atualizar, deletar e inserir dados, abaixo um exemplo prático.

USE TEMPDB
GO

–Criação da tabela temporária para teste;
CREATE TABLE #TMPA (Id INT Identity not null, Nome VARCHAR(100))

–Inserindo os dados de teste na tabela de destino
INSERT #TMPA VALUES (‘Felippe’), (‘Lucas’)

SELECT * FROM #TMPA
merge_1

–Tabela de origem
CREATE TABLE #TMPB (Nome VARCHAR(100))

INSERT #TMPB VALUES (‘Pedro’), (‘Valéria’), (‘Daniela’), (‘Nicolly’)

SELECT * FROM #TMPB
merge_2

–Realizando Merge com INSERT e UPDATE para dados já existentes;

MERGE #TMPA AS ta
USING (SELECT nome FROM #TMPB) AS tb
ON (ta.nome = tb.nome)
WHEN NOT MATCHED THEN
INSERT (nome)
VALUES (tb.Nome)
WHEN MATCHED THEN
UPDATE SET ta.nome = tb.nome;

Após realizar o merge, veja como ficou:

SELECT * FROM #TMPA
merge_3

Bom, isso foi um exemplo básico, apenas para saber como aplicar o Merge no seu desenvolvimento, para saber sobre outros comandos possíveis com merge consulte MERGE (Transact-SQL).

Até mais.

Felippe Oliveira

 

24 Hours of Pass

eventopass24hope_2016

Olá Pessoal,

Entre os dias 14 e 18 deste mês teremos o evento 24 Hours of Pass, evento online e gratuito, que conta com palestrantes do Brasil e Portugal.

Clique no link http://www.sqlpass.org/24hours/2016/portuguese/About.aspx, para ver todas ás palestras e horários e também se cadastrar, não perca essa chande de aprender e aprimorar seus conhecimentos de graça.

Abraços,

Felippe Oliveira

Evento SQL Saturday #573 – Brasília – DF

eventopasssaturdaybsb_2016

Olá pessoal!

Dia 26 deste mês, teremos mais um SQL Saturday, evento que será realizado em Brasília – DF, não percam a chance de aprender de graça sobre Big Data, Azure, Reporting Services, dicas de carreira, certificação, entre outros.

Clique no link http://www.sqlsaturday.com/573/eventhome.aspx, para ver todas as palestras e horários, e também se cadastrar, não perca essa chande de aprender e aprimorar seus conhecimentos de graça.

Abraços,

Felippe Oliveira

 

 

Transações no MS SQL Server

Tags

,

Olá pessoal!

Hoje o assunto é sobre transações no Microsoft SQL Server, onde você saberá para que serve e quando utilizar.

Toda transação de UPDATE, DELETE e até de INSERT você pode garantir que o dado volte ao ponto anterior antes de ser alterado, excluído ou que também não seja inserido, utilizando no inicio de sua query(Script) o comando BEGIN TRANSACTION ou apenas BEGIN TRAN.

Esse comando tem a utilidade de preparar o SQL Server para um ponto de restauração do dado(s), caso seja necessário.

Se for necessário retornar o dado no estado anterior, pode utilizar o comando ROLLBACK TRANSACTION ou apenas ROLLBACK. Mas, caso você precisa garantir que o dado inserido, atualizado ou deletado seja confirmado, basta utilizar o comando COMMIT TRANSACTION ou apenas COMMIT.

Abaixo um exemplo com os três comandos, veja:

BEGIN TRANSACTION

UPDATE Cliente SET DataAtualizacao = getdate() WHERE IdCliente = 1

IF@@ERROR <> 0

ROLLBACK TRANSACTION

ELSE

COMMIT TRANSACTION

Lembre-se, esses três comandos, podem evitar uma baita dor de cabeça em caso de acidente. Veja exemplo abaixo:

Você preparou sua linha de comando que fará uma atualização em 100 mil linhas, mas aí você esquece de colocar o comando WHERE (Essencial colocar), com isso você todo empolgado na pressa para terminar a tarefa e sair sorrindo, executa o comando, e logo percebe que em vez de atualizar a quantidade de 100, atualizou 700 mil linhas, o que fazer nessa hora? Se você tiver um backup da tabela antes de realizar as alterações devidas, muito bem, o trabalho de recuperação será mais rápido, senão, você terá que trabalhar mais para voltar os 700 mil registros ao estado anterior, isso por acidente, pense nisso em um ambiente que não se deve perder tempo com RETRABALHO?

Bom fica a dica sobre transações, vou preparar outro post para falar de SET IMPLICIT_TRANSACTION ON/OFF e SAVE TRANSACTION.

Espero ter ajudado.

Até mais…

Felippe Oliveira

Funções de classificação

Olá pessoal!

Hoje o assunto é sobre funções de classificação, em jornada rumo a prova 70-461, aprendi que podemos classificar grupos de dados.
Essas funções nos auxiliam em criação de ranking, ou seja ordenação dos conjuntos de dados.
São elas:
RANK();
DENSE_RANK();
NTILE();
ROW_NUMBER();

Funções que podem ser utilizadas em diferentes situações, abaixo um exemplo simples de cada, para um melhor entendimento.
Para os exemplos a seguir, foram criados tabelas alunos, disciplina e notas.

RANK(): Classifica o conjunto de dados mantendo um GAP na ordenação.
O exemplo abaixo faz com que a classificação seja agrupado pela quebra e assim mantendo o contador do numero da linha.

SELECT DISTINCT RANK()OVER(ORDER BY d.nome) as Ordem, d.nome as Disciplina
FROM Aluno a
INNER JOIN AlunoDisciplina ad ON a.pkidaluno = ad.fkidaluno
INNER JOIN Disciplina d ON ad.fkIdDisciplina = d.pkIdDisciplina
ORDER BY d.nome

Ordem Disciplina
1 Biologia
11 Geografia
21 História
31 Matetmática
41 Português

DENSE_RANK(): Mantém a classificação em ordem no agrupamento;

SELECT DISTINCT DENSE_RANK()OVER(ORDER BY d.nome) as Ordem, d.nome as Disciplina
FROM Aluno a
INNER JOIN AlunoDisciplina ad  ON a.pkidaluno = ad.fkidaluno
INNER JOIN Disciplina d ON ad.fkIdDisciplina = d.pkIdDisciplina
ORDER BY d.nome

Ordem Disciplina
1 Biologia
2 Geografia
3 História
4 Matetmática
5 Português

NTILE(): Agrupa pela quantidade de grupos que você informar.

SELECT DISTINCT NTILE(2)OVER(ORDER BY d.nome) as Ordem, d.nome as Disciplina
FROM Disciplina d
ORDER BY d.Nome

Ordem Disciplina
1 Biologia
1 Geografia
1 História
2 Matetmática
2 Português

ROW_NUMBER(): Ordena sem ter gap entre os grupos.
SELECT DISTINCT ROW_NUMBER()OVER(ORDER BY d.nome) as Ordem, d.nome as Disciplina
FROM Disciplina d
ORDER BY d.Nome

Ordem Disciplina
1 Biologia
2 Geografia
3 História
4 Matetmática
5 Português

Com as funções de classificação é possível ordenar os grupos e ajustar a sua consulta de acordo com o solicitado.

Ainda é possível utilizar o comando PARTITION BY, mas a explicação de como utiliza-lo ficará para um próximo post.

Espero ter ajudado.

Até mais…

Felippe Oliveira

70-461 Passei…

Olá!

Recentemente realizei a prova 70-461 de Querying Microsoft SQL Server 2012/2014 e passei, para conseguir a façanha não foi assim tão fácil, foi necessário aprender algumas das novas funcionalidades e saber utilizar o que já existia desde outras versões do MS SQL Server, como por exemplo, funções de classificação,  function,  CTE (common_table_expression), entre outros.
Vou continuar a postar sobre essas funcionalidades que nos ajudam diariamente.
Para aqueles que ainda não realizaram a prova, fica algumas dicas de estudo abaixo:

  • Entenda como funciona e quando utilizar Triggers;
  • Views, como criar, entenda suas vantagens;
  • Function ou Funções, experimente os tipos de retorno;
  • Planos de execução e Otimização de consultas;
  • XML;
  • Sequence X Identity;

Agora bora estudar para 70-463 Implementing a Data Warehouse with Microsoft SQL Server 2012/2014, mas como informei, vou preencher esse blog com dicas e informações sobre desenvolvimento de querys entre outros assuntos;

Espero poder ajudar mais.

Até o próximo post e bons estudos.

Felippe Oliveira