Karuta’s ASP & M$ SQLserver

Dicas, códigos e outras coisinhas de meus estudos para não esquecer…

Archive for the ‘sql server’ Category

Buscar ‘termos’ dentro de Store Procedures

Posted by karuta em outubro 25, 2015

select object_name(id) from syscomments where text like ‘% termos %’

Posted in sql server, store procedure | Leave a Comment »

DATABASE MIRRORING

Posted by karuta em outubro 22, 2015

Surgido no SQL Server 2005 esta tecnologia consegue realizar a “cópia” da database do servidor primário e a disponibiliza para o servidor Mirror. Esta operação é realizada através da transferência dos registros do transaction log (Primário para o Mirror), aplicando assim todas as transações ocorridas. Vale ressaltar que o Database Mirroring é compatível com qualquer tipo de hardware suportado pelo SQL Server.

Servidor Primário: Servidor que será a referência para a aplicação armazenar seus dados.

Servidor Mirror: Este será o servidor espelho do servidor principal. O servidor Mirror irá permanecer no estado de restore e este não pode ser acessado diretamente.

Servidor Witness: Este servidor é responsável por monitorar a disponibilidade do servidor principal e em caso de falha o mesmo notifica as aplicações através de um parâmetro na string de conexão e assim direciona para o servidor secundário. Para maiores informações referente ao funcionamento e criação da string de conexão, disponibilizo para vocês uma publicação da Microsoft abordando este tema:

https://msdn.microsoft.com/subscriptions/index/ms175484

Observação: A solução Database Mirroring não permite o espelhamento das databases de sistema (Master, Msdb, Tempdb e Model.)

MODOS DE OPERAÇÃO

Possuímos três modos operacionais para o Database Mirroring, são eles:


TABELA 1: FUNCIONALIDADES.

Apresentaremos primeiro de forma resumida os modos operacionais e funcionalidades que o Database Mirroring nos possibilita, logo a diante iremos detalharemos os componentes envolvidos em cada modo (TRANSACTION SAFETY, WITNESS, FAILOVER).

Alta Disponibilidade

O modo de alta disponibilidade ou High Availability é o único que trabalha com o failover automático e com o servidor Witness. Para o seu funcionamento o mesmo necessitará operar de forma ¹síncrona, que nos garantirá que não haverá perda de dados.

Caso o servidor principal esteja indisponível, ocorrerá o processo conhecido como “role switching”, na qual significará que o servidor mirror assumirá o papel do servidor principal e quando servidor principal antigo retornar sua disponibilidade, este assumirá o papel de servidor Mirror.

Alta Proteção

O modo de alta proteção ou High Protection requer que o transaction safety seja definido como FULL, que representará que as transações deverão trabalhar de forma síncrona, garantindo assim que não haverá perda de dados, mas este também não nos garantirá a disponibilidade da aplicação, devido a não possuir um servidor Witness, tornando assim um failover manual.

Alta Performance

O modo de alta performance ou High Performance, é o modo mais performático (rápido) comparado com outros modos operacionais, isto se dá devido a possuir o modo de transação do tipo ²assíncrona, ou seja, a transação não necessita de ser efetivada em ambos os parceiros para confirmar a transação, entretanto este método não previne na perda de dados, caso ocorra a troca de papéis dos servidores primário e Mirror.

  TABELA 2: MODOS DE OPERAÇÃO

TRANSACTION SAFETY

Este irá definir o nível de segurança que a transação terá no Database Mirror, podendo ser operada de duas formas:

FULL: Virá configurada como default, este representará o nível máximo de     segurança, onde as transações serão operadas de forma ¹ Síncrona.

OFF: Este representará o modo de alto desempenho, onde as transações serão operadas de forma ² Assíncrona.

¹ Síncrona: Essa opção exige que ambos os servidores (Principal e Mirror) confirmem a transação antes que a mesma seja efetivada. Lembramos que este tipo de sincronização eleva o nível de latência das transações.

² Assíncrona: Ao contrário da síncrona, a assíncrona confirma a transação antes que a mesma seja efetivada em ambos os nós, tornando-a mais performática, entretanto esta não previne a perda de dados.

WITNESS

Este campo informará se o modo operacional utilizará o Witness.

FAILOVER

Failover Manual: Este failover requer uma ação manual do DBA para realizar a troca do servidor principal para o Mirror, não acarretando na perda de dados, devido ao tipo de failover operar de forma síncrona.

Failover Forçado: Este também realizará a transferência de forma manual do servidor primário para o servidor Mirror, entretanto este modo do failover possibilitará a perda de dados, isto se dá por possuir o tipo de transação assíncrona.

Failover Automático: Suportado apenas pelo modo operacional de Alta Disponibilidade, este necessita do Witness para realizar o failover automático em caso de falha do servidor principal.

 

Redigida por

Posted in sql server | Leave a Comment »

SQL SERVER – Database Size Limitation in SQL Express

Posted by karuta em outubro 21, 2015

SQL 2000 Desktop Engine (MSDE) has limit of 2 GB data file(s) size.

