material SQLSATURDAY NYC e MONTREAL

Hello SQL SERVER Geeks!

Last month we had 3 session in two SQLSATURDAYs. The powerpoints and scripts are in this post.

Olá SQL SERVER Geeks!

No último mês tivemos 3 sessões em dois SQLSATURDAYs. Os powerpoints s scripts estão logo abaixo.

Enjoy!

SQLSATURDAY_MONTREAL_AZUREDATASYNC

SQLSATURDAY_NYC_LINUX_FORTHESQLDBA

SQLSATURDAY_NYC_OracleXSQLSERVER

 

 

Webcast – Docker Windows com SQL SERVER – 08/02/2018

Fala pessoal!

No dia 08 de Fevereiro de 2018 (quinta-feira) teremos um Webcast, iniciando as 20:00 BRT. Anderson Souza apresentará como utilizar SQL SERVER no Docker Windows.

Inscreva-se já em: https://www.sympla.com.br/webcast-sqlmaniacs—docker-windows-com-sql-server-2017__235388

Aguardamos vocês lá!

Instalando um Domain Controller em Windows Server 2016 Core

Fala pessoal, boa tarde.

Antes de qualquer coisa, agradeço ao Vitor Fava pela ideia e inspiração para esse vídeo!

Neste video mostro pra vocês o passo a passo para instalar um Windows Server 2016 Core – Sem interface Gráfica – e configurar nele um Controlador de Domínio (DC ou AD Server).

Para isso utilizei o  Windows Server 2016 Evaluation Edition (Expira em 180 dias) sobre o VMWARE Workstation.

Aqui estão as referências que usei:

https://blogs.technet.microsoft.com/chadcox/2016/10/25/chads-quick-notes-installing-a-domain-controller-with-server-2016-core/

https://technet.microsoft.com/en-us/library/hh831453(v=ws.11).aspx

https://www.microsoft.com/en-us/download/details.aspx?id=45520

E os passos que executei via Powershell:

[powershell]
#Renomeie o servidor:

Rename-computer -newname 2016-DC01

#Altere o endereço IP, coloque de acordo com o seu ambiente:

$ipaddress = "10.0.0.2"
$dnsaddress = "127.0.0.1"
New-NetIPAddress -InterfaceAlias Ethernet -IPAddress $ipaddress -AddressFamily IPv4 -PrefixLength 24
Set-DnsClientServerAddress -InterfaceAlias Ethernet1 -ServerAddresses $dnsaddress

#Reinicie o Servidor:
Restart-Computer

#Verifique o timezone e se necessário troque-o:
get-timezone
Set-TimeZone -Id "UTC-02"

#Instale a Feature de AD:
Install-WindowsFeature AD-Domain-Services -IncludeManagementTools

#Crie uma nova floresta de AD e promova o Servidor atual a DC:
Install-ADDSForest -DomainName ONOMEDOSEUADAQUI.ad
#No seu host físico, comando para adicionar o DC virtual à lista de Servidores Confiáveis:
Set-Item wsman:\localhost\Client\TrustedHosts SEUADAQUI -Concatenate -Force

#No seu servidor virtual para verificar o uso de memória:
Get-WmiObject win32_OperatingSystem |%{"Total Physical Memory: {0}KB`nFree Physical Memory : {1}KB`nTotal Virtual Memory : {2}KB`nFree Virtual Memory : {3}KB" -f $_.totalvisiblememorysize, $_.freephysicalmemory, $_.totalvirtualmemorysize, $_.freevirtualmemory}

[/powershell]

 

Deixem as dúvidas ae caso precisem de um help!

Abs!

Marcelo

 

 

 

Window Functions parte 1

Fala pessoal!

neste vídeo mostro bem rapidamente como utilizar as Window Function com as funções de classificação do T-SQL. Vamos aprofundar um pouco no módulo seguinte!

Aqui está o código (retirei do Simple Talk e da apresentação do Fabiano no SQLSAT 100, as fontes estão logo em cima!)

[code language=”sql”]
–cria a base de dados
/*fonte: https://www.simple-talk.com/sql/t-sql-programming/sql-server-2012-window-function-basics/
outras fontes: http://blogfabiano.com/?s=sql+saturday+100 */
USE TSQL2012;
GO

IF OBJECT_ID(‘RegionalSales’, ‘U’) IS NOT NULL
DROP TABLE RegionalSales;
GO

CREATE TABLE RegionalSales
(
SalesID INT NOT NULL IDENTITY PRIMARY KEY,
SalesGroup NVARCHAR(30) NOT NULL,
Country NVARCHAR(30) NOT NULL,
AnnualSales INT NOT NULL
);
GO

