Art*_*rty 5 sql-server-2005 sql-server backup transaction-log
我有一个使用完整恢复模型的 SQL Server 2005 数据库。如果我执行以下命令:
ALTER DATABASE test SET RECOVERY SIMPLE;
ALTER DATABASE test SET RECOVERY FULL;
Run Code Online (Sandbox Code Playgroud)
或者
BACKUP LOG test WITH truncate_only;
Run Code Online (Sandbox Code Playgroud)
然后尝试运行日志备份:
BACKUP LOG test TO DISK = 'backupfile.bak'
Run Code Online (Sandbox Code Playgroud)
我收到错误消息:
无法执行 BACKUP LOG,因为当前没有数据库备份。
问题:
如何在不运行备份日志命令的情况下检查我是否无法进行日志备份?
您需要先对数据库进行完整备份,然后才能进行日志备份。
执行下面的T-SQL查看是否可以进行日志备份:
SELECT db_name(database_id) as 'database', last_log_backup_lsn
FROM sys.database_recovery_status
Run Code Online (Sandbox Code Playgroud)
注意: 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2330 次 |
| 最近记录: |