数据库紧急恢复过程
當(dāng)數(shù)據(jù)庫失效時,請記錄下當(dāng)前時間,然后遵循下面步驟進行恢復(fù)。1. 備份數(shù)據(jù)庫
成功,使用備份文件還原數(shù)據(jù)庫,轉(zhuǎn)第2步。
失敗,轉(zhuǎn)第3步。2. 還原數(shù)據(jù)庫(在另一個服務(wù)器操作)
(1)DECLARE @backup_device nvarchar(128), @log_backup_device nvarchar(128)
set @backup_device = N'F:/database/myDb.bak'restore database MyDbfrom disk = @backup_device
WITH REPLACE , file=5(2)根據(jù)事務(wù)日志來恢復(fù)到具體某個時間點
--首先基于一個完全備份點開始做事務(wù)日志還原,注意[NORECOVERY]參數(shù)RESTORE database (數(shù)據(jù)庫名) from 完全備份設(shè)備名with REPLACE,NORECOVERY,MOVE 'MyDb' TO 'D:/FMyDb_0606.mdf',MOVE 'FMyDb_Log' TO 'D:/FMyDb_Log_0606.ldf'--開始事務(wù)日志A.查看事務(wù)日志點:RESTORE HEADERONLY from disk='事務(wù)日志的備份的文件完全路徑或備份設(shè)備名'B.開始恢復(fù)restore LOG 數(shù)據(jù)庫名from事務(wù)日志備份設(shè)備名with FILE=1, NORECOVERYrestore LOG 數(shù)據(jù)庫名from事務(wù)日志備份設(shè)備名with FILE=2, NORECOVERYrestore LOG 數(shù)據(jù)庫名from事務(wù)日志備份設(shè)備名with FILE=3,NORECOVERY --倒數(shù)第二個備份日志restore LOG 數(shù)據(jù)庫名from事務(wù)日志備份設(shè)備名with FILE=4,RECOVERY --最后一個備份日志執(zhí)行失敗的話,轉(zhuǎn)下一步。3. 復(fù)制數(shù)據(jù)庫mdb, ldf文件
執(zhí)行 net stop mssqlserver 停止SQL Server服務(wù),復(fù)制數(shù)據(jù)庫mdb, ldf文件。
成功復(fù)制2個文件已經(jīng)其他文件組,轉(zhuǎn)第4步。
只能復(fù)制mdb文件,轉(zhuǎn)第5步。
只能復(fù)制ldf文件,轉(zhuǎn)第8步。4. 附加數(shù)據(jù)庫(數(shù)據(jù)庫文件與日志文件)
CREATE DATABASE [MyDb2] ON
( FILENAME = N'F:/back/MyDb.mdf' )
,( FILENAME = N'F:/back/MyDb_log.ldf' )FOR ATTACH如果出現(xiàn)失敗,轉(zhuǎn)第5步。5. 附加數(shù)據(jù)庫(只有數(shù)據(jù)庫文件)
CREATE DATABASE [MyDb2] ON
( FILENAME = N'F:/back/MyDb.mdf' )
FOR ATTACH_REBUILD_LOG
如果失敗,在SQL2000下,可以嘗試(2005版本沒有該功能)
dbcc rebuild_log('MyDb','F:/MyDb_log.ldf')
轉(zhuǎn)第6步。
當(dāng)服務(wù)器因為硬件失敗導(dǎo)致數(shù)據(jù)庫失效時,可能出現(xiàn)以下錯誤,轉(zhuǎn)第6步:
文件激活失敗。物理文件名稱'f:/database/MyDb/MyDb_log.ldf'可能不正確。
由于數(shù)據(jù)庫沒有完全關(guān)閉,無法重新生成日志。6. 強制附加數(shù)據(jù)庫
a) 新建一個同名數(shù)據(jù)庫
CREATE DATABASE [MyDb_temp]ON (NAME=MyDb_temp, FILENAME = N'F:/temp/MyDb.mdf' )LOG ON (NAME=MyDb_temp _Log, FILENAME = N'F:/temp/MyDb_log.ldf')
b) 停止SqlServer
c) 將備份的數(shù)據(jù)庫覆蓋F:/temp/MyDb.mdf
d) 啟動SqlServer,(MyDb_temp將變?yōu)椴豢捎?#xff09;
查看數(shù)據(jù)庫狀態(tài)
SELECT * FROM SYS.DATABASES
SELECT * FROM sys.database_recovery_status
e) 將數(shù)據(jù)庫改為緊急恢復(fù)模式
ALTER DATABASE MyDb SET EMERGENCY
f) 修復(fù)數(shù)據(jù)庫
DBCC CheckDB ('MyDb')
g) 將數(shù)據(jù)庫改為但用戶模式
ALTER DATABASE MyDb SET SINGLE_USER
h) 再帶參數(shù)修復(fù)數(shù)據(jù)庫
DBCC CheckDB ('MyDb', REPAIR_REBUILD )
i) 將數(shù)據(jù)庫改為正常模式
ALTER DATABASE MyDb SET ONLINE
如果無法創(chuàng)建數(shù)據(jù)庫日志,i步驟將失敗,這時候如果能看到數(shù)據(jù)庫表,和進行Select操作,轉(zhuǎn)第7步。7. 提取數(shù)據(jù)庫數(shù)據(jù)
a) 創(chuàng)建一個新的臨時數(shù)據(jù)庫
b) 導(dǎo)出數(shù)據(jù)
執(zhí)行 SELECT 'SELECT * INTO MyDb2..'+name+' FROM '+ name FROM sys.objects WHERE TYPE = 'U' AND name!='sysdiagrams'
產(chǎn)生數(shù)據(jù)導(dǎo)出語句,執(zhí)行他們,將數(shù)據(jù)復(fù)制到新數(shù)據(jù)庫
c) 導(dǎo)出存儲過程:待續(xù)
d) 導(dǎo)出觸發(fā)器:待續(xù)
e) 導(dǎo)出函數(shù):待續(xù)
f) 導(dǎo)出自定義數(shù)據(jù)類型:待續(xù)
g) 導(dǎo)出用戶:待續(xù)
h) 將新數(shù)據(jù)庫還原到目標服務(wù)器
備份/還原這個新建的數(shù)據(jù)庫到目標服務(wù)器
i) 修復(fù)孤立用戶(SQL 2005 版)
a) EXEC sp_change_users_login 'Auto_Fix', 'GameServer';
b) EXEC sp_change_users_login 'Auto_Fix', 'backoffice';
c) EXEC sp_change_users_login 'Auto_Fix', 'adminsoft';
j) 修復(fù)數(shù)據(jù)庫擁有者
EXEC sp_changedbowner 'sa'***總結(jié):還是定時備份好。。。***
總結(jié)
- 上一篇: ehviewer_EhViewer(E绅
- 下一篇: Mysql设计层优化整理总结