首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

SQL Server 資料庫還原實戰:備份還原、附加脫離、單一檔案附加三大法

     編輯:更多程式設計知識

方法一:標準備份/還原 (最推薦、最安全)

GUI:SSMS → 右鍵資料庫 → 工作 → 還原 → 資料庫 → 選取備份裝置/檔案。

T-SQL:

RESTORE DATABASE TestDB
FROM DISK = 'C:\Backup\TestDB.bak'
WITH REPLACE,  -- 覆寫現有資料庫
     MOVE 'TestDB_Data' TO 'C:\Data\TestDB.mdf',
     MOVE 'TestDB_Log'  TO 'C:\Log\TestDB.ldf',
     STATS = 5;  -- 顯示進度

方法二:sp_attach_db / CREATE DATABASE ... FOR ATTACH (適用於 MDF/LDF 檔案完整)

情境:伺服器損壞但資料/記錄檔完好,新伺服器快速掛載。

-- 老式 (已棄用但仍支援)
EXEC sp_attach_db @dbname = 'PubDB',
    @filename1 = 'C:\Data\PubDB.mdf',
    @filename2 = 'C:\Data\PubDB_log.ldf';

-- 新式 (SQL Server 2005+ 推薦)
CREATE DATABASE PubDB ON
    (FILENAME = 'C:\Data\PubDB.mdf'),
    (FILENAME = 'C:\Data\PubDB_log.ldf')
FOR ATTACH;

風險:若資料庫關閉不正常 (Dirty Shutdown),附加可能失敗或進入 SUSPECT 狀態。

方法三:sp_attach_single_file_db (僅有 MDF,無 LDF)

EXEC sp_attach_single_file_db @dbname = 'PubDB',
    @physname = 'C:\Data\PubDB.mdf';

SQL Server 會自動重建記錄檔 (預設 1MB,位於原路徑或預設資料目錄)。注意:未提交的交易將遺失,資料庫可能不一致。

緊急修復:EMERGENCY 模式 + DBCC CHECKDB

ALTER DATABASE CorruptDB SET EMERGENCY;
ALTER DATABASE CorruptDB SET SINGLE_USER;
DBCC CHECKDB('CorruptDB', REPAIR_ALLOW_DATA_LOSS) WITH ALL_ERRORMSGS;
ALTER DATABASE CorruptDB SET MULTI_USER;

最後手段,可能造成資料遺失,務必先複製 MDF/LDF 備份。

選擇指南

情境推薦方法RPO/RTO
定期備份完整、需求點還原RESTORE DATABASERPO=備份頻率, RTO=還原耗時
伺服器遷移、硬體升級、檔案完整CREATE DATABASE ... FOR ATTACHRPO=0 (無資料遺失), RTO=秒級
只有 MDF、LDF 遺失/損壞sp_attach_single_file_dbRPO>0 (未提交交易遺失)
資料庫損壞、無備份EMERGENCY + REPAIR_ALLOW_DATA_LOSSRPO=未知, 風險極高
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved