Sql-Server

無法執行 BACKUP LOG,因為沒有目前數據庫備份

  • March 17, 2016

我有一個使用完整恢復模式的 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&nbsp 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

引用自:https://dba.stackexchange.com/questions/45095