如果备份来自不同版本的SQL时,逻辑文件名匹配时使用WITH替换(以避免使用移动)是否会失败?我有来自SQL 2008的备份,但是当我试图在SQL 2012文件夹上使用WITH恢复它时,尽管数据库备份和我要替换的数据库上的逻辑文件名匹配,但它没有给我提供‘目录查找’错误。
发布于 2014-08-09 13:11:14
这就是我所找到的为什么文件自动定位在SQL 2012中不能工作的答案。我不认为这与SQL 2008的备份有任何关系。
在SQL Server 2012中,在恢复不显示每个文件的目标物理位置的完整备份子句期间,在现有数据库的基础上,文件自动定位算法要求:不仅备份中声明的文件与现有数据库中的任何给定文件之间的逻辑名称匹配,还需要它们的文件GUID、文件ID和创建LSN必须匹配。如果这些属性中的任何一个不匹配,则用于该逻辑文件的物理位置是存储在回溯中的位置。实现这个额外的需求是为了修复我刚刚公开的最后一个场景,它被认为是一个缺陷。
这是取自MSDN的文章:链接。
发布于 2014-08-08 21:49:43
WITH REPLACE指的是数据库,而不是它的文件(尽管我猜它的效果是一样的)。
如果您有与现有数据库匹配的文件名,并且试图将其还原为不同的数据库,则需要使用WITH MOVE来防止Server试图覆盖现有文件(它将无法这样做)。
但是,在您的情况下,几乎可以肯定的是,您2008年的数据库备份中的数据文件位于如下路径:
C:\...\MSSQL.100\...\Data\但在Server 2012机器上,该文件夹不存在;它将是:
C:\...\MSSQL.110\...\Data\(如果两者都是命名实例,则差异可能更明显。)
在这一点上,您有两个选择:
RESTORE FILELISTONLY确定备份所期望的文件夹(S),并创建这些文件夹,确保Server服务帐户具有读/写/修改权限。WITH MOVE并将文件放在一个有效的位置。第三个非常愚蠢的选项是,您可以返回到2008服务器,将数据库移动到与新服务器上存在的文件夹相匹配的文件夹,进行新的备份,然后恢复。不要这样做。别再试图避免输入WITH MOVE.
https://dba.stackexchange.com/questions/73541
复制相似问题