總網頁瀏覽量

關於我自己

我的相片
人生的必修課是接受無常,人生的選修課是放下執著。

2015年11月25日 星期三

【SQL】【教學】【還原】SQL Server 2008 R2 .bak→.mdf

****************************************
*          電腦環境:Windows 7 64bit                *
*          SQL Server Management Studio版本:2008 R2          *
****************************************


情境:server上的db想複製一份到local端做測試開發用

前工作:server上的db已備份出.bak檔

說明:在SQL Server要作資料庫還原時,需要首先建立一個資料庫(舊的也行總之要先有一個資料庫實體),然後才能可以進行資料庫還原

開始動作:
 1. 開啟SQL Server Management
 2. 在「資料庫」按滑鼠右鍵 > 新建一個資料庫(假設我命名為AC_Manager)
 3. 在「AC_Manager」按滑鼠右鍵 > 工作 > 還原 > 資料庫
 4. 在接下來的畫面選.bak的路徑要還原
 4-1. 發生錯誤備份組包含現有的 '' 資料庫以外的資料庫備份
 5. 在「AC_Manager」按滑鼠右鍵 > 工作 > 還原 > 資料庫

 6. 選到要用來還原的.bak


  5. 切到「選項」,打勾「覆寫現有的資料庫」

 7. 最終完成


4-1. 解法:
 (1) 「資料庫」按滑鼠右鍵 > 新增查詢

 (2) 輸入指令
  '資料庫離線
  ALTER DATABASE [資料庫名稱] SET offline

  restore database 資料庫名稱
  from disk = '.bak的路徑'
  with
  move '資料庫名稱' to '資料庫名稱.mdf的路徑',
  move '資料庫名稱_log' to '資料庫名稱_log.LDF的路徑',
  NoRecovery,
  Replace
 go
 並執行,範例可以看下圖
 執行成功了,就會出現「幾秒內成功處理了 多少頁(0.000 MB/sec)

 (2-1) 顯示(正在還原....) 很久沒進展



 (3) 「資料庫」按滑鼠右鍵 > 新增查詢
   '讓資料庫回到線上
   ALTER DATABASE [資料庫名稱] SET online
   按F5執行

(2-1) 解法:

((1))先查詢卡住的那個資料庫的狀態:select state_desc from sys.databases where name = '資料庫名稱'
顯示RESTORING


((2))使用 REPLACE  選項 (將會遺失 CheckPoint 時間點以外的資料,需謹慎使用)
RESTORE DATABASE PIS_WEBDB
FROM DISK = .bak檔的路徑'
WITH REPLACE, RECOVERY


((2-1))錯誤訊息 5133,層級 16,狀態 1,行 1
檔案 "D:\DataFile\TW_Patents.mdf" 的目錄查閱失敗,有作業系統錯誤 2(系統找不到指定的檔案。)。
訊息 3156,層級 16,狀態 3,行 1
檔案 'TW_Patent' 無法還原到 'D:\DataFile\TW_Patents.mdf'。請使用 WITH MOVE 來識別該檔案的有效位置。
訊息 5133,層級 16,狀態 1,行 1
檔案 "D:\LogFile\TW_Patents_1.LDF" 的目錄查閱失敗,有作業系統錯誤 2(系統找不到指定的檔案。)。
訊息 3156,層級 16,狀態 3,行 1
檔案 'TW_Patent_log' 無法還原到 'D:\LogFile\TW_Patents_1.LDF'。請使用 WITH MOVE 來識別該檔案的有效位置。
訊息 3119,層級 16,狀態 1,行 1
計劃 RESTORE 陳述式的時候識別出問題。先前的訊息可提供詳細資料。
訊息 3013,層級 16,狀態 1,行 1
RESTORE DATABASE 正在異常結束。

RESTORE DATABASE CN_MIX
FROM DISK = '.bak檔路徑'
WITH REPLACE, RECOVERY



((3))再查一次卡住的那個資料庫的狀態:select state_desc from sys.databases where name = '資料庫名稱'
顯示ONLINE

((4))雖然左側(正在還原....)的狀態沒變,重新整理就好了

((2-1))解法:
(((1)))
RESTORE DATABASE CN_MIX
FROM DISK = N'.bak檔路徑'
WITH    
File = 1 ,     
RECOVERY ,     
REPLACE ,    
MOVE 'CN_MIX'
TO N'.mdf檔要擺放的路徑',    
MOVE 'CN_MIX_Log'
TO N'.ldf檔要擺放的路徑',    
STATS = 10







沒有留言:

張貼留言