INSERT INTO RegionalSales
(SalesGroup, Country, AnnualSales)
VALUES
(‘North America’, ‘United States’, 22000),
(‘North America’, ‘Canada’, 32000),
(‘North America’, ‘Mexico’, 28000),
(‘Europe’, ‘France’, 19000),
(‘Europe’, ‘Germany’, 22000),
(‘Europe’, ‘Italy’, 18000),
(‘Europe’, ‘Greece’, 16000),
(‘Europe’, ‘Spain’, 16000),
(‘Europe’, ‘United Kingdom’, 32000),
(‘Pacific’, ‘Australia’, 18000),
(‘Pacific’, ‘China’, 28000),
(‘Pacific’, ‘Singapore’, 21000),
(‘Pacific’, ‘New Zealand’, 18000),
(‘Pacific’, ‘Thailand’, 17000),
(‘Pacific’, ‘Malaysia’, 19000),
(‘Pacific’, ‘Japan’, 22000);
GO
———————————————————————————————————————————–
–sintaxe b�sica:

<window function> OVER
(
[ PARTITION BY <expression> [, … n] ] –define a janela
[ ORDER BY <expression> [ASC|DESC] [, … n] ] –define a ordem dos dados dentro da janela
[ ROWS|RANGE <window frame> ] –frame, ou moldura, define em quais linhas a fun��o � calculada
)
go

—————————————————————————————————————
–fun��es de RANKING:
–ranking functions:
–a janela � a tabela toda:
–ORDER BY OBRIGAT�RIO:
SELECT
SalesGroup,
Country,
AnnualSales,
ROW_NUMBER() OVER(ORDER BY AnnualSales DESC) AS RowNumber,
RANK() OVER(ORDER BY AnnualSales DESC) AS BasicRank,
DENSE_RANK() OVER(ORDER BY AnnualSales DESC) AS DenseRank,
NTILE(3) OVER(ORDER BY AnnualSales DESC) AS NTileRank
FROM
RegionalSales;
go
————————————————————–
–ordena��o diferente
SELECT
SalesGroup,
Country,
AnnualSales,
ROW_NUMBER() OVER(ORDER BY AnnualSales DESC) AS RowNumber,
RANK() OVER(ORDER BY AnnualSales DESC) AS BasicRank,
DENSE_RANK() OVER(ORDER BY AnnualSales DESC) AS DenseRank,
NTILE(3) OVER(ORDER BY AnnualSales DESC) AS NTileRank
FROM
RegionalSales
ORDER BY
SalesGroup, Country;

————————————————————-
–defini��o de janela: SALESGROUP
SELECT
SalesGroup,
Country,
AnnualSales,
ROW_NUMBER() OVER(PARTITION BY SalesGroup
ORDER BY AnnualSales DESC) AS RowNumber,
RANK() OVER(PARTITION BY SalesGroup
ORDER BY AnnualSales DESC) AS BasicRank,
DENSE_RANK() OVER(PARTITION BY SalesGroup
ORDER BY AnnualSales DESC) AS DenseRank,
NTILE(3) OVER(PARTITION BY SalesGroup
ORDER BY AnnualSales DESC) AS NTileRank
FROM
RegionalSales;
————————————————————
–utilizando fun��es de agrupamento em janelas:
–grouping functions:

SELECT
SalesGroup,
Country,
AnnualSales,
COUNT(AnnualSales) OVER(PARTITION BY SalesGroup) AS CountryCount,–janela � SALESGROUP, contar quantos existem
SUM(AnnualSales) OVER(PARTITION BY SalesGroup) AS TotalSales, –soma total de vendas por SALESGROUP
AVG(AnnualSales) OVER(PARTITION BY SalesGroup) AS AverageSales –m�dia por SALESGROUP
FROM
RegionalSales
ORDER BY
SalesGroup, AnnualSales DESC;

—————————————–
–igual, menos colunas
SELECT DISTINCT
SalesGroup,
COUNT(AnnualSales) OVER(PARTITION BY SalesGroup) AS CountryCount,
SUM(AnnualSales) OVER(PARTITION BY SalesGroup) AS TotalSales,
AVG(AnnualSales) OVER(PARTITION BY SalesGroup) AS AverageSales
FROM
RegionalSales
ORDER BY
TotalSales DESC;
——————————————–
–AGRUPANDO E ORDENANDO
–grouping with ordering: each grouping column is different!
–duplicate are aggregated together
/*
The default setting for the ROWS/RANGE subclause is RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW.
This means that, for each row in the partition, the window function is applied to the current row and the preceding rows only.
So aggregations don�t operate on the entire set of values within the partition, but only on the value in the current row and the previous rows,
as we saw in the example below.
*/

