Aconteceu no último dia 27/09/2014 em São Paulo o SQL Saturday #325, onde palestrei junto com a Sulamita Dantas(blog | twitter) sobre Protheus e SQL Server 2014, onde abordamos algumas características do banco de dados desse ERP.

Para quem desejar estou colocando os arquivos para download.

PPT e Script

Obrigado à todos os participante. O evento não seria nada sem vocês.

SQL Saturday #325

Publicado: 20 de setembro de 2014 em Eventos, SQL Server, Virtual PASS BR

No próximo sábado(27/09/2014) acontecerá em São Paulo o SQL Saturday #325.

Pela primeira vez estarei palestrando no SQL Saturday e em parceria com minha amiga Sulamita Dantas(Blog | Twitter) estaremos falando um pouco sobre Protheus e SQL Server 2014.

Protheus e SQL Server é um assunto que nós dois gostamos muito e então decidimos compartilhar um pouco do nosso conhecimento, passando dicas preciosas para o DBA que tem que administrar esse tipo de ambiente.

Não percam esse evento que tem tudo para ser o maior SQL Saturday realizado no Brasil.

Para maiores informações segue o link do evento:

http://sqlsaturday.com/325/eventhome.aspx

Esperamos vocês lá.

 

Olá pessoal,

Minha área não é e nunca foi PowerShell, mas aqui onde trabalho a equipe administra mais de 500 servidores e sabe-se lá quantas instâncias e estávamos com a necessidade de criar os usuários locais no Windows Server para todos os membros da equipe de DBA.

Com um pouco de pesquisa na internet e a ajuda do meu grande amigo Laerte Junior(blog) eu consegui montar um script que cria facilmente os usuários locais e adiciona no grupo de Administrador. Eu testei esse script nas versões Windows Server 2008/R2 e Windows Server 2012 e funcionou perfeitamente.

Segue o script:


param($username,$password)

$objOu = [ADSI]"WinNT://localhost"
$objUser = $objOU.Create("User", "$username")
$objUser.setpassword($password)
$objUser.SetInfo()
$objUser.PasswordExpired = 0
$objUser.SetInfo()
$objUser.UserFlags.value = $objUser.UserFlags.value -bor 0x10000
$objUser.SetInfo()

$group = [ADSI]"WinNT://localhost/Administrators,group"
$group.Add("WinNT://$username,user")

$Account = [ADSI]"WinNT://localhost/$username,user"
if($Account.Name)
{
 Write-Host "Usuário $username criado com sucesso..."
}

Se desejarem que o usuário troque a senha no primeiro logon basta substituir a linha:

$objUser.PasswordExpired = 0

Pela linha:

$objUser.PasswordExpired = 1

Para executar esse Script eu criei um batch para facilitar a criação de vários usuários.

Segue o batch:


powershell Set-ExecutionPolicy RemoteSigned

powershell createuser.ps1 NomeUsuario1 Senha1

powershell createuser.ps1 NomeUsuario2 Senha2

Lembrem-se de colocar o arquivo batch e o ps1 no mesmo diretório e executar o batch como administrador(Run as Administrator)

Espero que isso ajudem vocês.

Abraços do Japa…

Fala galera,

Uma forma rápida para descobrir desde quando o SQL Server está rodando é a seguinte:


SELECT sqlserver_start_time FROM sys.dm_os_sys_info

 

Abraços e até uma próxima

Olá pessoal, estive um pouco afastado do blog, mas estou de volta e com uma dica legal. Para quem ainda  não sabe é possível visualizar no SQL Server as sugestões de índices com uma série de informações, como por exemplo quando esse índice foi acessado pela última vez, quantidade de seeks que houve nesse índice que ainda não existe, ou até mesmo o impacto que ele terá caso seja criado. O SQL Server consegue armazena temporariamente esses dados até que a instância do SQL Server seja reiniciada e quem gera essas informações é o QO(Query Optimizer) ou Otimizador de Querys. Eu confesso que por várias vezes eu já executei a consulta abaixo para ver as sugestões, mas nunca criei um índice por não saber qual query o usaria esse índice. Segue a query de sugestões(Não me lembro onde achei):

SELECT migs.avg_user_impact
,migs.last_user_seek
,mid.[statement] AS [Database.Schema.Table]
,mid.equality_columns
,mid.inequality_columns
,mid.included_columns
,migs.unique_compiles
,migs.user_seeks
,migs.avg_total_user_cost
FROM sys.dm_db_missing_index_group_stats AS migs WITH (NOLOCK)
JOIN sys.dm_db_missing_index_groups AS mig WITH (NOLOCK) ON migs.group_handle = mig.index_group_handle
JOIN sys.dm_db_missing_index_details AS mid WITH (NOLOCK)ON mig.index_handle = mid.index_handle
WHERE mid.database_id = DB_ID()
ORDER BY avg_user_impact DESC

Para maiores informações sobre o Missing Index Details veja aqui: http://msdn.microsoft.com/en-us/library/ms345434.aspx Cansado de ver as sugestões dos índices e sem saber quais queries seriam afetadas eu dei mais uma pesquisada na internet e achei uma query que busca dentro do XML dos planos de execuções que estão armazenados buscando somente pelos planos com sugestão. Segue a query original que faz a busca nos cached plans:

