??
數據庫緊急恢復過程
當數據庫失效時,請記錄下當前時間,然后遵循下面步驟進行恢復。
?
1.
?????????
備份數據庫。
成功,使用備份文件還原數據庫,轉第2步。
失敗,轉第3步。
?
2.
?????????
還原數據庫(在另一個服務器操作)
(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)根據事務日志來恢復到具體某個時間點
--
首先基于一個完全備份點開始做事務日志還原
,
注意
[NORECOVERY]
參數
????
RESTORE
?
database
?
(
數據庫名
)
?
from
?
完全備份設備名
with
?
REPLACE
,
NORECOVERY
,
??? MOVE?
'MyDb'
?
TO
?
'D:\FMyDb_0606.mdf'
,
??? MOVE?
'FMyDb_Log'
?
TO
?
'D:\FMyDb_Log_0606.ldf'
?
????
--
開始事務日志
??? A
.
查看事務日志點
:RESTORE HEADERONLY?
from
?
disk
=
'
事務日志的備份的文件完全路徑或備份設備名
'
?
??? B
.
開始恢復
????
restore
?
LOG
?
數據庫名
from
事務日志備份設備名
with
?
FILE
=
1
,
?NORECOVERY
????
restore
?
LOG
?
數據庫名
from
事務日志備份設備名
with
?
FILE
=
2
,
?NORECOVERY
????
restore
?
LOG
?
數據庫名
from
事務日志備份設備名
with
?
FILE
=
3
,
NORECOVERY???
--
倒數第二個備份日志
????
restore
?
LOG
?
數據庫名
from
事務日志備份設備名
with
?
FILE
=
4
,
RECOVERY?
--
最后一個備份日志
?
?
執行失敗的話,轉下一步。
?
3.
?????????
復制數據庫mdb, ldf文件。
執行 net stop mssqlserver 停止SQL Server服務,復制數據庫mdb, ldf文件。
成功復制2個文件已經其他文件組,轉第4步。
只能復制mdb文件,轉第5步。
只能復制ldf文件,轉第8步。
?
4.
?????????
附加數據庫(數據庫文件與日志文件)
CREATE
?
DATABASE
?[MyDb2]?
ON
(
?
FILENAME
?
=
?N
'F:\back\MyDb.mdf'
?
)
,(
?
FILENAME
?
=
?N
'F:\back\MyDb_log.ldf'
?
)
?
FOR
?ATTACH
如果出現失敗,轉第5步。
?
5.
?????????
附加數據庫(只有數據庫文件)
CREATE
?
DATABASE
?[MyDb2]?
ON
(
?
FILENAME
?
=
?N
'F:\back\MyDb.mdf'
?
)
FOR
?ATTACH_REBUILD_LOG
如果失敗,在SQL2000下,可以嘗試(2005版本沒有該功能)
dbcc?
??rebuild_log(
'MyDb'
,
'F:\MyDb_log.ldf'
)??
轉第6步。
當服務器因為硬件失敗導致數據庫失效時,可能出現以下錯誤,轉第6步:
文件激活失敗。物理文件名稱'f:\database\MyDb\MyDb_log.ldf'可能不正確。
由于數據庫沒有完全關閉,無法重新生成日志。
?
6.
?????????
強制附加數據庫
a)
?????????
新建一個同名數據庫
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)
?????????
將備份的數據庫覆蓋
F:\temp\MyDb.mdf
d)
?????????
啟動SqlServer,(
MyDb_temp
將變為不可用)
查看數據庫狀態
SELECT?
*?
FROM?
SYS.DATABASES
SELECT?
*?
FROM?
sys.database_recovery_status
?
e)
?????????
將數據庫改為緊急恢復模式
ALTER
???
DATABASE
?? MyDb???
SET
?? EMERGENCY
f)
???
修復數據庫
DBCC
?CheckDB?
(
'MyDb'
)
g)
?????????
將數據庫改為但用戶模式
ALTER
???
DATABASE
?? MyDb???
SET
?? SINGLE_USER
h)
?????????
再帶參數修復數據庫
DBCC
?CheckDB?
(
'MyDb'
,
?? REPAIR_REBUILD???
)
i)
???????????
將數據庫改為正常模式
ALTER
???
DATABASE
?? MyDb???
SET
?? ONLINE
如果無法創建數據庫日志,i步驟將失敗,這時候如果能看到數據庫表,和進行Select操作,轉第7步。
?
7.
?????????
提取數據庫數據
a)
???
創建一個新的臨時數據庫
b)
???
導出數據
執行?
SELECT?
'SELECT * INTO MyDb2..'
+
name
+
' FROM '
+?
name?
?
FROM?
sys.objects?
WHERE?
TYPE =?
'U'?
AND name
!=
'sysdiagrams'
產生數據導出語句,執行他們,將數據復制到新數據庫
c)
???
導出存儲過程:
待續
d)
???
導出觸發器:
待續
e)
???
導出函數:
待續
f)
???
導出自定義數據類型:
待續
g)
???
導出用戶:
待續
h)
???
將新數據庫還原到目標服務器
備份/還原這個新建的數據庫到目標服務器
i)
???
修復孤立用戶(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)
???????????
修復數據庫擁有者
EXEC?
sp_changedbowner?
'sa'
?
?
總結:
還是定時備份好
。。。
本文轉自CSDN:
http://blog.csdn.net/greenery/archive/2008/06/20/2570242.aspx
,非本人原創.
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

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