none
Banco de dados sem utilização RRS feed

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.htm

    att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!
    • Marcado como Resposta Clayton Santos terça-feira, 15 de junho de 2010 11:05
    segunda-feira, 7 de junho de 2010 20:40
    Moderador
  • 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
    segunda-feira, 14 de junho de 2010 22:40
    Moderador

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!!!
    segunda-feira, 7 de junho de 2010 19:35
    Moderador
  • 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
    segunda-feira, 7 de junho de 2010 19:47
  • 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!!!
    segunda-feira, 7 de junho de 2010 19:55
    Moderador
  • 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
    segunda-feira, 7 de junho de 2010 20:28
  • 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.htm

    att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!
    • Marcado como Resposta Clayton Santos terça-feira, 15 de junho de 2010 11:05
    segunda-feira, 7 de junho de 2010 20:40
    Moderador
  • 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
    terça-feira, 8 de junho de 2010 11:24
  • Exato...

    verifique que vc pode adicionar o parametro para STOP do trace automaticamente....

    depois basta analizar os .TRCs

    att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!
    terça-feira, 8 de junho de 2010 12:26
    Moderador
  • 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
    quarta-feira, 9 de junho de 2010 12:49
  • 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!!!
    quarta-feira, 9 de junho de 2010 13:18
    Moderador
  • 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
    quarta-feira, 9 de junho de 2010 14:15
  • você deve ajustar o horário de termino

    SET @DateTime = '2010-06-09 10:30:00' coloque a data e horário que vc deseja que termine o trace

    att
    Marcelo Fernandes

     


    MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!
    quarta-feira, 9 de junho de 2010 14:21
    Moderador
  • 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
    quarta-feira, 9 de junho de 2010 17:14
  • Se não for necessário ser muito preciso, você pode fazer um job que rode de tempos em tempos e guarde em uma tabela o resultado do select abaixo:

    select spid, getdate() from sys.sysprocesses where db_name(dbid) = '<nome do banco>'

     

    quarta-feira, 9 de junho de 2010 18:57
  • 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
    quarta-feira, 9 de junho de 2010 19:36
  • 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
    quarta-feira, 9 de junho de 2010 19:38
  • 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]
    quarta-feira, 9 de junho de 2010 19:45
    Moderador
  • 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
    quinta-feira, 10 de junho de 2010 13:42
  • Claydton,

    o Trace Side esta apresentando algum erro?

    att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!
    quinta-feira, 10 de junho de 2010 13:48
    Moderador
  • 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]
    quinta-feira, 10 de junho de 2010 17:20
    Moderador
  • Junior...

    Justamente isto que indiquei, ma no modo script.. o Trace Side
    or se tratar de sql 2000 acho que so temos esta opcao mesmo...

    Att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!
    quinta-feira, 10 de junho de 2010 18:25
    Moderador
  • 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]
    quinta-feira, 10 de junho de 2010 18:29
    Moderador
  • 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
    quinta-feira, 10 de junho de 2010 19:02
  • 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!!!
    quinta-feira, 10 de junho de 2010 19:18
    Moderador
  • 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
    quinta-feira, 10 de junho de 2010 19:31
  • 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
    segunda-feira, 14 de junho de 2010 22:40
    Moderador
  • 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
    terça-feira, 15 de junho de 2010 11:04