新聞中心
之前已經(jīng)為大家介紹了SQL Server數(shù)據(jù)庫的還原、SQL Server數(shù)據(jù)庫的備份,下文將繼續(xù)為大家?guī)黻P于SQL Server數(shù)據(jù)庫的恢復。

北戴河網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、APP開發(fā)、成都響應式網(wǎng)站建設等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)建站自2013年起到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設就選創(chuàng)新互聯(lián)建站。
--方案一:我現(xiàn)在只是還原的數(shù)據(jù)庫文件 并沒有備份日志文件 所以我再去備份日志文件
backup log Company to disk='d:\backup\2.bak' --備份日志文件
restore database Company from disk='d:\backup\1.bak' --再去還原數(shù)據(jù)庫
restore log Company from disk='d:\backup\2.bak'--這步可有可無
--執(zhí)行的結(jié)果為:如下圖:
--方案二 由于錯誤消息中的提示:請使用 RESTORE 語句的 WITH REPLACE 或 WITH STOPAT 子句來只覆蓋該日志的內(nèi)容。
---消息 3013,級別 16,狀態(tài) 1,第 1 行 所以 我想到去覆蓋掉日志文件 雖然恢復模式是完整的 但是我要覆蓋它 也是可以的
--只是對數(shù)據(jù)庫的操作沒有日志沒有完全還原而已 也是可以的
--執(zhí)行語句如下:
restore database Company from disk='d:\backup\1.bak' WITH REPLACE
--執(zhí)行成功
/*已為數(shù)據(jù)庫 'Company',文件 'Company_Data' (位于文件 1 上)處理了 224 頁。
已為數(shù)據(jù)庫 'Company',文件 'Company_Log' (位于文件 1 上)處理了 5 頁。
RESTORE DATABASE 成功處理了 229 頁,花費 0.225 秒(8.319 MB/秒)。*/
--方案三:我想了一下 我只是備份了數(shù)據(jù)庫,但是沒有備份日志文件 根據(jù)備份還原的原理
/*
恢復模式 說明
簡單 不用備份的事務日志,即可還原
用于小型數(shù)據(jù)庫和不經(jīng)常更改的數(shù)據(jù)庫
完整 所有事務都被記錄到日志中
保留所有日志,直到事務日志備份
用于生產(chǎn)數(shù)據(jù)庫
大容量日志 完整恢復模式的補充
不將大容量日志操作寫入日志
*/
--所以我修改了這個數(shù)據(jù)庫的屬性中的恢復模式 改為 “簡單”
--如下圖:
#p#
--我直接執(zhí)行還原的代碼
restore database Company from disk='d:\backup\1.bak'
/*執(zhí)行結(jié)果:
已為數(shù)據(jù)庫 'Company',文件 'Company_Data' (位于文件 1 上)處理了 224 頁。
已為數(shù)據(jù)庫 'Company',文件 'Company_Log' (位于文件 1 上)處理了 5 頁。
RESTORE DATABASE 成功處理了 229 頁,花費 0.224 秒(8.356 MB/秒)。*/
--三種還原的解決方案成功
--但是這用到項目中數(shù)據(jù)庫正在使用的話是不成功的 ,它具有排它性 !
--所以我寫了一個存儲過程來解決,這也是很多程序員花了很久才解決的問題
--代碼用法如下 :有附帶的例子下載
--創(chuàng)建存儲過程 killspid
create proc killspid (@dbname varchar(20))
as
begin
declare @sql nvarchar(500)
declare @spid int
set @sql='declare getspid cursor for
select spid from sysprocesses where dbid=db_id('''+@dbname+''')'
exec (@sql)
open getspid
fetch next from getspid into @spid
while @@fetch_status < >-1
begin
exec('kill '+@spid)
fetch next from getspid into @spid
end
close getspid
deallocate getspid
end
GO
--說明:
--1.此存儲過程應寫在Master中;
--2.以上代碼就是解決因為數(shù)據(jù)庫正在使用,所以未能獲得對數(shù)據(jù)庫的排它訪問權的問題,不然系統(tǒng)有時會報錯;
以上就是我要為大家介紹的全部內(nèi)容。希望能夠?qū)Υ蠹矣兴鶐椭?,掌握了上文中介紹的知識點,在大家以后的工作中遇到類似的問題,就能很出色的完成。
【編輯推薦】
- 丟失歸檔日志文件后數(shù)據(jù)庫應當如何恢復
- 如何恢復數(shù)據(jù)庫的內(nèi)容
- 表中出現(xiàn)Block錯誤的恢復方法及具體步驟
分享標題:SQLServer數(shù)據(jù)庫的恢復
文章地址:http://m.5511xx.com/article/djjpihg.html


咨詢
建站咨詢
