Temos um banco de dados de produção em execução no nível de isolamento de instantâneo. A aplicação possui uma funcionalidade onde o usuário pode selecionar alguns registros e ordenar que sejam processados. Muita coisa é feita enquanto o processo roda (executa SP, cria tabelas temporárias, roda CURSORS (sic) etc). Todas essas coisas levam vários minutos para serem executadas.
Esta manhã, um usuário selecionou uma grande quantidade de registros e recebeu esta mensagem:
Falha na transação de isolamento de instantâneo no banco de dados 'Mestre' porque o objeto acessado pela instrução foi modificado por uma instrução DDL em outra transação simultânea desde o início dessa transação. Não é permitido porque os metadados não são versionados. Uma atualização simultânea de metadados pode levar à inconsistência se combinada com o isolamento de instantâneo
Após alguns minutos, o usuário tentou novamente, desta vez com pequenos pedaços de registros e conseguiu contornar o problema.
Talvez seja um problema de desempenho, mas fiquei intrigado com o Master DB sendo o local onde o problema ocorreu. Posso esperar que isso aconteça no banco de dados de produção ou mesmo no TempDB.
Minha pergunta é? Qual é o papel do Master DB neste problema? Pode ser apenas uma mensagem de erro enganosa de qualquer maneira?
Felizmente temos trace rodando em produção. Analisando os dados encontrei um 'ALTER LOGIN' sendo feito no db do sistema 'MASTER'.
Mas ainda é estranho porque esses comandos são de diferentes APPs usando uma conexão diferente, tecnologia, etc. Basicamente o cliente tem um "COA - Client Online App" e o suporte tem um "ALA - Adm Local App" . Bloqueios como suporte alteravam a senha de um usuário no ALA e faziam com que o COA gerasse um erro em uma operação intensiva de banco de dados. Ainda é estranho porque mesmo os usuários/clientes em ambas as instâncias são diferentes e não compartilham nenhum dado.
Eu esperava ingenuamente que duas transações não relacionadas de duas conexões não relacionadas não travassem uma na outra.