日志备份失败的捕获错误数

时间:2018-08-24 19:59:46

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

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

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

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

     

消息3013,第16级,状态1,第4行
  备份日志异常终止。

我正在尝试使用以下代码捕获语句的错误号,但无法捕获错误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

2 个答案:

答案 0 :(得分:0)

不确定错误号本身对您的重要性,但是您可以尝试以下方法:

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语句会为您生成一个自定义错误。除了引发错误外,您还可以在此处执行其他操作。希望有帮助。

答案 1 :(得分:0)

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