Usuário com melhor resposta
Banco de dados sem utilização

Pergunta
-
Olá amigos, como vão?
Há alguma maneira de descobrir, em uma instância do SQL Server, com diversos bancos de dados se algum desses está sem utilização em um período muito grande? Ou seja, um banco de dados sem utilização por mais de 1 ano ou mais?
Abraços
Clayton Santos
clayton1745@gmail.com
http://clayton1745.spaces.live.com
http://www.blogdoclayton.blog.com.es
Respostas
-
Clayton,
o Sever Trace Side é um Trace mas no modo script (consome menos recursos)
de uma olhada neste link
http://vyaskn.tripod.com/server_side_tracing_in_sql_server.htmatt.
Marcelo Fernandes
MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!- Marcado como Resposta Clayton Santos terça-feira, 15 de junho de 2010 11:05
-
Clayton,
Não saberia afirmar mas talvez os logs gerados pelo SQL Server podem ajudar, isso é claro se o seu servidor não estiver sido reinicializado nos últimos dias ou se o serviço não tenho sido parado.
Para obter estas informações em relação a um período de tempo passado, você já deveria ter realizado este monitoramento.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário]- Marcado como Resposta Clayton Santos terça-feira, 15 de junho de 2010 11:04
Todas as Respostas
-
Vc pode montar um trace ou melhor ainda um Server Trace Side e monitora apenas login e logoff
Se não me engano, tem uma DMV que tbm da algumas informacoes, mas as dmvs tem os seus valores zerados durante o restart do serviço.
att.
Marcelo Fernandes
MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!! -
Olá Marcelo.
Você diz aquele esquema de audit do SQL Server 2000 e 2005 certo? Mas ai eu teria que entrar no log do sql server para monitorar os logins que fizeram login, correto?
Abraço
Clayton Santos
clayton1745@gmail.com
http://clayton1745.spaces.live.com
http://www.blogdoclayton.blog.com.es -
Clayton,
Com a DMV teste este script... mas ainda acho mais garantido o Servr Trace Side, (vou pesquisar um script melhor)
SELECT st.text, qs.creation_time,qs.last_execution_time,DB_NAME(st.dbid),OBJECT_NAME(st.objectid) FROM sys.dm_exec_query_stats AS QS CROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) as ST Where st.dbid=DB_ID('dbTeste')
att.
Marcelo Fernandes
MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!! -
Olá Marcelo.
Vi que essa DMV só é valida no SQL Server 2005, no meu caso preciso também no SQL Server 2000.
Segundo o que pesquisei parece nao haver uma tabela de sistema que informe o ultimo acesso a esse banco. Pelo menos nao encontrei nenhuma informação deste tipo.Abraço
Clayton Santos
clayton1745@gmail.com
http://clayton1745.spaces.live.com
http://www.blogdoclayton.blog.com.es -
Clayton,
o Sever Trace Side é um Trace mas no modo script (consome menos recursos)
de uma olhada neste link
http://vyaskn.tripod.com/server_side_tracing_in_sql_server.htmatt.
Marcelo Fernandes
MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!- Marcado como Resposta Clayton Santos terça-feira, 15 de junho de 2010 11:05
-
Olá Marcelo.
Vi sim seu link, mas tenho uma dúvida.
Então eu terei que rodar o Server Trace Side para verificar se está sendo realizado comandos DML, DDL? Ai, teria que deixar rodando isso por um bom tempo até descobrir que a base não está sendo utilizada, certo?Abraço
Clayton Santos
clayton1745@gmail.com
http://clayton1745.spaces.live.com
http://www.blogdoclayton.blog.com.es -
-
Olá Marcelo, como vai?
Fiz o levantamento de alguns bancos deste servidor e agora vou usar o script que me passou. Já executei todos os script para criação das proc's e agora preciso executar a procedure.
Pode me fornecer um exemplo de execução, com os parametros, por gentileza?
Um forte abraço
Clayton Santos
clayton1745@gmail.com
http://clayton1745.spaces.live.com
http://www.blogdoclayton.blog.com.es -
Clayton,
segue um script de exemplo que usei recentemente
/*************************************************** DEFAULT SERVER TRACE SIDE ========================= MONITORA OS LOGIN\LOGOUT ***************************************************/ use master go drop procedure #tmpPPEventEnable GO create procedure #tmpPPEventEnable @TraceID int, @iEventID int as begin set nocount on declare @iColID int declare @iColIDMax int declare @on bit set @on= 1 set @iColID = 1 set @iColIDMax = 64 while(@iColID <= @iColIDMax) begin exec sp_trace_setevent @TraceID, @iEventID, @iColID, @on set @iColID = @iColID + 1 end end GO declare @rc int declare @TraceID int declare @maxfilesize bigint declare @DateTime datetime declare @InsertFileNameHere nvarchar(400) -- *** DEFINE VARIÁVEIS E SEUS RESPECTIVOS VALORES *** SET @DateTime = '2010-06-09 10:30:00' -- Informe o horário de término do trace SET @InsertFileNameHere = 'D:\Monit_Login_Logout_' -- Informe o caminho onde o arquivo de trace deve ser salvo SET @maxfilesize = 250 -- Tamanho máximo do arquivo de trace. Rollover a cada 250 MB exec @rc = sp_trace_create @TraceID output, 2, @InsertFileNameHere, @maxfilesize, @DateTime if (@rc != 0) goto error declare @off bit set @off = 0 declare @strVersion varchar(10) set @strVersion = cast(SERVERPROPERTY('ProductVersion') as varchar(10)) if( (select cast( substring(@strVersion, 0, charindex('.', @strVersion)) as int)) >= 9) begin exec sp_trace_setevent @TraceID, 10, 1, @off -- No Text for RPC, only Binary for performance exec sp_trace_setevent @TraceID, 11, 1, @off -- No Text for RPC, only Binary for performance end exec #tmpPPEventEnable @TraceID, 17 -- Existing Connection exec #tmpPPEventEnable @TraceID, 14 -- Audit Login exec #tmpPPEventEnable @TraceID, 15 -- Audit Logout -- Set the Filters exec sp_trace_setfilter @TraceID, 10, 0, 7, N'SQL Server Profiler%' -- eliminando conexao do profiler exec sp_trace_setfilter @TraceID, 35, 0, 6, N'dbTeste' -- nome do banco 1 exec sp_trace_setfilter @TraceID, 35, 1, 6, N'dbTeste2'-- nome do banco 2 exec sp_trace_setfilter @TraceID, 35, 1, 6, N'dbTeste3'-- nome do banco 3 -- Set the trace status to start exec sp_trace_setstatus @TraceID, 1 print '--Para parar o trace execute os seguintes comandos' print 'exec sp_trace_setstatus ' + cast(@TraceID as varchar) + ', 0' print 'exec sp_trace_setstatus ' + cast(@TraceID as varchar) + ', 2' Print '' Print '-- Para consultar se o trace está rodando execute o seguinte comando' Print 'select * from ::fn_trace_getinfo(default)' goto finish error: select ErrorCode=@rc finish: drop procedure #tmpPPEventEnable select * from ::fn_trace_getinfo(default) go
att.
Marcelo Fernandes
MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!! -
Executei mas ele está me dando um erro.
Msg 19064, Level 16, State 1, Procedure sp_trace_create, Line 1
The requested trace stop time has been already passed.
Clayton Santos
clayton1745@gmail.com
http://clayton1745.spaces.live.com
http://www.blogdoclayton.blog.com.es -
-
Clayton,
Uma forma de verificar se a base de dados está tendo DELETE, UPDATE e INSERT é verificando a data de alteração do arquivo de dados dela.
Somente fique atento, isso não quer dizer que ela não está sendo utilizada. SELECT não altera a data do arquivo de dados.
TGM -
-
Mesmo assim ele continua me dando erro.
Esse Trace me ajudaria mesmo saber se uma base está um tempo sem ser utilizada? Por que pode ocorrer desta base ser utilizada mensalmente ou no trimestre. Pelo que entendi deste trace, ele só vai me pegar tudo que está sendo executado no momento. Não é isso?
Não há nenhuma tabela de sistema que guarde a última atualização? Como pro exemplo a tabela BACKUPSET do banco MSDB que guarda o histórico dos backups dos bancos.
Abraço
Clayton Santos
clayton1745@gmail.com
http://clayton1745.spaces.live.com
http://www.blogdoclayton.blog.com.es -
Olá Maykel, é uma ótima ideia para o futuro, mas o que preciso atualmente não está dentro. Obrigado pela opinião. Eu desconhecia essa tabela sys.sysprocesses.
Olá Thiago, na verdade os bancos podem ser apenas de leitura e posso correr risco se eu for apenas pelas alterações dos arquivos fisicos.
Abraço
Clayton Santos
clayton1745@gmail.com
http://clayton1745.spaces.live.com
http://www.blogdoclayton.blog.com.es -
Clayton,
No SQL Server 2008 existe o Data Collection que poderia ajudar na obtenção de informações sobre a utilização do seu banco.
A sys.sysprocesses também ajuda muito, gosto de dizer que ela é uma evolução do bom e velho sp_who, sp_who2 e também existe uma implementação extra oficial para o sp_who3 que encontrei outro dia no SQLServerCentral.com
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário] -
Olá Galvão, como vai?
Legal esse esquema do SQL Server 2008, vai ajudar muito. Agora meu caso ainda está sendo no SQL Server 2000.
Não há nada de registro que eu possa verificar em algum tabela de sistema?
Abraço
Clayton Santos
clayton1745@gmail.com
http://clayton1745.spaces.live.com
http://www.blogdoclayton.blog.com.es -
-
Clayton,
Que eu me lembre não, talvez fosse o caso de você realizar o monitoramento através do SQL Server Profiler!!!!
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário] -
-
Marcelo,
Sim você esta certo, acredito que é a única possibilidade disponível para o ambiente.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário] -
Então pessoal, é que isso é muito relativo, pois quem me garante que essa base não é acessada todo final de mês? E não todo dia.
Eu peguei um banco que acredito que esteja sem ser acessado e rodeio o profile, vi que nao tinha nenhuma transação neste banco, depois verifiquei o tamanho do banco (fisico) e ele não tinha crescido nos ultimos 3 meses mas quando fui pegar uma tabela qualquer de usuario dentro deste banco, havia registros com datas deste mês. Então esse banco tem acessos mas é ocasionalmente.
Portanto, não conheço nenhum outro jeito de verificar se um "tal" banco de dados não é acesso desde, por exemplo, 01/01/2008. Pelas explicações do Marcelão, acredito que o Trace Side não me mostrará isso, assim como o profile. Estou procurando mas já desanimei pois acho que não tem mesmo como saber isso. = (
Abraço pessoal
Clayton Santos
clayton1745@gmail.com
http://clayton1745.spaces.live.com
http://www.blogdoclayton.blog.com.es -
Clayton,
Exatamente, neste caso o Trace Side e o Profiler (que são a mesma coisa, so que o Trace side é via script e menos custoso) so vai mostrar do momento que vc ativou até o momento em que vc parar o trace....
att.
Marcelo Fernandes
MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!! -
Entendi, Marcelo. Precisava de algo que mostrasse o passado e não o que está acontecendo agora.
Mas ok. Obrigado pela ajuda e pelas dicas.
Vou tentar fazer esse levantamento das ultimas transações destes bancos manualmente e no "olhodromo" rs.
Abraço
Clayton Santos
clayton1745@gmail.com
http://clayton1745.spaces.live.com
http://www.blogdoclayton.blog.com.es -
Clayton,
Não saberia afirmar mas talvez os logs gerados pelo SQL Server podem ajudar, isso é claro se o seu servidor não estiver sido reinicializado nos últimos dias ou se o serviço não tenho sido parado.
Para obter estas informações em relação a um período de tempo passado, você já deveria ter realizado este monitoramento.
Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário]- Marcado como Resposta Clayton Santos terça-feira, 15 de junho de 2010 11:04
-
Olá Junior.
É verdade, mas ainda acredito que deveria ter alguma tabela de sistema que mostra-se isso. Acho uma necessidade que o MS SQL Server deveria conter em suas futuras versões pela praticidade.
Eu listei algumas tabelas do banco de dados e verifiquei a data inserida de alguns registros. Isso não foi 100% de certeza que este banco não está sendo utilizado, mas deu pra servir como base. Se depois alguem descobrir ou lêr algo sobre o assunto, ficaria muito grato que fosse dividido aqui com a gente!
Um forte abraço
Clayton Santos
clayton1745@gmail.com
http://clayton1745.spaces.live.com
http://www.blogdoclayton.blog.com.es