トランザクションログバックアップを実行するその他の方法
SQL Serverのトランザクションログバックアップエラー「BACKUP LOG cannot be performed because there is no current database backup」の解説
このエラーは、トランザクションログバックアップを実行しようとした際に、データベースの完全バックアップが存在しない場合に発生します。
原因
トランザクションログバックアップは、データベースの最後の完全バックアップ以降に行われたすべての変更を記録します。そのため、復元操作を行うためには、完全バックアップとトランザクションログバックアップの両方が必要です。
解決方法
このエラーを解決するには、以下のいずれかの方法を実行します。
データベースの完全バックアップを実行する
これは、問題を解決する最も簡単な方法です。データベースの完全バックアップを実行すると、その時点までのすべてのデータが保存されます。
最後の完全バックアップから復元する
最後の完全バックアップが存在する場合は、そのバックアップからデータベースを復元することができます。ただし、この方法では、最後の完全バックアップ以降に行われたすべてのデータが失われます。
トランザクションログバックアップをスキップする
トランザクションログバックアップは、データベースの復旧に必要な情報が含まれています。ただし、常に必要なわけではありません。データ損失のリスクを受け入れることができる場合は、トランザクションログバックアップをスキップすることができます。
- トランザクションログバックアップは、定期的に実行することをお勧めします。
- データベースの復旧モデルによって、トランザクションログバックアップの必要性が異なります。
プログラミングにおける対応
このエラーをプログラムで処理する場合は、以下のコードを使用できます。
try
{
// トランザクションログバックアップを実行
using (var connection = new SqlConnection("..."))
{
var command = new SqlCommand("BACKUP LOG database_name", connection);
command.ExecuteNonQuery();
}
}
catch (SqlException ex)
{
if (ex.Number == 4214)
{
// 完全バックアップが存在しない
// 適切な処理を行う
}
else
{
throw;
}
}
using (var connection = new SqlConnection("..."))
{
var command = new SqlCommand("BACKUP LOG database_name", connection);
command.ExecuteNonQuery();
}
このコードは、database_name
という名前のデータベースのトランザクションログバックアップを実行します。
エラー処理
BACKUP LOG
ステートメントが失敗した場合、SqlException
が発生します。この例外には、エラー番号 4214
が設定されます。
try
{
// トランザクションログバックアップを実行
using (var connection = new SqlConnection("..."))
{
var command = new SqlCommand("BACKUP LOG database_name", connection);
command.ExecuteNonQuery();
}
}
catch (SqlException ex)
{
if (ex.Number == 4214)
{
// 完全バックアップが存在しない
// 適切な処理を行う
}
else
{
throw;
}
}
上記のコードでは、SqlException
が発生した場合、エラー番号 4214
をチェックしています。エラー番号 4214
の場合は、完全バックアップが存在しないことを意味します。
注意事項
- トランザクションログバックアップを実行する前に、データベースの完全バックアップを実行しておく必要があります。
BACKUP LOG database_name
SQL Server Management Studio を使用してトランザクションログバックアップを実行する
- SQL Server Management Studio を起動します。
- オブジェクトエクスプローラーで、バックアップしたいデータベースを選択します。
- データベースを右クリックし、[タスク] > [バックアップ] を選択します。
- [バックアップの種類] ボックスの一覧で、[トランザクションログ] を選択します。
- [OK] をクリックします。
PowerShell を使用してトランザクションログバックアップを実行する
Invoke-Sqlcmd -Query "BACKUP LOG database_name"
Maintenance Plan を使用してトランザクションログバックアップを実行する
Maintenance Plan を使用してトランザクションログバックアップを実行するには、以下の手順を実行します。
- オブジェクトエクスプローラーで、[管理] > [Maintenance Plans] を展開します。
- Maintenance Plan を右クリックし、[新しい Maintenance Plan の作成] を選択します。
- Maintenance Plan ウィザードで、[タスクの追加] をクリックします。
- [タスクの種類] ボックスの一覧で、[バックアップデータベース] を選択します。
- スケジュールを設定します。
sql-server