O SQL 2016 Data Migration Assistant (Upgrade Advisor) está dizendo que preciso parar de usar referências de tabela de sistema antigas. Ou seja, ele quer que eu pare de usar sysdatabases e sysprocesses.
Eu tenho algum código que está registrando informações de sessão com base em dados de sysprocesses. Incluído nesse log está o ID do banco de dados do spid (session_id).
Estive pesquisando on-line e encontrei apenas duas substituições possíveis, nenhuma das quais funciona totalmente devido aos motivos explicados abaixo.
Opção 1 (sys.dm_tran_locks) - Esta opção parece funcionar de forma bastante confiável se eu vincular de volta a sys.dm_exec_sessions, mas notei que ela nunca retornará um resultado se o contexto do banco de dados do session_id for master ou tempdb. Isso significa que não poderei buscar de forma confiável o resource_database_id para qualquer session_id que esteja usando master ou tempdb. Também não posso simplesmente presumir, pois há pelo menos dois contextos possíveis para escolher.
Opção 2 (sys.dm_exec_requests) - Esta opção só funciona em session_ids que estão em execução ativa. Os session_ids inativos/suspensos não aparecem na lista.
Se eu não conseguir obter o dbid para session_ids que estão suspensas e/ou estão usando o contexto do banco de dados mestre, terei uma lacuna nos meus logs.
Existe alguma outra maneira de buscar essas informações de forma confiável sem o uso de sys.sysprocesses?
Infelizmente, a Microsoft está ciente da falta de substituições. Você pode votar e assistir a estes itens do Connect para mais detalhes:
Descontinuação de sysprocesses - DMVs não substitui totalmente todas as colunas - por Tony Rogerson SQL
Não há alternativa real para master.dbo.sysprocesses - por GV1973
Mapeando tabelas do sistema para exibições do sistema: https://msdn.microsoft.com/en-us/library/ms187997.aspx
Uma combinação de sys.dm_exec_sessions e sys.dm_exec_requests provavelmente conterá a maior parte do que você precisa.
Se você postar sua consulta, poderemos ajudá-lo a escrever uma versão compatível com SQL2016.