SQL 2005 Express Edition has limit of 4 GB data file(s) size.

SQL 2008, SQL 2008 R2, SQL 2012 and SQL 2014 Express Edition has limit of 10 GB data file(s) size.

Posted in sql server | Leave a Comment »

CROSS APPLY

Posted by karuta em outubro 16, 2015

Hoje eu vou falar sobre o APPLY. Esse cara serve para fazer uma espécie de JOIN só que sem a clausula ON onde o INNER esta para o CROSS assim como o LEFT ou o RIGHT para o OUTER. Isso resulta em coisas do tipo:

SELECT      T.Nome, CA.Nome,  CA.Gols
FROM        time       T
CROSS APPLY (SELECT * FROM jogador J WHERE J.idTime = T.idTime) CA

Que tem exatamente o mesmo plano de execução e resultado disso aqui:

SELECT      T.Nome,           J.Nome,           J.Gols
FROM        time        T
INNER JOIN  Jogador     J      ON          J.idTime    = T.idTime

Então o que torna esse cara especial? Em minha opinião e experiência uma das coisas mais interessantes e com um grande potencial são as pesquisas com o TOP(n) onde o n tem uma variação de acordo com a regra de negócio em questão e, ainda mais importante, o fato de você conseguir fazer consultas com funções que retornam tabelas!

CREATE FUNCTION Exemplo(@id AS int, @n AS INT)

RETURNS TABLE

AS

RETURN

SELECT      TOP(@n)     *

FROM        jogador     j

WHERE       j.idTime    = @id

ORDER BY    j.Gols      DESC

GO

SELECT            *

FROM        Time  t

CROSS APPLY dbo.Exemplo(t.idTime, CASE WHEN(t.idTime=1) THEN 1 ELSE 2 END)

ORDER BY    t.IdTime    ASC

Vejam que as possibilidades com esse operador são grandes porem no dia a dia da “firma” são raros os casos onde ele pode/precisa ser utilizado.

 

CRÉDITOS E AGRADECIMENTOS: 

http://stackoverflow.com/questions/1139160/when-should-i-use-cross-apply-over-inner-join

Posted in sql server | Leave a Comment »

Script – ver todas as tabelas em um banco de dados

Posted by karuta em janeiro 23, 2015

SELECT name FROM sysobjects WHERE xtype=’U’ order by name

Posted in sql server | Leave a Comment »

execute mathematical formula stored as string

Posted by karuta em novembro 10, 2014

Declare @weight as char(25)
Declare @output as numeric(18,2)

SET @weight = '2*5+2*5*4'
declare @TheSQL nvarchar(1000)
Set @TheSQL = 'Select @theoutput = ' + @weight


--OutPut should be 50.
exec sp_executesql @stmt = @TheSQL
    , @params= N'@theoutput int OUTPUT' 
	, @theoutput = @output output

print @output


links úteis para pesquisa:
http://www.itjungle.com/fhg/fhg111004-story01.html
http://sqlblogcasts.com/blogs/madhivanan/archive/2008/01/16/beware-of-implicit-conversions.aspx

Posted in sql server, store procedure | Leave a Comment »

UPDATE from SELECT using SQL Server

Posted by karuta em agosto 15, 2014

UPDATE
    Table
SET
    Table.col1 = other_table.col1,
    Table.col2 = other_table.col2
FROM
    Table
INNER JOIN
    other_table
ON
    Table.id = other_table.id

Posted in sql server | Leave a Comment »

Limpando logs de bases no SQL Server

Posted by karuta em agosto 7, 2014

backup log “BANCODEDADOS” with truncate_only
go

dbcc shrinkdatabase (’BANCODEDADOS’, 0)
go

Onde, BANCODEDADOS é o nome do banco onde fará manutenção. O primeiro comando faz um backup dos registros do log. O segundo, limpa os arquivos inúteis do banco, como logs gigantescos. 

Posted in sql server | Leave a Comment »

DIVISÃO NO SQL – MAIS DIGITOS APÓS A VIRGULA

Posted by karuta em julho 31, 2014

select 0.59 / 350 as resultado1
select CAST(0.59 as float) / CAST(350 as float) as resultado2

resultado1
—————————————
0.001685

(1 row(s) affected)

resultado2
———————-
0,00168571428571429

(1 row(s) affected)

Posted in sql server | Leave a Comment »

Envio dados SQL SERVER – ASP – ADO – adLongVarChar

Posted by karuta em julho 30, 2014

[Microsoft][ODBC SQL Server Driver]String data, right truncation

http://www.w3schools.com/asp/ado_datatypes.asp

varchar(MAX) can be used from ADO as an input parameter. The data type in this case would be adLongVarChar

Se acontecer problemas no tamanho do texto que você precisa enviar para o banco de dados, use o parametro: 201 = adLongVarChar

 

rsInserirRoyalty_cmd.Parameters.Append rsInserirRoyalty_cmd.CreateParameter(“param3”, 201, 1, -1, v0)

Posted in asp, sql server | Leave a Comment »