Eu tenho um site Asp.Net MVC 5 com abordagem codefirst EntityFramework em um plano de hospedagem compartilhada. Ele usa o WebbsitePanel de código aberto para painel de controle e seu painel do SQL Server é um tanto limitado. Hoje, quando quis editar o banco de dados, encontrei este erro:
The transaction log for database 'db_name' is full due to 'LOG_BACKUP'
Eu pesquisei e encontrei muitas respostas relacionadas como esta e esta ou esta, mas o problema é que eles sugerem executar uma consulta no banco de dados. Eu tentei correr
db.Database.ExecuteSqlCommand("ALTER DATABASE db_name SET RECOVERY SIMPLE;");
com o Visual Studio (no HomeController
), mas recebo o seguinte erro:
System.Data.SqlClient.SqlException: ALTER DATABASE statement not allowed within multi-statement transaction.
Como posso resolver meu problema? Devo entrar em contato com a equipe de suporte (que é um pouco ruim para o meu anfitrião) ou posso resolver isso sozinho?
asp.net
sql-server
asp.net-mvc
database
Alireza Noori
fonte
fonte
Respostas:
Ligue para sua empresa de hospedagem e peça que configurem backups regulares de log ou defina o modelo de recuperação como simples. Tenho certeza que você sabe o que informa a escolha, mas serei explícito de qualquer maneira. Defina o modelo de recuperação como total se precisar da capacidade de restaurar em um momento arbitrário. De qualquer maneira, o banco de dados está configurado incorretamente como está.
fonte
shrink
no banco de dados. Além disso, não precisava da recuperação, então disse a eles para colocá-la noSIMPLE
modo.Além da resposta de Ben, você pode tentar as consultas abaixo de acordo com sua necessidade
USE {database-name}; GO -- Truncate the log by changing the database recovery model to SIMPLE. ALTER DATABASE {database-name} SET RECOVERY SIMPLE; GO -- Shrink the truncated log file to 1 MB. DBCC SHRINKFILE ({database-file-name}, 1); GO -- Reset the database recovery model. ALTER DATABASE {database-name} SET RECOVERY FULL; GO
Atualizar crédito @ cema-sp
Para encontrar nomes de arquivos de banco de dados, use a consulta abaixo
select * from sys.database_files;
fonte
select * from sys.database_files;
name
coluna, para a linha do log, a partir desta consulta:select * from sys.database_files
Ocasionalmente, quando um disco fica sem espaço, a mensagem "log de transações do banco de dados XXXXXXXXXX está cheio devido a 'LOG_BACKUP'" será retornada quando uma instrução SQL de atualização falhar. Verifique seu espaço em disco :)
fonte
Este erro ocorre porque o log de transações fica cheio devido a LOG_BACKUP. Portanto, você não pode executar nenhuma ação neste banco de dados e, nesse caso, o Mecanismo de Banco de Dados do SQL Server gerará um erro 9002.
Para resolver este problema, você deve fazer o seguinte
Escrevi um artigo com todos os detalhes sobre esse erro e como resolvê-lo em O log de transações do banco de dados 'SharePoint_Config' está cheio devido a LOG_BACKUP
fonte
Isso também pode acontecer quando o tamanho do arquivo de log é restrito.
Clique com o botão direito no banco de dados no Object Explorer
Selecione Propriedades
Selecionar arquivos
Na linha de registro, clique nas reticências na coluna Autogrowth / Maxsize
Alterar / verificar se o tamanho máximo do arquivo é ilimitado.
Depois de mudar para ilimitado, o banco de dados voltou à vida.
fonte
Recebi o mesmo erro, mas de um trabalho de back-end (trabalho SSIS). Ao verificar a configuração de crescimento do arquivo de log do banco de dados, o crescimento do arquivo de log foi limitado a 1 GB. Portanto, o que aconteceu foi quando o trabalho foi executado e solicitou ao servidor SQL que alocasse mais espaço de log, mas o limite de crescimento do log diminuído causou a falha do trabalho. Modifiquei o crescimento do log e o configurei para crescer 50 MB e crescimento ilimitado e o erro foi embora.
fonte