我有三台SQL服务器 ServerA是primay,B是mirror,C是BI server. serverA与serverB之间做mirror,在B上对Mirror DB做snapshot,snapshot DB每小时更新一次(删除,再建) 在C上对B建Link server。现在用SQL语句queryB上的snapshot DB时不时的报错。这个query是每小时自动跑一次,大概每一星期会报错2到3次。
错误信息是:OLE DB provider "SQLNCLI10" for linked server "B" returned message "Deferred prepare could not be completed.".  Database 'DB1' is being recovered. Waiting until recovery is finished.
事实上这个query要连接的数据是DB2,不是DB1,DB2是很正常的,DB1确实在这个query跑的时候是在重建中。 
誰人能解释这个现象是什么引起的? 万分感谢!

解决方案 »

  1.   

    db2 是snapshot,db1 是mirror吧?  
      

  2.   

    DB1和DB2都是snapshot,DB2是每小时更新,DB1是每15分钟更新。要抓的数据是DB2的,在脚本中完全没涉及到DB1。 
      

  3.   

    可能是因为DB1和DB2 来自同一个库的快照,如果另外一个快照在生成过程中 锁定了源库 导致数据无法读取造成的.
      

  4.   

    DB1和DB2不是同一个库的。在B上有10个mirror DB(mirror db1~mirror db10) 都是从不同的源数据库mirror过来。DB1是mirror db10 的snapshot,每15分钟更新,DB2~DB11是mirror db1~mirror db10的snapshot,每小时更新。所有snapshot db的更新都是一个跑完再跑另外一个,不会同时跑。
    BI server 的脚本每小时从DB2~DB11里通过link server抓数据,每次大概跑40分钟。在抓不同的Snapshot DB时都有可能报错,但每次错误提示都是指向DB1(也只有这个DB是在BI的脚本跑得时候有在做更新)