–contagem a partir de dentro da janela, ordenando do maior valor de venda at� o menor, agregando da primeira linha at� a atual.
SELECT
SalesGroup,
Country,
AnnualSales,
COUNT(AnnualSales) OVER(PARTITION BY SalesGroup
ORDER BY AnnualSales DESC) AS CountryCount,
SUM(AnnualSales) OVER(PARTITION BY SalesGroup
ORDER BY AnnualSales DESC) AS TotalSales,
AVG(AnnualSales) OVER(PARTITION BY SalesGroup
ORDER BY AnnualSales DESC) AS AverageSales
FROM
RegionalSales ;
————————————————————————————————
–PALAVRAS-CHAVE: PRECEDING -> anteriores, FOLLOWING -> seguintes
–CURRENT ROW -> linha atual
–UNBOUNDED -> sem limite, a partir da primeira ou at� a �ltima

–IGUAL com a defini��o de frame padr�o:
–RANGE considera valores iguais como o mesmo, GREECE e SPAIN, agregando apenas um deles:

SELECT
SalesGroup,
Country,
AnnualSales,
COUNT(AnnualSales) OVER(PARTITION BY SalesGroup
ORDER BY AnnualSales DESC
  range between unbounded preceding and current row) AS CountryCount,
SUM(AnnualSales) OVER(PARTITION BY SalesGroup
ORDER BY AnnualSales DESC
  range between unbounded preceding and current row) AS TotalSales,
AVG(AnnualSales) OVER(PARTITION BY SalesGroup
ORDER BY AnnualSales DESC
  range between unbounded preceding and current row) AS AverageSales
FROM
RegionalSales ;
—————————————————————————
–ROWS considera cada linha como um valor a ser agregado, normalmente � o mais utilizado
SELECT
SalesGroup,
Country,
AnnualSales,
COUNT(AnnualSales) OVER(PARTITION BY SalesGroup
ORDER BY AnnualSales DESC
  rows between unbounded preceding and current row) AS CountryCount,
SUM(AnnualSales) OVER(PARTITION BY SalesGroup
ORDER BY AnnualSales DESC
  rows between unbounded preceding and current row) AS TotalSales,
AVG(AnnualSales) OVER(PARTITION BY SalesGroup
ORDER BY AnnualSales DESC
  rows between unbounded preceding and current row) AS AverageSales
