2013年11月6日 星期三

[MSSQL] 備份組包含現有的xxx資料庫以外的資料庫

今天玩資料庫遇到比較特別的情況,卡了一下,還不小心把人家的db搞掛了,還好重開就好了。
需求很簡單:我要從A機器裡的db,複製到B機器裡。
其實就是備份/還原嘛~聽起來沒什麼了不起。

但是DBMS就是一種會把聽起來很簡單的事情搞得很複雜的東西。(好啦,我知道「備份/還原」都是被抽象化的結果,裡面藏著很複雜的邏輯。)



備份:
備份上自己沒遇到什麼問題。
在SQL Server上要備份下來的資料庫上面按右鍵→工作→備份。會跑出下面那個畫面。


備份路徑稍微注意一下,以自己方便(或習慣)為主。
出來的備份檔應該都會是.bak檔,然後是放在A機器裡。


接著,把這個.bak檔複製到B機器裡。這個別問我啊,隨身碟、檔案分享、FTP…什麼都好。




還原:
還原的部分就沒這麼順遂了。
同樣的,在B機器的SQL Server上要還原的資料庫上按右鍵→工作→還原→資料庫。會跑出下面的畫面。


設定一下.bak檔的路徑之後就開始了,期待它完成,我今天的工作就結束了。
問題就是他媽的沒這麼爽,才按下去它就跑出一個Exception,上面寫「備份組包含現有的xxx資料庫以外的資料庫備份問題」之類的訊息。



我太懶了,我懶得寫找解法碰釘子的過程,直接寫怎麼處理。
1. 先把DB弄離線。

ALTER DATABASE [dbname] SET offline

2. 執行下列指令:
restore database DBName
from disk = 'D:\DBName.bak'
with
move 'DBName' to 'C:\Program Files\...\xxx.mdf', 
move 'DBName_log' to 'C:\Program Files\...\xxx_log.LDF',
NoRecovery,
Replace
go

留意一下.mdf和.ldf檔路徑就好。
如果執行成功了,就會出現「幾秒內成功處理了 多少頁(0.000 MB/sec)。

3. 再把DB弄上線。
ALTER DATABASE [dbname] SET online

4. 還原!
資料庫上按右鍵→工作→還原→資料庫,.bak路徑設好、勾還原,按確定。

5. 忐忑不安地等待,搞定就開心~ 搞不定就GG。

2 則留言:

Unknown 提到...

你的第二步驟不就還原DB了?
為什麼還要最後還原那個步驟?

Unknown 提到...

第二步做完之後只會在DB上面寫正在還原,不會真的完成(其實我沒讓第二個步驟很久,也許真的正在跑)
要把整個流程跑完,我是還加了後面弄上線和還原的步驟