[AlwaysOn]Porta do endpoint em uso

Fala Galera,
Dica rápida da madruga

Problema

Estava configurando um AlwaysOn Availability Groups em um servidor e, durante a fase de instalação do wizard a seguinte mensagem era apresentada:Capturar.PNG

Solução
Achei um pouco estranho e fui buscar quem estava usando, via powershell, a porta


Get-NetTCPConnection| where LocalPort -eq "5022"| Format-Table -AutoSize

capturar

O IP que ele estava listado era do VIP do Cluster FailOver que também roda nessa máquina; Claro, em uma instância separada.

Bom, no meu caso, por algum motivo habilitaram a opção de alta disponibilidade nas instâncias do cluster.
Eu poderia apenas mudar a porta e daria tudo certo; mas, como não havia a necessidade da instância do cluster fazer uso desse endpoint, foi melhor excluí-lo. (Até por questão de burocracia para pedir liberação de portas no firewall)

capturar

Feito isso, tudo seguiu como esperado …

capturar

Por hora é isso.

Piroto

Startup parameters SQL Server

Sem título.png

Fala Galera,

O SQL Server tem uma série de parâmetros de inicialização que alteram o comportamento default de como uma dada instância vai subir.
Temos por costume recorrer a este artifício quando atuamos em um troubleshooting ou para atender a requisitos específicos do sistema.

Podemos descobrir quais os parâmetros de statup estão sendo executado em nossa instância de duas manerias:

  1. SQL Server configuration Managerstatup parameters* O modo de exibição dos parâmetros foi alterada do SQL 2012 pra frente.
  2.  DMVs

SELECT value_name,       value_data,       registry_key

FROM  sys.dm_server_registry

where value_name like 'SQLArg%'

Por padrão todas as instâncias do SQL Server sobem com três parâmetros default:

-d : Local do MDF do master
-l : Local do LDF do master
-e : Local do Error Log

 

 

Uma listagem dos parâmetros mais comuns de serem usados (pelo menos pra mim)

-m: Modo Single User (normalmente usado para restaurar o Master)
-T : Usado para iniciar o SQL Server com traceflags específicos.
Quando você quer ativar mais de um trace flag no start up da sua instância, coloque-os separados por ponto e vírgula. ex: -T1234;-T5678
-f : Modo mínimo e single user: Não haverá checkpoints, startup procedures não serão executadas e o SQL subirá com o mínimo dos requisitos de configuração.

IMPORTANTE: Se você subir o SQL Server com o parametro -f, sasabilite o SQL Agent. Caso contrário ele ficará com a única conexão disponível.

Como DBA, saber os principais parâmetros e como tirar vantagem deles durante um momento de crise, é de grande valia.
Uma lista completa de todos os startup parameters pode ser obtido através do MS-DOS:

  1. Vá até a pasta binn da instância SQL que você quer consultar
  2. digite: sqlservr.exe -?

Sem título

 

That’s all folks

[]’s