WITH XMLNAMESPACES(DEFAULT N'http://schemas.microsoft.com/sqlserver/2004/07/showplan',N'http://schemas.microsoft.com/sqlserver/2004/07/showplan' AS ShowPlan)
SELECT ECP.[usecounts]
,ECP.[refcounts]
,ECP.[objtype]
,ECP.[cacheobjtype]
,EST.[dbid]
,EST.[objectid]
,EST.[text]
,EQP.[query_plan]
FROM sys.dm_exec_cached_plans AS ECP
CROSS APPLY sys.dm_exec_sql_text(ECP.[plan_handle]) AS EST
CROSS APPLY sys.dm_exec_query_plan(ECP.[plan_handle]) AS EQP
WHERE ECP.[usecounts] > 1 -- Plan should be used more then one time (= no AdHoc queries)
AND EQP.[query_plan].exist(N'/ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple/QueryPlan/MissingIndexes/MissingIndexGroup') <> 0
ORDER BY ECP.[usecounts] DESC

Para maiores informações sobre essa query vejam aqui: http://gallery.technet.microsoft.com/scriptcenter/Get-all-SQL-Statements-9af68abc Para facilitar eu adicionei o campo Impact que mostra o impacto positivo que esse índice terá sob a query e coloquei uma busca para por exemplo filtramos apenas os índices sugeridos que terão mais de 90% de impacto positivo com sua criação. Segue minha versão da query:

WITH XMLNAMESPACES(DEFAULT N'http://schemas.microsoft.com/sqlserver/2004/07/showplan',N'http://schemas.microsoft.com/sqlserver/2004/07/showplan' AS ShowPlan)
SELECT 
ECP.[usecounts]
,ECP.[refcounts]
,ECP.[objtype]
,ECP.[cacheobjtype]
,EST.[dbid]
,EST.[objectid]
,EST.[text]
,EQP.[query_plan]
,EQP.[query_plan].value(N'(/ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple/QueryPlan/MissingIndexes/MissingIndexGroup/@Impact)[1]','[decimal]') as Impact
FROM sys.dm_exec_cached_plans AS ECP
CROSS APPLY sys.dm_exec_sql_text(ECP.[plan_handle]) AS EST
CROSS APPLY sys.dm_exec_query_plan(ECP.[plan_handle]) AS EQP
WHERE ECP.[usecounts] > 1 -- Plan should be used more then one time (= no AdHoc queries)
AND EQP.[query_plan].exist(N'/ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple/QueryPlan/MissingIndexes/MissingIndexGroup') <> 0
AND EQP.[query_plan].value(N'(/ShowPlanXML/BatchSequence/Batch/Statements/StmtSimple/QueryPlan/MissingIndexes/MissingIndexGroup/@Impact)[1]','[decimal]') > 90
ORDER BY ECP.[usecounts] DESC

Uma observação importante: Nunca levem essas sugestões como regras, pois nem sempre elas são o melhor caminho para melhorar o desempenho de uma consulta. Eu indico que primeiramente entendam o que a consulta faz de fato, analisem o plano de execução e crie você mesmo os índices e após isso é legal comparar com o que o SQL Server sugere, ou caso queiram criar de cara o índice eu sugiro que criem e vejam se o índice está sendo usado corretamente. Espero que gostem e que isso possa ser útil  no dia a dia.

Fórum Técnico de SQL Sever

Publicado: 28 de março de 2014 em Eventos, SQL Server, Virtual PASS BR

Dia 25/04/2014 acontecerá o Fórum Técnico de SQL Server, onde teremos uma série de palestras e laboratórios sobre diversos assuntos de SQL Server. Essa é mais uma excelente oportunidade de estar perto assistindo e batendo um papo com os maiores nomes do SQL Server nacional e com o time de produto da Microsoft.

O evento acontecerá na sede da Microsoft em São Paulo que fica na Avenida das Nações Unidas, 12901, 31º andar, Torre Norte – São Paulo – SP. O evento ocorrerá das 08h30 às 18h00. Abaixo segue o link para inscrição e a grade de palestra e labs.

Link para inscrição:

https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032579876&Culture=pt-BR&community=0

Palestras:

forum_tecnico_grade

 

SQL Saturday #325

Publicado: 25 de março de 2014 em Eventos, SQL Server, Virtual PASS BR

Galera é com grande satisfação que anuncio mais um SQL Saturday no Brasil. A bola da vez agora é São Paulo.

Para quem não conhece ainda o SQL Saturday é um evento organizado pelo PASS normalmente em conjunto com algum PASS Chapter local. Esse evento ocorre em diversas partes do mundo todos os sábados e é um dia inteiro voltado a palestras sobre SQL Server. Essa é uma excelente oportunidade de estar perto dos melhores palestrantes do assunto e uma ótima ferramenta para fazer novos amigos e aumentar seu network.

Para quem não sabe São Paulo realizou o 1º evento no Brasil que foi o de nº 100, que foi quem abriu a porta para diversos outros que ocorreram em terras brasileiras. Dessa vez o evento ocorrerá dia 27/09/2014.

Para maiores informações o link do evento é http://sqlsaturday.com/325/eventhome.aspx e para se registrar é http://sqlsaturday.com/325/register.aspx

Não percam essa oportunidade.

Nos vemos lá.