none
怎样捕捉备份数据库失败的原因 RRS feed

  • 问题

  • 备份在出错时好像生成了两条错误消息.用error_message()好像只能捕捉到'正在异常终止。'这个没有什么意义的消息.
    备份失败的原因有离线\空间不足\全文索引失败等多种,这个具体的失败的错误消息怎么捕捉呢?

     

    create database test111
    
    alter database test111 set offline
    
    backup database test111 to disk='f:\test111.bak'
    
    begin try
    backup database test111 to disk='f:\test111.bak'
    end try
    begin catch
    print error_message()
    end catch
    
    alter database test111 set online
    
    drop database test111<br/>
    <br/>
    /*<br/>
    <br/>
    消息 942,级别 14,状态 4,第 1 行<br/>
    由于数据库 'test111' 离线,无法打开该数据库。<br/>
    消息 3013,级别 16,状态 1,第 1 行<br/>
    BACKUP DATABASE 正在异常终止。<br/>
    <br/>
    BACKUP DATABASE 正在异常终止。<br/>
    <br/>
    */
    


    hello
    2010年10月26日 1:56

答案

  • TRY CATCH 中的 ERROR_MESSAGE() 确实有这个现象, 这种错误现象只能抓到一条, 比如修改表结构, 有时候也是两条错误, TRY CATCH 中只看得到一条

    这个应该算是TRY CATCH机制设计上的问题.

    2010年10月26日 4:18

全部回复

  • @@error 只能返回当前语句执行的错误号,也就 error_message() 没办法看到你见到实际错误的内容。不过你可以预先执行一个测试语句来得到详细错误内容。

    参考下面的代码:

    begin try
    
    use db_Test
    
    backup database db_test to disk='c:\db_test.bak'
    end try
    begin catch
    SELECT 
        ERROR_NUMBER() AS ErrorNumber
        ,ERROR_SEVERITY() AS ErrorSeverity
        ,ERROR_STATE() AS ErrorState
        ,ERROR_LINE () AS ErrorLine
        ,ERROR_PROCEDURE() AS ErrorProcedure
        ,ERROR_MESSAGE() AS ErrorMessage
        ,@@ERROR
    
    end catch
    
    这里 预先执行了use db
    family as water
    2010年10月26日 2:38
  • 光是use 解决不了问题吧? 前面说过,出错原因有很多,有离线\空间不足\全文索引失败等多种

    像空间不足,全文索引失效等这些用 use db 是不会出错的吧

     

    全文索引也经常会出错,如

    消息 9987,严重性 16,状态 1,第 159 行: 不允许备份全文目录 'testfulltext',因为它没有联机。请查看错误日志文件以了解全文目录脱机的原因,然后将其联机。也可以使用 FILEGROUP 或 FILE 子句执行 BACKUP,以使所选内容仅限于联机数据。 [SQLSTATE 42000]

     

    这个用 use db 也是检测不出来的吧


    hello
    2010年10月26日 3:29
  • @@error 只能返回当前语句执行的错误号,也就 error_message () 没办法看到你见到实际错误的内容

     

     

    backup database 其实只是一条语句,怎么有两个错误消息呢? (试过即使先use dbfulltext 成功后再执行backup也会有两条错误信息,仍然捕捉不到)


    hello
    2010年10月26日 3:32
  • TRY CATCH 中的 ERROR_MESSAGE() 确实有这个现象, 这种错误现象只能抓到一条, 比如修改表结构, 有时候也是两条错误, TRY CATCH 中只看得到一条

    这个应该算是TRY CATCH机制设计上的问题.

    2010年10月26日 4:18
  • 奇怪的现象
    hello
    2010年10月29日 5:52