`Piroto

 

 

Instalação Oracle ODAC

Fala Pessoal,

Este post será bem rápido e simples. Na verdade ele vai servir como fonte de consulta para alguns posts que estão por vir sobre integração e exportação de dados do Oracle para o SQL Server.

O que é o ODAC?

O Oracle Data Access Components (ODAC) é um pacote com drivers (OLEDB, ASP.NET provider, .Net Provider etc…) que permite o acesso a um DB Oracle a partir de um Windows.

Instalação

A instalação é bem simples. Basta baixar a versão que condiz com o servidor Oracle que você quer acessar e seguir alguns passos:

  1. Extrair o arquivo .rar para um diretório X
  2. Abrir um prompt de comando (com permissões administrativas) e acessar a pasta que o ODAC foi extraído.
  3. Executar no CMD:
    install.bat all C:\oracle\11.2\odac odac
    
  4. Adicionar a sua lista de variáveis de ambiente (PATH) os seguintes itens:
    • C:\oracle\11.2\odac
    • C:\oracle\11.2\odac\bin
  5. Reiniciar o computador

obs: Eu instalei a versão 11.2 do ODAC no meu ambiente. É importante, para fins de controle de versões utilizadas, que você substitua o número da versão pela que você está usando.

That’s all folks

Abraços.

 

Piroto

 

Piroto em 2016

Fala Povo,

O ano de 2015 foi de grandes mudanças e desafios na minha vida profissional e pessoal.

Passei quase 80% do ano fora do Brasil; Aperfeiçoando meu inglês em Ottawa – Canada e depois fazendo grande projeto de performance para um banco colombiano. No âmbito pessoal…bem…digamos que eu decidi juntar os trapos com a namorada haha…acho que 7 anos já era mais que hora.

Enfim, contei toda essa historinha triste só para justificar a ausência de posts e participação na comunidade em geral em 2015.

EM 2016 fiz um planejamento para tudo isso mudar. Aqui no blog ja me programei para ter posts regulares a cada quinzena (no máximo). Fora do blog estou escrevendo artigos para a SQL Magazine; O primeiro de 2016 vem agora em fevereiro e vai tratar sobre o SQL Broker. A ideia também é submeter algumas palestras para eventos como SQL Sat ou a semana te tecnologia da FatecSP.

Bom, chega de blábláblá e vamos trabalhar.

 

 

 

Introdução ao cache no SQL Server

Segundo a Wikipédia

“[…] cache é um dispositivo de acesso rápido,

interno a um sistema, que serve de intermediário entre um operador de

um processo e o dispositivo de armazenamento ao qual esse operador acede.

A vantagem principal na utilização de um cache consiste

em evitar o acesso ao dispositivo de armazenamento o que pode ser

demorado […]”

O conceito de cache é aplicado a várias áreas da TI e com certeza você já deve ter ouvido falar nesse termo, por exemplo: no desenvolvimento de páginas WEB, Banco de Dados, e até ao acessar sites.

Na esfera SQL Server são dois os tipos de cache existentes:

Data Cache: Na primeira vez ele lê o disco e coloca os dados na memória,

Já nas próximas utilizações destes dados ele não precisa ir até o disco para recuperar os dados.

Procedure Cache: Diferente do primeiro tipo, ele armazena o código da procedure e os planos de execução na memória.

A título de conhecimento, estes mesmos caches existem no oracle (e em outros SGDBS), seriam eles   Buffer Cache e o Shared Pool respectivamente.

contribuição: Wellington Mariusso 🙂

Quando criamos, por exemplo, uma stored procedure os seguintes passos são executados:

* Create Procedure

* Parse ( Faz a análise da sisntaxe, valida se os objetos existem etc)

* Gera o Plano de Execução para o comando, que são os ‘caminhos’ que o SQL vai seguir para realizar a sua solicitação e, tudo isso, baseado em uma série de variáveis, como por exemplo Seletividade, Densidade, Cardinalidade etc.

* Compila  plano de execução: Depois que o plano já foi definido ele o pega e insere no cache para que as próximas execuções possam utilizar o mesmo plano, sem passar pelos mesmos passos.

Consultar os objetos em cache:

Através de DMVs (dynamic management Views) que foram introduzidas no SQL 2005, somos capazes de verificar, em tempo real, o que está acontecendo

no nosso servidor, no caso dos objetos que estão em cache a seguinte DMV poderá ser utilizada:

SELECT * FROM SYS.SYSCACHEOBJECTS where dbid = db_id([NomeSeuDB])

<p>Caso você deseje consultar somente os planos de execução que estão armazenados no cache a seguinte &lt;a href=&quot;http://technet.microsoft.com/en-us/library/ms188754.aspx&quot;&gt;DMV&lt;/a&gt; é mais indicada</p>
<p>

select * from sys.dm_exec_cached_plans a
cross apply sys.dm_exec_query_plan(a.plan_handle)

obs: fazemos uso do operador “cross apply” com a tablea sys.dm_exec_query_plan

para que possamos obter o plano de execução em formato XML ao invés de apenas o handle.

 

Limpando o cache

Muitas vezes estamos trabalhando com otimização de consultas e torna-se inviável reiniciar o servidor a cada novo teste para validar

se as nossas alterações foram efetivas, para isso o SQL Server possui a função:

dbcc freeproccache

Que vai limpar todos os objetos que estivem no cache; devemos tomar muito cuidado ao executar esse tipo de operação no nosso servidor

de produção, pois, as coisas tendem a ficar bem lentas por algum tempo. 🙂

Recompilação do plano de execução

Quando há alterações nos objetos refenciados em uma procedure, criação de indice, adição ou exclusão de campos (etc) o SQL precisa criar um novo plano de execução pois o antigo não reflete mais a realidade da base.

Vamos a Prática

Agora que já vimos um pouco sobre o cache do SQL Server vamos ver um pouco do assunto na prática.

primeiramente limparemos o cache

<p>DBCC FREEPROCCACHE

Agora faremos um select em uma tabela de sistema com um condicional

SELECT SQL,*  FROM SYS.syscacheobjects WHERE DBID = DB_ID()

Image

Execute novamente e note que nenhum outro objeto será adicionado ao cache; vamos

agora adicionar mais um condicional:

Image

Agora iremos  criar uma procedure, limpar o cache e por último executa-la.

create procedure sp_cacheTeste
as
select 1 as retorno
dbcc freeproccache
exec sp_cacheTeste

Podemos notar, após consultarmos a sys.syscacheobjects que os dados em cache mudaram.

Image

Alteraremos a procedure para ver o que acontecerá com objeto no cache:

alter procedure sp_cacheTeste
as
select 1 as retorno, 0 as retorno2
exec sp_cacheTeste

Image

Note as diferenças na coluna objectType da Sys.SysCacheObjects onde são descriminadas consultas AdHoc e procedures.

Image

Ainda iremos explorar um pouco mais sobre o cache em um próximo post, pretendo mostrar, através do SQL Profiler e de alguns eventos específicos de captura de cache, como o SQL trabalha com dados/planos que ainda não estão em cache.

Espero que tenham gostado.

[]’s

Dhiego Piroto

Criando e Executando um assembly pelo SQL Server

Fala Galera,

Todos sabemos que a linguagem T-SQL possui limitações, alguma vez você já precisou fazer algum processo muito elaborado e acabou esbarrando em alguma delas?

Pois é, saiba que o SQL Server possuí uma integração com linguagens de programação, Visual Basic e C#, o que nos permite utilizar todas suas vantagens.

Vamos inciar criando uma nova base de dados para os exemplos:


CREATE DATABASE EX_ASSEMBLY

GO

USE EX_ASSEMBLY

GO

O Common Runtime Language, por default, não vem habilitada na instancia, portanto será necessário faze-lo antes de iniciarmos.


EXEC sp_configure 'ADVANCED OPTIONS',1

RECONFIGURE WITH OVERRIDE

GO

EXEC sp_configure 'clr enabled',1

RECONFIGURE WITH OVERRIDE

Também habilitaremos o CMDShell para que possamos compilar a dll de dentro do SQL (poderia ser realizado pelo prompt de comando)


EXEC sp_configure 'xp_cmdshell',1

RECONFIGURE WITH OVERRIDE

Agora iremos criar uma função em C# bem simples, que irá concatenar uma string passada por parâmetro, a criação poderá ser realizada no notepad e salva com a extensão .cs .


using System;

using System.Data;

using System.Data.Sql;

using System.Data.SqlTypes;

using Microsoft.SqlServer.Server;

public partial class TesteBlogPiroto{

[SqlProcedure]

public static void ConcatenandoTexto(String parametro1){

String parametro = string.Concat("Blog do:", parametro1);

SqlContext.Pipe.Send(parametro);

}

};

Após criarmos o arquivo, que no meu exemplo está na raíz do diretório D:\ , nós precisaremos transforma-lo em uma DLL, para isso será necessário utilizar o comando xp_cmdshell, que nos permite executar comandos shell. Para compilar, precisamos do diretório que o nosso .net framework está instalado (no meu caso a versão usada é a 2).


declare @comando varchar(2000)

set @comando =
'C:\Windows\Microsoft.NET\Framework\v2.0.30319\csc
/target:library
/out:d:\BlogPiroto.dll d:\artigo.cs'

exec xp_cmdshell @comando

Depois de criarmos a dll será necessário importar seu conteúdo para o SQL Server e para isso iremos utilizar a instrução ‘create assembly’:


Create Assembly exBlogPiroto from  'D:\BlogPiroto.dll'
WITH PERMISSION_SET = SAFE

É de extrema importância atentarmos ao permissionamento concedido a um assembly criado, existem três opções:

Safe: O mais restritivo, além de ser a opção default e recomendado pela MS, restringe o acesso do assembly a somente o SQL Server.

UnSafe: Tem acesso irrestrito a todos os recursos da maquina, registro, rede, variaveis do sistema etc.

External_Access: Tem Acesso restrito aos recursos da maquina, pode usar código não gerenciado.

Nao esqueça de ser uma versão suportada pelo SQL, caso contrário o seguinte erro será apresentado

1

Depois de importar o assembly iremos criar uma procedure que fará referência ao método contido na dll.


CREATE PROCEDURE SP_CHAMAASSEMBLY

 (@PARAMETRO NVARCHAR(MAX))

AS EXTERNAL NAME
 EXBLOGPIROTO.TESTEBLOGPIROTO.CONCATENANDOTEXTO

O external name é formado da seguinte forma>  [Nome do Assembly].[Nome da Classe].[Nome do Método]

Agora faremos uma chamada a nossa recém criada procedure passando como parametro o texto a ser concatenado.


EXEC SP_CHAMAASSEMBLY ' DHIEGOPIROTO@GMAIL.COM '

Retorno:

2

Por hoje é isso pessoal!

[]’s

Dicas – Quem recebe a notificação que um Job falhou?

Fala Galera,
Uma dica rápida:
Como consultar os jobs que possuem notificações atreladas a ele, e mostrar que operador as recebe?

simples, basta executar a query abaixo:

select jobs.name as NomeJob,
case jobs.enabled
     when 1 then 'Sim'
     else 'Não'
end as Job_Habilitado,
operadores.name as QuemRecebeNotificacao
from sysjobs jobs
join sysoperators operadores
on jobs.notify_email_operator_id = operadores.id
order by operadores.name, NomeJob

Abraços!!!

Alex Souza

Banco de dados, Business Intelligence, Big Data, Governança de TI ... /* Um eterno aprendiz... */

Blog - Thiago Carlos de Alencar

Aprendendo SQL Server !

SQL Authority with Pinal Dave

SQL Server Performance Tuning Expert

Vitor Fava

SELECT (CrazyIdeas*2), (InsaneIdeas*100), MyExperience FROM MyBigHead WHERE InsaneLevel > 1000

Think Think SQL

DBCC DumpMemory 'TECH','ALL'

Gustavo Maia Aguiar

Artigos, dicas e algumas reflexões sobre o SQL Server

Kimberly L. Tripp

DBCC DumpMemory 'TECH','ALL'

Thiago Zavaschi R2

www.zavaschi.com

Blog do Luti

DBCC DumpMemory 'TECH','ALL'

Luan.Moreno a.k.a [SQL.Soul]

Lead Database Consultant at Pythian

Blog do Leka

let's make things better