FROM
RegionalSales ;
————————————————————————————-
–fa�a a agrega��o apenas com as 2 linhas anteriores:
–only the 2 preceding rows and current
SELECT
SalesGroup,
Country,
AnnualSales,
COUNT(AnnualSales) OVER(PARTITION BY SalesGroup
ORDER BY AnnualSales DESC
ROWS 2 PRECEDING) AS CountryCount,
SUM(AnnualSales) OVER(PARTITION BY SalesGroup
ORDER BY AnnualSales DESC
ROWS 2 PRECEDING) AS TotalSales,
AVG(AnnualSales) OVER(PARTITION BY SalesGroup
ORDER BY AnnualSales DESC
ROWS 2 PRECEDING) AS AverageSales
FROM
RegionalSales;
——————————————
–fa�a a agrga��o considerando a janela toda:
SELECT
SalesGroup,
Country,
AnnualSales,
COUNT(AnnualSales) OVER(PARTITION BY SalesGroup
ORDER BY AnnualSales DESC
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS CountryCount,
SUM(AnnualSales) OVER(PARTITION BY SalesGroup
ORDER BY AnnualSales DESC
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS TotalSales,
AVG(AnnualSales) OVER(PARTITION BY SalesGroup
ORDER BY AnnualSales DESC
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS AverageSales
FROM
RegionalSales;

——————————————
–FUN��ES ANAL�ICAS:
–First/Last values – analytic functions
–veja horizontalmente
SELECT
SalesGroup,
Country,
AnnualSales,
FIRST_VALUE(AnnualSales) OVER(PARTITION BY SalesGroup
ORDER BY AnnualSales DESC) AS HighestSales, — ordene o valor do maior pro menor, ous seja, o primeiro � o maior, o �ltimo � o menor
LAST_VALUE(AnnualSales) OVER(PARTITION BY SalesGroup
ORDER BY AnnualSales DESC) AS LowestSales
FROM
RegionalSales;

——————————
–todas as linhas da parti��o!
SELECT
SalesGroup,
Country,
AnnualSales,
FIRST_VALUE(AnnualSales) OVER(PARTITION BY SalesGroup
ORDER BY AnnualSales DESC) AS HighestSales,
LAST_VALUE(AnnualSales) OVER(PARTITION BY SalesGroup
ORDER BY AnnualSales DESC
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
AS LowestSales
FROM
RegionalSales;
—————————-

–LAG: valor de n linhas antes da atual
–LEAD: valor de n linhas depois da atual
SELECT
SalesGroup,
Country,
AnnualSales,
LAG(AnnualSales, 1) OVER(PARTITION BY SalesGroup
ORDER BY AnnualSales DESC) AS PreviousSale,
LEAD(AnnualSales, 1) OVER(PARTITION BY SalesGroup
ORDER BY AnnualSales DESC) AS NextSale
FROM
RegionalSales;
—————————-
–tratando nulls:
SELECT
SalesGroup,
Country,
AnnualSales,
LAG(AnnualSales, 1,0) OVER(PARTITION BY SalesGroup
ORDER BY AnnualSales DESC) AS PreviousSale,
LEAD(AnnualSales, 1,0) OVER(PARTITION BY SalesGroup
ORDER BY AnnualSales DESC) AS NextSale
FROM
RegionalSales;

[/code]

Abraços e Happy SQL Serving!

SQL SATURDAY 609 – Caxias do Sul

É isso ae galera!

No dia 24 de Junho tivemos mais um SQL SATURDAY em terras brazucas. Desta vez foi em Caxias do Sul.
O pessoal da organização está de parabéns! O evento foi muito bem organizado, cheio de palestras sensacionais e é claro, ótimos coffees!

O pessoal que participou também está de parabéns! O evento não ficou vazio depois do almoço. Conseguimos perceber que o pessoal está bastante interessado e está comprometido. Isso é muito gratificante para todos!

Neste SQLSAT conversei sobre Opções de Alta Disponibilidade entre SQL SERVER e ORACLE. Os slides da minha palestra podem ser encontrados aqui.

 

Nos encontramos por aí.

Happy SQL Serving!

Hangout Codificando: Edição #48 – DBA vs. ITIL

Fala galera,

Segue link do hangout fiz pelo site codificando – se você não conhece, acesse JÁ: http://codificando.net/.

Falei a respeito dos processos de T.I. na nossa vida de DBA: http://live.codificando.net/2015/05/edicao-48-dba-vs-itil-como-os-processos-podem-ajudar-e-atrapalhar-a-vida-do-dba/

A apresentação está neste link: sql-itil

O hangout:

Espero que gostem e aguardo feedbacks!

Abraços a todos!

 

 

 

SQLSATURDAY 361 – Joinville

Fala galera, bom sábado pra todos!

Está disponibilizado no site do SQLSAT o powerpoint usado na apresentação de comparação entre SQL SERVER e ORACLE.

http://www.sqlsaturday.com/361/sessions/details.aspx?sid=19446

Ou simplesmente baixe em FINAL_SQL SERVER para DBAs Oracle – Quick Glance

Abraços a todos e aguardamos vocês no próximo evento!

Marcelo

O DBA e Processos de T.I. – uma relação de amor e ódio

Fala pessoal, boa noite.

Subi mais um video no canal do youtube. Este é um video não tecnico que trata dos problemas que podem ocorrer quando não seguimos processos (biblioteca ITIL, por exemplo) e deixamos a proatividade (para não falar outra coisa) falar mais alto do que a vontade de… escrever… documentar…

Sim, ITIL pode ser chato, mas pode salvar um emprego!

Com certeza este video terá mais do que uma parte e haverão palestras a respeito do tema.

Espero que gostem…

Até a próxima!

 

Failover Cluster Virtual – SQL SERVER 2008 R2

Fala pessoal, tudo bem?

Neste post vou apresentar uma série de videos que criei para ajudar vocês a criar do zero um cluster virtualizado.

O que utilizei:

  • Freenas 9.2;
  • VMware Workstation (9 ou 10);
  • Iso do Windows server 2008 R2 (sem piratear heim! ;-));
  • Iso do SQL SERVER 2008 R2 (mesma dica de cima!);

Estou testando o cluster em uma máquina física de 16 Gb de RAM e estou utilizando em torno de 150 Gb de espaço em disco. No caso estou usando um processador i7.

 

Espero que gostem e seja útil.

Parte 1 – Criação do storage:

Parte 2 – Criando o AD:

Parte 3.1: Instalando o Sistema Operacional dos servidores do cluster e gerando templates.

ps: Sim, eu dividi a parte 3 em duas, caso contrário os videos ficariam muito extensos.

Parte 3.2: Configurando o cluster no Windows:

Parte 4, final – instalando o SQL SERVER no Cluster:

É isso pessoal, espero que gostem e seja útil de alguma forma. Pelo menos para brincar!

Abraços!

Marcelo