Imaginei que poderia usar o sp_MSforeachdb para resolver esse problema, mas recebo uma mensagem de erro.
sp_MSforeachdb '
BEGIN
USE [?]
DECLARE @dbid INT
SET @dbid = DB_ID()
IF(@dbid > 4)
BEGIN
--PRINT ''[?]'' + CONVERT(VARCHAR, @dbid)
--ALTER DATABASE [?] SET AUTO_SHRINK OFF
END
END;
'
Se eu executar a consulta acima com a linha PRINT descomentada, obtenho uma lista de todos os bancos de dados, exceto os do sistema. No entanto, quando descomente a linha ALTER DATABASE, recebo estas duas mensagens de erro:
Msg 5058, nível 16, estado 2, linha 9 A
opção 'AUTO_SHRINK' não pode ser definida no banco de dados 'mestre'.
Msg 5058, nível 16, estado 1, linha 9 A
opção 'AUTO_SHRINK' não pode ser definida no banco de dados 'tempdb'.
Isso parece interromper a operação em algum momento, para que apenas alguns bancos de dados sejam desativados automaticamente.
Alguma idéia de como posso desativar a redução automática em todos os bancos de dados? Pergunta de bônus: por que minha abordagem não funciona?