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