共有ホストの「 'LOG_BACKUP'が原因でデータベースのトランザクションログがいっぱいです」


90

共有ホスティングプランにEntityFrameworkコードファーストアプローチを使用したAsp.NetMVC 5Webサイトがあります。コントロールパネルにオープンソースのWebbsitePanelを使用しており、SQLServerパネルは多少制限されています。今日、データベースを編集したいときに、次のエラーが発生しました。

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

私は周りを検索して、これこれまたはこれのような多くの関連する答えを見つけましたが、問題はそれらがデータベースでクエリを実行することを提案していることです。走ってみた

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

Visual Studio(上HomeController)を使用しますが、次のエラーが発生します:

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

どうすれば問題を解決できますか?サポートチーム(ホストにとっては少し貧弱です)に連絡する必要がありますか、それとも自分で解決できますか?


トランザクションなしでALTERを実行します。
usr

@usrどうすればいいですか?
Alireza Noori

そのデータベースの問題、データベースの縮小は機能する可能性があります。これについては、DBAに支援を依頼してください。
Shashank Chaturvedi

なんとかして取引を開始したに違いありません。わからない、多分EFはそれを自動的に行う。EFとトランザクションについて調査する必要があります。または、SSMSからこれを実行します。または、生のADO.NETを使用します。おそらく、ホスティング事業者はそのステートメントを許可せず、ログバックアップをより頻繁に発行する必要があります。
usr

回答:


38

ホスティング会社に電話して、定期的なログバックアップを設定するか、リカバリモデルをシンプルに設定してもらいます。何が選択に役立つかはご存知だと思いますが、とにかく明示します。任意の時点に復元する機能が必要な場合は、回復モデルを完全に設定します。いずれにせよ、データベースはそのまま誤って構成されています。


ありがとうございました。私はこれを自分でやりたかったのですが、彼らにも連絡を取り、彼らはリカバリをセットアップしshrinkてDBで実行しました。また、リカバリは必要なかったので、SIMPLEモードに設定するように指示しました。
Alireza Noori

1
このMSDNページでは、リカバリモデルをシンプルに設定する方法について説明しています。
shekhar 2017

147

ベンの回答に加えて、必要に応じて以下のクエリを試すことができます

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;

8
追加:{database-file-name}を見つけるには:select * from sys.database_files;
cema-sp 2017

2
これがおやつであることが確認できます。受け入れられた答えでなければなりません。
garrettendi 2018年

2
ありがとう@MohitDharmadhikari; より多くのディスクスペースを割り当てたり、ログファイルのサイズを増やしたりするなど、他の多くのことを試しましたが、最初に既存のログファイルを縮小するまで何も機能しませんでした。
ジョニー

1
ありがとう、とても役に立ちました。
Obakeng Molebatsi 2018年

3
私は{データベースファイル名}に等しいであろうと信じてname、このクエリから、ログの行について、列:select * from sys.database_files
ボブ・ホーン

14

ディスクの容量が不足すると、SQLの更新ステートメントが失敗したときに、「データベースXXXXXXXXXXのトランザクションログが 'LOG_BACKUP'のためにいっぱいです」というメッセージが返されることがあります。ディスクスペースを確認してください:)


5

このエラーは、LOG_BACKUPが原因でトランザクションログがいっぱいになるために発生します。したがって、このデータベースに対してアクションを実行することはできません。この場合、SQLServerデータベースエンジンは9002エラーを発生させます。

この問題を解決するには、次のことを行う必要があります

  • データベース全体のバックアップを取ります。
  • ログファイルを縮小して、物理ファイルサイズを減らします。
  • LOG_BACKUPを作成します。
  • LOG_BACKUPメンテナンスプランを作成して、バックアップログを頻繁に取得します。

このエラーとその解決方法に関するすべての詳細を記載した記事を、データベース「SharePoint_Config」のトランザクションログがLOG_BACKUPのためにいっぱいになっている記事に書きました。


9
あなたの答えとしてエラーメッセージを投稿することはまったく役に立ちません。リンクのみの回答もStackOverflowで嫌われています。リンクから関連するテキストを抽出し、ここで引用する必要があります。これは、すべてのリンクが必然的に死ぬように、リンクが将来死ぬ場合に特に重要です。
ダンベチャード2016年

3

これは、ログファイルのサイズが制限されている場合にも発生する可能性があります。

オブジェクトエクスプローラーでデータベースを右クリックします

プロパティを選択します

ファイルを選択

ログ行で、[自動成長/最大サイズ]列の省略記号をクリックします

最大ファイルサイズの変更/確認は無制限です。

ここに画像の説明を入力してください

無制限に変更した後、データベースは復活しました。


1

同じエラーが発生しましたが、バックエンドジョブ(SSISジョブ)から発生しました。データベースのログファイルの増加設定を確認したところ、ログファイルの増加は1GBに制限されていました。つまり、ジョブが実行され、SQLサーバーにさらにログ領域を割り当てるように要求されたが、ログの増加制限が低下したためにジョブが失敗した場合に発生しました。ログの増加を変更し、50MBと無制限の増加で増加するように設定すると、エラーはなくなりました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.