quinta-feira, 24 de março de 2011

#5 - kill process

Navegando pela internet a um tempo atrás achei esse script para fazer um Kill em todos os processos abertos para um DB, infelizmente eu não lembro a fonte, mas se alguém souber a fonte por favor informe para que seja dado os devidos créditos do script.


USE MASTER
CREATE TABLE #TmpWho
(spid INT, ecid INT, status VARCHAR(150), loginame VARCHAR(150),
hostname VARCHAR(150), blk INT, dbname VARCHAR(150), cmd VARCHAR(150), request_id INT)

INSERT INTO #TmpWho
EXEC sp_who
DECLARE @spid INT
DECLARE @tString VARCHAR(15)
DECLARE @getspid CURSOR
SET @getspid = CURSOR FOR
SELECT spid
FROM #TmpWho
WHERE dbname = 'dbbenchmark_desen'OPEN @getspid
FETCH NEXT FROM @getspid INTO @spid
WHILE @@FETCH_STATUS = 0
BEGIN
SET @tString = 'KILL ' + CAST(@spid AS VARCHAR(5))
EXEC(@tString)
--print @tString
FETCH NEXT FROM @getspid INTO @spid
END
CLOSE @getspid
DEALLOCATE @getspid
DROP TABLE #TmpWho
GO

#4 - Listar Bancos


Acredito que vocês já se depararam com a situação de ter um servidor com X DBs e precisar verificar informações sobre as bases com por exemplo,


SELECT DB_NAME([database_id])AS [Database Name],
[file_id], name, physical_name, type_desc, state_desc,
CONVERT( bigint, size/128.0) AS [Total Size in MB]
FROM sys.master_files
WHERE [database_id] > 4
AND [database_id] <> 32767
OR [database_id] = 2
ORDER BY DB_NAME([database_id]) OPTION (RECOMPILE);


/*******************************************************************/







quarta-feira, 23 de março de 2011

#3 - Último acesso

Com ajuda de algumas sites que não me recordo agora fui juntando informações até formar este script, o objetivo dele é mostrar a relação todas as sessões ativas e o que está sendo executado. Esse script ajuda nessa situação e da para monitorar um banco especifico:

USE MASTER

CREATE TABLE #TempWho
(spid INT, ecid INT, status VARCHAR(150), loginame VARCHAR(150), hostname VARCHAR(150), blk INT, dbname VARCHAR(150), cmd VARCHAR(150), request_id INT)

INSERT INTO #TempWho EXEC sp_who;

SELECT * FROM #TempWho WHERE dbname = 'DBTESTE'

SELECT * FROM SYS.DM_EXEC_CONNECTIONS SDEC
CROSS APPLY SYS.DM_EXEC_SQL_TEXT (SDEC.MOST_RECENT_SQL_HANDLE) AS DEST
WHERE SDEC.MOST_RECENT_SESSION_ID in
(SELECT spid FROM #TempWho WHERE dbname = 'DBTESTE')

drop table #TempWho


#2 - Tamanho de Tabelas

Esta semana me deparei com uma situação um pouco diferente no trabalho, precisei descobri o tamanho de algumas tabelas de algumas DB, após procurar mais informações com outros colaboradores achei algumas informações que foram úteis;

use DBTESTE;

SELECT * FROM SYS.TABLES ;

Esse comando retorna a relação de tabelas do DB, existe um campo importante nessa consulta que é o "object_id", como ele você pode

Se vc quer descobrir dados de uma tabela basta executar:

sp_spaceused "table"

Essa sp exibe, respectivamente, o nome da tabela (name), número de linhas (rows), espaço reservado para a tabela (reserved), espaço usado pelos dados na tabela (data), espaço usado pelos indexes da tabela (index_size) e espaço sem uso na tabela (unused).

mas se você tiver uma DB com muitas tabelas você usar o seguinte comando:

DECLARE c CURSOR
FAST_FORWARD
FOR SELECT name
FROM sysobjects
WHERE xtype='U'
DECLARE @Name varchar(64)
OPEN c
FETCH NEXT FROM c INTO @Name
WHILE @@FETCH_STATUS = 0
BEGIN
EXEC sp_spaceused @Name
FETCH NEXT FROM c INTO @Name
END
CLOSE c
DEALLOCATE c

buscando formas mais eficientes de ver as informações sobre as tabelas encontrei essa :

SELECT OBJECT_NAME(ID) TABELA, CONVERT(DEC(15),SUM(RESERVED)) RESERVED
INTO #X
FROM SYSINDEXES
WHERE indid in (0, 1, 255)
GROUP BY ID

SELECT TABELA, LTRIM(STR(RESERVED * D.LOW / 1024, 15, 0)) + ' KB'
FROM #X, master.dbo.spt_values d
where d.number = 1
and d.type = 'E'
ORDER BY RESERVED DESC

drop table #X

#1 - Boas Vindas

Olá amigos esse é primeiro post do meu blog voltado para dicas e algumas informações que vou juntando sobre Administração de Servidores SQL, tudo aqui será de contribuição minha e de outros colaboradores que vou encontrando na vasta rede.