Sql-Server
無法執行 BACKUP LOG,因為沒有目前數據庫備份
我有一個使用完整恢復模式的 SQL Server 2005 數據庫。如果我執行以下命令:
ALTER DATABASE test SET RECOVERY SIMPLE; ALTER DATABASE test SET RECOVERY FULL;
要麼
BACKUP LOG test WITH truncate_only;
然後嘗試執行日誌備份:
BACKUP LOG test TO DISK = 'backupfile.bak'
我收到錯誤消息:
無法執行 BACKUP LOG,因為沒有目前數據庫備份。
問題:
在不執行備份日誌命令的情況下,如何檢查是否無法進行日誌備份?
last_log_backup_lsn
中將為空sys.database_recovery_status
。
在進行日誌備份之前,您需要對數據庫進行完整備份。
執行下面的T-SQL,看看是否可以進行日誌備份:
SELECT db_name(database_id) as 'database', last_log_backup_lsn FROM sys.database_recovery_status
注意: sys.database_recovery_status是一個未記錄的系統視圖。如果last_log_backup_lsn的值為 NULL,則表示數據庫沒有維護日誌備份序列並且處於自動截斷模式。請參閱以下 Microsoft 知識庫文章:
下面是來自 SQLSkills 的腳本,用於檢查您的數據庫是否處於*“偽簡單”*模式。
USE [msdb]; GO IF EXISTS (SELECT * FROM sys.objects WHERE [name] = N'SQLskillsIsReallyInFullRecovery') DROP FUNCTION [SQLskillsIsReallyInFullRecovery]; GO CREATE FUNCTION [SQLskillsIsReallyInFullRecovery] ( @DBName sysname) RETURNS BIT AS BEGIN DECLARE @IsReallyFull  BIT; DECLARE @LastLogBackupLSN NUMERIC (25,0); DECLARE @RecoveryModel TINYINT; SELECT @LastLogBackupLSN = [last_log_backup_lsn] FROM sys.database_recovery_status WHERE [database_id] = DB_ID (@DBName); SELECT @RecoveryModel = [recovery_model] FROM sys.databases WHERE [database_id] = DB_ID (@DBName); IF (@RecoveryModel = 1 AND @LastLogBackupLSN IS NOT NULL) SELECT @IsReallyFull = 1 ELSE SELECT @IsReallyFull = 0; RETURN (@IsReallyFull); END; GO