SQL Server 在缺乏文件组的状况下如何还原数据库html
1、背景数据库
我有一个A库,因为a,b两张表的数据量比较大,因此对表进行分区;在把A库迁移到一个新的集群上去,我只备份了A库的主分区过去进行还原为B库(主分区的备份还原可参考:SQL Server 维护计划备份主分区 和 主分区备份与还原),为了对a,b表进新的数据,我修改了a,b表名,在B库新建了两张不分区的a,b表;spa
这样运行都没有什么问题的,可是在一次我分离了数据库B,拷贝了mdf和ldf文件,如今想使用mdf和ldf还原为B库的时候出错了;code
2、解决过程htm
在使用SSMS的还原功能进行还原的时候出现了下面的错误:blog
(图1:找不到文件组)ip
(图2:手动建立一个ndf文件报错)get
在还原的时候须要指定ndf文件的目录,可是因为在备份的时候咱们只备份了主文件,因此是没有ndf文件的(注意:表结构是在主文件组的,因此这里会显示ndf文件信息),这个时候想经过删除列表中ndf,却发现删除按钮不可用,如图1所示;it
在对应的目录中手动建立一个ndf文件,出现了图2的错误,由于没法读取到文件头;ast
难道就没法还原数据库B了嘛?不要着急,咱们把上面的操做生成SQL代码,把不须要的ndf文件删除掉,剩下相似下面的SQL代码,执行,还原了数据库B!
USE [master] GO CREATE DATABASE [QQMonitor] ON ( FILENAME = N'E:\DBBackup\DBName.mdf' ), ( FILENAME = N'E:\DBBackup\DBName_log.ldf' ) FOR ATTACH GO
或者本身直接写代码,例如如下的代码:
--还原主分区 RESTORE DATABASE [TestAnt] FILEGROUP='PRIMARY' FROM DISK='F:\DBBackup\Ant_Primary\Ant_Primary_20110916000001.bak' WITH FILE = 1, MOVE N'Barefoot.Ant' TO N'F:\DBBackup\TestAnt.mdf', MOVE N'Barefoot.Ant_log' TO N'F:\DBBackup\TestAnt_log.ldf', RECOVERY,REPLACE, STATS = 10 GO