2014-01-20 31 views
30

共有ホスティングプランでEntityFrameworkのコードファーストアプローチを使用しているAsp.Net MVC 5のWebサイトがあります。コントロールパネルにはオープンソースWebbsitePanelが使用されており、SQL Serverパネルは多少限定されています。今日、私はデータベースを編集したいとき、私はこのエラーが発生しました:"共有ホストの 'LOG_BACKUP'によりデータベースのトランザクションログがいっぱいです

The transaction log for database 'db_name' is full due to 'LOG_BACKUP' 

私の周りを検索し、thisthisまたはthisのような関連の回答の多くを発見したが、問題は、彼らがデータベース上でクエリを実行しているお勧めです。私は(HomeController上)Visual Studioに

db.Database.ExecuteSqlCommand("ALTER DATABASE db_name SET RECOVERY SIMPLE;"); 

を実行してみましたが、私は次のエラーを取得:

System.Data.SqlClient.SqlException: ALTER DATABASE statement not allowed within multi-statement transaction. 

どのように私は私の問題を解決することができますか?私はサポートチーム(私のホストには少し貧しい)に連絡するか、これを自分で解決することができますか?

+0

トランザクションなしでALTERを実行してください。 – usr

+0

@usrどうすればいいですか? –

+0

データベースの問題は、データベースを縮小することができます。 DBAにこれを手伝ってもらうよう依頼してください。 –

答えて

22

ホスティング会社に電話して、定期的なログバックアップを設定するか、リカバリモデルをシンプルに設定します。私はあなたが何を選択するかを知っていると確信していますが、とにかく明示されます。任意の時点にリストアする機能が必要な場合は、リカバリモデルをフルに設定します。いずれの場合も、データベースはそのまま構成されています。

+0

ありがとうございます。私はこれを自分自身でやってみたかったのですが、彼らにも連絡を取ってきました。彼らは復旧をセットアップし、DBに「縮小」を実行しました。また、私は回復が必要ではなかったので、私は彼らに 'SIMPLE'モードに設定するよう言いました。 –

+0

この[MSDNページ](https://docs.microsoft.com/en-us/sql/relational-databases/backup-restore/view-or-change-the-recovery-model-of-a-database-sql) -server)では、復旧モデルを簡単に設定する方法について説明しています。 – shekhar

6

このエラーは、LOG_BACKUPによりトランザクションログがいっぱいになるために発生します。したがって、このデータベースではアクションを実行できません。この場合、SQL Serverデータベースエンジンは9002エラーを発生させます。この問題を解決するために

  • は、データベースの完全バックアップを取るかなければなりません。
  • ログファイルを縮小して物理ファイルサイズを小さくします。
  • LOG_BACKUPを作成します。
  • バックアップログを頻繁に使用するようにLOG_BACKUP保守計画を作成します。

私は、このエラーに関するすべての詳細は記事を書いて、どのようにそれを解決するためにThe transaction log for database ‘SharePoint_Config’ is full due to LOG_BACKUP

+2

答えとしてエラーメッセージを投稿することはあまり役に立ちません。リンクオンリーの回答もStackOverflow上でぶつかります。関連するテキストをリンクから抽出し、ここで引用する必要があります。これは、すべてのリンクが必然的に行うように、将来リンクが消滅する場合に特に重要です。 – Dan

1

で、私は同じエラーを得たが、バックエンドジョブ(SSISジョブ)から。データベースのログファイルの拡張設定を確認すると、ログファイルのサイズは1GBに制限されていました。何が起こったのかは、ジョブが実行されたときにSQLサーバーにログスペースをさらに割り当てようと依頼したときですが、ログのサイズの制限によってジョブが失敗しました。私はログの成長を修正し、50MBの成長と無制限の成長に設定し、エラーは消え去った。

28

ベンの回答に加えて、あなたは更新あなたの必要性

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 

ごとにクエリの下には試すことができ、データベースのファイル名を検索するCEMA-SP

@クレジットは、クエリ

の下に使用します
select * from sys.database_files; 
+2

追加:{database-file-name}を見つけるには: 'select * from sys.database_files; ' –

+0

これはSQL Serverのインスタンスベースで(すべてのDBに適用されるように)行う方法はありますか? – nawfal

-3

このエラーは、私がスペースCRを持っていたクライアントシステムで発生しましたサーバーの場所自体を解除してください。そのため、私たちはログを縮小したり、完全バックアップをとることができませんでした。

ここでは、回避策を使用しています:#特定のシナリオで上記のMohitのソリューションからコピーしました。

USE DBNAME;
GO

変更データベースのデータベース名 SET RECOVERY SIMPLE;
GO

DBCC SHRINKFILE( 'DBNAME'、10);
GO

変更データベースのデータベース名 SET RECOVERY FULL;ディスク領域が不足する場合
GO

+0

既に投稿されています – user5226582

1

は時折、メッセージの更新SQL文が失敗したときに返される「データベースXXXXXXXXXXのトランザクションログが原因 『LOG_BACKUP』がにいっぱいです」。 ディスクスペースを確認してください:)

関連する問題