資料庫緊急恢復過程

2021-08-16 08:32:23 字數 3535 閱讀 9452

當資料庫失效時,請記錄下當前時間,然後遵循下面步驟進行恢復。

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'

)logon(

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'

總結:還是定時備份好。。。

- the end -

資料庫緊急恢復過程

當資料庫失效時,請記錄下當前時間,然後遵循下面步驟進行恢復。1.備份資料庫 成功,使用備份檔案還原資料庫,轉第2步。失敗,轉第3步。2.還原資料庫 在另乙個伺服器操作 1 declare backup device nvarchar 128 log backup device nvarchar 12...

SQL Server 緊急狀態下的資料庫恢復

背景 由於伺服器硬碟損壞,伺服器異常關機。重新進入後,資料庫為質疑狀態。資料庫名字上面有個感嘆號,連線不了 第一種 1 在伺服器上停掉出問題的資料庫服務,把.mdf資料庫檔案和.ldf日誌檔案拷貝至本地。2 本地新建乙個同名資料庫,找到檔案位址,停掉sql服務後。把.mdf檔案刪掉 可以也把.ldf...

Oracle資料庫冷備份恢復過程

過程如下 通過v controlfile檢視控制檔案,通過v logfile檢視重做日誌檔案,通過v datafile檢視資料檔案,發現他們都處於同一資料夾中i oracle oradata test中,索性都複製到另一台機器的e oracle oradata test中,複製之前shutdown系...