【问题标题】:Capture Error number of log backup failure捕获日志备份失败的错误号
【发布时间】:2018-08-24 19:59:45
【问题描述】:

当缺少完整备份时,以下代码会引发错误。

BACKUP LOG [TESTDB] TO DISK = 'C:\DBADMIN\Backup\TESTDB_LOG.BAK' 

消息 4214,第 16 级,状态 1,第 4 行
无法执行 BACKUP LOG,因为当前没有数据库备份。

消息 3013,第 16 级,状态 1,第 4 行
BACKUP LOG 异常终止。

我正在尝试使用以下代码捕获语句的错误编号,但无法捕获错误 4214。

   BEGIN TRY 
      BACKUP LOG [TESTDB] TO DISK = 'C:\DBADMIN\Backup\TESTDB_LOG.BAK' 
   END TRY
   BEGIN CATCH
      SELECT ERROR_NUMBER() AS 'ERROR_NUMBER';
   END CATCH

输出:

  ERROR_NUMBER 3013

请有人帮我捕获错误号 4214

【问题讨论】:

  • 嗨,欢迎来到 StackOverflow。在我看来,好像 2 个错误消息是按顺序出现的,第一个实际上纯粹是一个诊断,所以当你拿起 error_number() 时,你总是会得到 3013。你不能只监视那个?

标签: tsql error-handling sql-server-2012 database-administration database-backups


【解决方案1】:

不确定错误编号本身对您有多重要,但您可以尝试以下方法:

DECLARE @inputFile NVARCHAR(100);
DECLARE @Exists int;

SET @inputFile = 'C:\DBADMIN\Backup\TESTDB_LOG.BAK' 
EXEC master.dbo.xp_fileexist @inputFile, @Exists OUTPUT

BEGIN TRY 
   IF @Exists = 1
      BACKUP LOG [TESTDB] TO DISK =  @inputFile
   ELSE
   EXEC sys.sp_addmessage @msgnum = 54214,@severity = 16,@msgtext  = N'BACKUP LOG cannot be performed because there is no current database backup.',@lang = 'us_english';   
     RAISERROR (54214,16,1)
   END TRY
   BEGIN CATCH
      SELECT ERROR_NUMBER() AS 'ERROR_NUMBER',  ERROR_MESSAGE() as 'ERROR_MESSAGE';
   END CATCH

如果文件不存在,ELSE 语句会为您生成自定义错误。除了引发错误之外,您还可以在此处执行一些不同的操作。希望对您有所帮助。

【讨论】:

    【解决方案2】:

    SQL 错误 4214 主要发生在您从未进行完整备份并且您尝试仅备份日志时。要解决此问题,请执行完整的数据库备份,然后尝试进行日志备份。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-30
      • 1970-01-01
      • 2017-05-19
      • 2016-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多