如何將SQL 2000/2005 Server資料庫備份檔還原到不同的主機
在 SQL2005 下建立一個新的資料庫名為 TestDB產生相關檔案有 TestDB.mdf 與 TestDB_log.ldf 放置在 D:\MSSQLData 目錄下
而想要還原的資料庫的來源是在另一台SQL2000所備份的
其中備份檔共有一個完整備份的資料檔以及兩個交易紀錄備份檔
然後使用 SQL 命令進行還原作業
[code]
RESTORE DATABASE TestDB
FROM disk='D:\backup\TestDB_db_200710280200.BAK'
[/code]
出現下列錯誤訊息
[color=Red]訊息 3159,層級 16,狀態 1,行 1
資料庫 "Emp" 的記錄結尾尚未備份。若您不想遺失其中的內容,請使用 BACKUP LOG WITH NORECOVERY 備份記錄。亦可使用 RESTORE 陳述式的 WITH REPLACE 或 WITH STOPAT 子句,覆寫記錄的內容。
訊息 3013,層級 16,狀態 1,行 1
RESTORE DATABASE 正在異常結束。[/color] 檢查備份檔是否有效,執行下列SQL指令[code]
restore VerifyOnly
from disk='D:\backup\TestDB_db_200710280200.BAK'
[/code]出現下列錯誤訊息
[color=Red]嘗試還原這個備份可能會遭遇儲存空間的問題。後續的訊息將會提供詳細資料。
檔案 "C:\Program Files\Microsoft SQL Server\MSSQL\data\TestDB_Data.MDF" 的目錄查閱失敗,有作業系統錯誤 3(系統找不到指定的路徑。)。
檔案 "C:\Program Files\Microsoft SQL Server\MSSQL\data\TestDB_Log.LDF" 的目錄查閱失敗,有作業系統錯誤 3(系統找不到指定的路徑。)。
檔案 1 上的備份組有效。[/color]
可以用SQL確認備份檔的原始狀況[code]
restore FileListOnly
from disk='D:\backup\TestDB_db_200710280200.BAK'
[/code]執行結果會顯示備份資料庫所包含的檔案清單,檢視清單中的 LogicalName 與 PysicalName 兩個欄位,可以確定備份來源伺服器的路徑與現在要被還原的資料庫的路徑有差異
所以進行還原作業會有上列錯誤 因為要復原的伺服器中的 TestDB 資料庫是新建的可以直接覆寫蓋掉
因此透過下列SQL命令可以進行復原
其中有指定 NoRecovery 就表示還要繼續還原其他備份檔,例如差異備份或交易備份[code]
restore DATABASE TestDB
from disk='D:\backup\TestDB_db_200710280200.BAK'
with
move 'TestDB_Data' to 'D:\MSSQLData\TestDB.mdf',
move 'TestDB_Log' to 'D:\MSSQLData\TestDB_log.ldf'
,NoRecovery
,Replace
go
[/code]繼續還原交易備份檔,但還要繼續還原其他交易備份檔[code]
restore log TestDB
from disk='D:\backup\TestDB_tlog_200710290001.TRN'
with NoRecovery
go
[/code]繼續還原交易備份檔,最後一個不再繼續:[code]
restore log TestDB
from disk='D:\backup\TestDB_tlog_200710300001.TRN'
with Recovery
go
[/code]若是想直接結束還原狀態,可用下列指令:[code]-- 切換資料庫的狀態為:ONLINE。
restore DATABASE TestDB
with Recovery
go
[/code] 另外一個作法就是先建立 TestDB 資料庫將 MDF 與 LDF 的檔案名稱與路徑都對應到錯誤訊息中顯示的路徑,以本例來說路徑如下:
C:\Program Files\Microsoft SQL Server\MSSQL\data\TestDB_Data.MDF
C:\Program Files\Microsoft SQL Server\MSSQL\data\TestDB_Log.LDF
然後用備份檔進行還原資料庫的程序,應該可以順利復原。
接著卸離 TestDB 資料庫後,就可以用檔案總管將 MDF 與 LDF 移動到新的目錄位置
最後再掛載資料庫進來就可以了。
不過硬碟空間不足的話就不能用此招了。 在不同的資料庫主機上還原資料庫備份時用了類似下列指令[code]RESTORE DATABASE [shopdb]
FROM DISK = 'D:\shopdbbackup\shopdbbackupfilename'
WITH
MOVE 'shopdb_Data' TO 'C:\MSSQLData\shopdb_Data.MDF',
MOVE 'shopdb_Log' TO 'C:\MSSQLData\shopdb_Log.LDF',
REPLACE, STATS = 2;
GO
[/code][color=Red]結果碰到這樣的錯誤訊息[/color]
[quote]訊息 3132,層級 16,狀態 1,行 1
媒體集有 2 個媒體家族,但是僅提供 1。必須提供所有成員。
訊息 3013,層級 16,狀態 1,行 1
RESTORE DATABASE 正在異常結束。[/quote]
不要懷疑, 就是備份的媒體檔案不是只有一個, 趕快回去原來備份的主機上找吧.
如果已經刪除的話資料就沒得救了, 因為備份資料會平均分散在每一個媒體, 所以還原時缺一不可喔.
頁:
[1]