Criei um plano de manutenção há uma semana e está funcionando bem todas as noites. Agora, a tarefa de redução de banco de dados parou de funcionar e lança este erro:
O tamanho da propriedade não está disponível para o banco de dados '[foo]'. Esta propriedade pode não existir para este objeto ou pode não ser recuperável devido a direitos de acesso insuficientes.
Ontem instalei alguns hotfixes do SQL Server oferecidos pelo Windows Update (4411 e 4457, se isso importa). É a única mudança que eu possivelmente fiz.
Minha tarefa fica assim:
- Conexão: Conexão do servidor local (sa)
- Banco(s) de dados:
Todos os bancos de dadosTodos os bancos de dados de usuários - Encolha o banco de dados quando ele crescer além de: 50 MB
- Quantidade de espaço livre restante após o encolhimento (10%)
- Devolver espaço liberado ao sistema operacional
Algumas das minhas descobertas:
- Se eu gerar o código T-SQL e executá-lo manualmente, ele funciona perfeitamente.
- Se eu criar um novo plano de manutenção com uma tarefa idêntica de redução de banco de dados , ele funcionará perfeitamente.
Qual pode ser o problema?
Como Shanky já comentou, executar reduções programadas é errado. Há toneladas de informações on-line sobre isso. Encontre a causa raiz desse crescimento e resolva-a. Eu me livraria dele imediatamente.
Quanto ao erro, parece relacionado à propriedade do db. Se você fizer uma pesquisa com o texto do erro, encontrará várias perguntas relacionadas aqui , aqui e muito mais.
Como recomendação, sugiro mudar para a solução de manutenção Ola Hallengren para tarefas administrativas como DBCC, manutenção de índices, backups, etc.
Por que você está fazendo essa operação de redução?
Se você executá-lo todos os dias, isso significa que seu banco de dados cresce todos os dias e consome o espaço "liberado".
Nesse caso, você está criando fragmentação no banco de dados todas as noites. Além disso, você força o banco de dados a "aumento automático", o que leva tempo (especialmente se você não tiver a inicialização instantânea de arquivos ativada.
Quando você diz "retornar espaço liberado para o sistema operacional", isso significa que seus arquivos de banco de dados estão na unidade do sistema operacional (C:)?
Nesse caso, recomendo que você mova esses arquivos de banco de dados para uma unidade diferente. Dessa forma, se um arquivo encher a unidade, ele não fará o Windows travar. Ele também permitirá que o SQL use todo o IO da unidade (em vez de compartilhá-lo com o sistema operacional).