??
數(shù)據(jù)庫緊急恢復(fù)過程
當(dāng)數(shù)據(jù)庫失效時,請記錄下當(dāng)前時間,然后遵循下面步驟進(jìn)行恢復(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
?MyDb
????
from
?
disk
?
=
?@backup_device
WITH
?
REPLACE
?
,
?
file
=
5
(2)根據(jù)事務(wù)日志來恢復(fù)到具體某個時間點(diǎn)
--
首先基于一個完全備份點(diǎn)開始做事務(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ù)日志點(diǎn)
:RESTORE HEADERONLY?
from
?
disk
=
'
事務(wù)日志的備份的文件完全路徑或備份設(shè)備名
'
?
??? B
.
開始恢復(fù)
????
restore
?
LOG
?
數(shù)據(jù)庫名
from
事務(wù)日志備份設(shè)備名
with
?
FILE
=
1
,
?NORECOVERY
????
restore
?
LOG
?
數(shù)據(jù)庫名
from
事務(wù)日志備份設(shè)備名
with
?
FILE
=
2
,
?NORECOVERY
????
restore
?
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ù)器因?yàn)橛布?dǎo)致數(shù)據(jù)庫失效時,可能出現(xiàn)以下錯誤,轉(zhuǎn)第6步:
文件激活失敗。物理文件名稱'f:\database\MyDb\MyDb_log.ldf'可能不正確。
由于數(shù)據(jù)庫沒有完全關(guān)閉,無法重新生成日志。
?
6.
?????????
強(qiáng)制附加數(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)椴豢捎茫?
查看數(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ù)庫表,和進(jìn)行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ù)庫還原到目標(biāo)服務(wù)器
備份/還原這個新建的數(shù)據(jù)庫到目標(biāo)服務(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é):
還是定時備份好
。。。
本文轉(zhuǎn)自CSDN:
http://blog.csdn.net/greenery/archive/2008/06/20/2570242.aspx
,非本人原創(chuàng).
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
