リカバリモデルがSIMPLEである間は、ステートメントBACKUPLOGは許可されませんというエラーが発生した場合 SQLServerまたはAzureSQLEdgeでデータベースをバックアップしようとすると、単純なリカバリモデルを使用するデータベースでトランザクションログをバックアップしようとしているためです。
これを修正するには、リカバリモデルをフルロギングまたはバルクロギングに変更します。
エラー
エラーが発生するT-SQLコードの例を次に示します。
BACKUP LOG Music
TO DISK = '/var/opt/mssql/backups/Music.trn';
結果:
Msg 4208, Level 16, State 1, Line 1 The statement BACKUP LOG is not allowed while the recovery model is SIMPLE. Use BACKUP DATABASE or change the recovery model using ALTER DATABASE.
原因
前述のように、このエラーは、単純なリカバリモデルを使用するデータベースでトランザクションログをバックアップしようとすると発生します。
単純なリカバリモデルは、ログのバックアップをサポートしていません。
ソリューション
この問題を解決するには、データベースリカバリモデルをFULL
のいずれかに設定します。 またはBULK_LOGGED
:
USE master;
ALTER DATABASE Music
SET RECOVERY FULL;
この例では、データベースを完全復旧モードに設定します。
ただし、トランザクションログのバックアップを開始する前に、少なくとも1つのデータベースの完全バックアップを実行する必要もあります。これを行わないと、エラー4214が発生します。これは、現在のデータベースバックアップがないため、バックアップログを実行できないことを示しています。 。
データベースの完全バックアップを実行する例を次に示します。
BACKUP DATABASE Music
TO DISK = '/var/opt/mssql/backups/Music.bak'
WITH FORMAT;
これで、必要に応じてトランザクションログをバックアップできます:
BACKUP LOG Music
TO DISK = '/var/opt/mssql/backups/Music.trn';
結果:
Processed 3 pages for database 'Music', file 'Music_log' on file 1.
Azure SQL Edgeを使用していますか?
Azure SQL Edgeを使用している場合、この問題が頻繁に発生する可能性があります。これは、SQLEdgeで作成されたデータベースがデフォルトで単純なリカバリモデルを使用しているためと考えられます。これは、model
データベースは単純な回復モデルを使用しています。
model
でいつでもリカバリモデルを変更できます データベースをFULL
に 、これにより、後続のデータベースはデフォルトで完全復旧モードを使用します。