程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server數據庫的恢復教程

SQL Server數據庫的恢復教程

編輯:關於SqlServer
 

方案一:我現在只是還原的數據庫文件 並沒有備份日志文件 所以我再去備份日志文件

backup log Company to disk='d:\backup\2.bak' --備份日志文件

restore database Company from disk='d:\backup\1.bak' --再去還原數據庫

restore log Company from disk='d:\backup\2.bak'--這步可有可無

--執行的結果為:如下圖:

 

 

--方案二 由於錯誤消息中的提示:請使用 RESTORE 語句的 WITH REPLACE 或 WITH STOPAT 子句來只覆蓋該日志的內容。

---消息 3013,級別 16,狀態 1,第 1 行 所以 我想到去覆蓋掉日志文件 雖然恢復模式是完整的 但是我要覆蓋它 也是可以的

--只是對數據庫的操作沒有日志沒有完全還原而已 也是可以的

--執行語句如下:

restore database Company from disk='d:\backup\1.bak' WITH REPLACE

--執行成功

/*已為數據庫 'Company',文件 'Company_Data' (位於文件 1 上)處理了 224 頁。

已為數據庫 'Company',文件 'Company_Log' (位於文件 1 上)處理了 5 頁。

RESTORE DATABASE 成功處理了 229 頁,花費 0.225 秒(8.319 MB/秒)。*/
 

--方案三:我想了一下 我只是備份了數據庫,但是沒有備份日志文件 根據備份還原的原理

/*

恢復模式 說明

簡單 不用備份的事務日志,即可還原

用於小型數據庫和不經常更改的數據庫

完整 所有事務都被記錄到日志中

保留所有日志,直到事務日志備份

用於生產數據庫

大容量日志 完整恢復模式的補充

不將大容量日志操作寫入日志

*/

--所以我修改了這個數據庫的屬性中的恢復模式 改為 “簡單”

--如下圖:

 

--我直接執行還原的代碼

restore database Company from disk='d:\backup\1.bak'

/*執行結果:

已為數據庫 'Company',文件 'Company_Data' (位於文件 1 上)處理了 224 頁。

已為數據庫 'Company',文件 'Company_Log' (位於文件 1 上)處理了 5 頁。

RESTORE DATABASE 成功處理了 229 頁,花費 0.224 秒(8.356 MB/秒)。*/

--三種還原的解決方案成功
 

 --但是這用到項目中數據庫正在使用的話是不成功的 ,它具有排它性 !

--所以我寫了一個存儲過程來解決,這也是很多程序員花了很久才解決的問題

--代碼用法如下 :有附帶的例子下載

--創建存儲過程 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.以上代碼就是解決因為數據庫正在使用,所以未能獲得對數據庫的排它訪問權的問題,不然系統有時會報錯;

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved