自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

淺析SQL Server數(shù)據(jù)庫在項(xiàng)目中的備份與還原

數(shù)據(jù)庫 SQL Server
筆者根據(jù)近一段時(shí)間所學(xué)的數(shù)據(jù)庫知識編寫了這篇關(guān)于SQL Server如何在項(xiàng)目中實(shí)現(xiàn)備份與還原的文章,與大家相互探討、學(xué)習(xí)。

筆者根據(jù)近一段時(shí)間所學(xué)的數(shù)據(jù)庫知識編寫了這篇關(guān)于SQL Server如何在項(xiàng)目中實(shí)現(xiàn)備份與還原的文章,與大家相互探討、學(xué)習(xí)。

--備份的設(shè)備有2種(臨時(shí)設(shè)備和***設(shè)備) 注意:默認(rèn)下的備份類型是完整備份  

--***種:

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

--臨時(shí)設(shè)備

/*如果這里不指定明確路徑的話(如:backup database company to disk='backup\1.bak'),那么備份的數(shù)據(jù)庫將會自動備份到系統(tǒng)指定的目錄下:

C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup*/

--第二種:

/****步首先建立***備份設(shè)備 (系統(tǒng)自帶的存儲過程)在master 數(shù)據(jù)庫中就會找到如圖1: 

 */

--執(zhí)行語句如:

  1. exec sp_addumpdevice 'disk','disk_company','D:\2.bak' 

--***設(shè)備

--執(zhí)行結(jié)果就會出現(xiàn)如圖2:

--多了一個備份設(shè)備:disk_company

--第二步:

  1. backup database company to disk_company with noinit  

--默認(rèn)表示追加(不覆蓋)

 --好了  備份完成 ! 

--現(xiàn)在我來還原數(shù)據(jù)庫(我用的是***種方法備份的,所以我要***種方法來還原) 。

--原來的數(shù)據(jù)如圖3:

--經(jīng)過我手動刪除幾個表后的數(shù)據(jù)庫如圖4:

 

--執(zhí)行語句:

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

--注意備份到哪里去就要從還原哪里來

--執(zhí)行后會出現(xiàn)什么呢?請看錯誤消息:

  1. /*消息 3159,級別 16,狀態(tài) 1,第 1 行  
  2. 尚未備份數(shù)據(jù)庫 "company" 的日志尾部。如果該日志包含您不希望丟失的工作,請使用 BACKUP LOG WITH NORECOVERY 備份該日志。  
  3. 請使用 RESTORE 語句的 WITH REPLACE 或 WITH STOPAT 子句來只覆蓋該日志的內(nèi)容。  
  4. 消息 3013,級別 16,狀態(tài) 1,第 1 行  
  5. RESTORE DATABASE 正在異常終止。*/ 


--為什么會出現(xiàn)這種錯誤呢  我們可以從錯誤的消息中找到解決方案!

--我們?nèi)タ纯催@個數(shù)據(jù)庫的恢復(fù)模式如圖5:

 

--因?yàn)槿鐖D的恢復(fù)模式是 :完整; 所以它的功能是將所有事務(wù)都寫入日志,把所有數(shù)據(jù)庫文件的都還原

--方案一:我現(xiàn)在只是還原的數(shù)據(jù)庫文件 并沒有備份日志文件 所以我再去備份日志文件

  1. backup log Company to disk='d:\backup\2.bak'  

--備份日志文件

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

--再去還原數(shù)據(jù)庫

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

--這步可有可無

--執(zhí)行的結(jié)果為:如圖6:

 

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

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

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

--執(zhí)行語句如下:

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

--執(zhí)行成功

  1. /*已為數(shù)據(jù)庫 'Company',文件 'Company_Data' (位于文件 1 上)處理了 224 頁。  
  2. 已為數(shù)據(jù)庫 'Company',文件 'Company_Log' (位于文件 1 上)處理了 5 頁。  
  3. RESTORE DATABASE 成功處理了 229 頁,花費(fèi) 0.225 秒(8.319 MB/秒)。*/ 

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

  1. /*  
  2.    恢復(fù)模式                說明  
  3.    簡單           不用備份的事務(wù)日志,即可還原  
  4.                   用于小型數(shù)據(jù)庫和不經(jīng)常更改的數(shù)據(jù)庫  
  5.    完整           所有事務(wù)都被記錄到日志中  
  6.                   保留所有日志,直到事務(wù)日志備份  
  7.                   用于生產(chǎn)數(shù)據(jù)庫  
  8.  大容量日志       完整恢復(fù)模式的補(bǔ)充   
  9.                   不將大容量日志操作寫入日志  
  10. */ 

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

--如圖7:

--我直接執(zhí)行還原的代碼

  1. restore database Company from disk='d:\backup\1.bak' 
  1. /*執(zhí)行結(jié)果:  
  2. 已為數(shù)據(jù)庫 'Company',文件 'Company_Data' (位于文件 1 上)處理了 224 頁。  
  3. 已為數(shù)據(jù)庫 'Company',文件 'Company_Log' (位于文件 1 上)處理了 5 頁。  
  4. RESTORE DATABASE 成功處理了 229 頁,花費(fèi) 0.224 秒(8.356 MB/秒)。*/ 

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

--但是這用到項(xiàng)目中數(shù)據(jù)庫正在使用的話是不成功的 ,它具有排它性 !

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

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

--創(chuàng)建存儲過程 killspid   

  1. create    proc    killspid    (@dbname    varchar(20))        
  2. as        
  3. begin        
  4. declare    @sql    nvarchar(500)        
  5. declare    @spid    int        
  6. set    @sql='declare    getspid    cursor    for            
  7. select    spid    from    sysprocesses    where    dbid=db_id('''+@dbname+''')'        
  8. exec    (@sql)        
  9. open    getspid        
  10. fetch    next    from    getspid    into    @spid        
  11. while    @@fetch_status    <    >-1        
  12. begin        
  13. exec('kill    '+@spid)        
  14. fetch    next    from    getspid    into    @spid        
  15. end        
  16. close    getspid        
  17. deallocate    getspid        
  18. end       
  19.  
  20. GO 

--說明:

--1.此存儲過程應(yīng)寫在Master中;

--2.以上代碼就是解決因?yàn)閿?shù)據(jù)庫正在使用,所以未能獲得對數(shù)據(jù)庫的排它訪問權(quán)的問題,不然系統(tǒng)有時(shí)會報(bào)錯;

我附帶一個簡單的備份還原的例子 (ASP.NET +SQL SERVER 2005 的運(yùn)行環(huán)境)

http://files.cnblogs.com/qinpengming/BackUpDBSolution.rar

有時(shí)間我會寫一篇關(guān)于怎樣還原到指定時(shí)間點(diǎn)的例子 我會采用完整備份 差異備份 日志備份  我也會把原數(shù)據(jù)庫文件也損壞掉 再去還原的! !?。。。。。。。?!

原文出處:http://www.cnblogs.com/qinpengming/archive/2011/03/07/struggle.html

 【編輯推薦】

  1. 淺析SQL Server 2008中的代碼安全之一:存儲過程加密與安全上下文
  2. 淺析SQL Server 2008中的代碼安全之二:DDL觸發(fā)器與登錄觸發(fā)器
  3. 淺析SQL Server 2008中的代碼安全之三:通過PassPhrase加密
  4. SQL Server安全解析
  5. sql server安全的兩層模型

 

責(zé)任編輯:艾婧 來源: 博客園
相關(guān)推薦

2010-07-06 15:07:37

SQL Server

2011-03-24 09:24:08

SQL Server數(shù)還原

2013-05-08 10:01:55

SQL Server 數(shù)據(jù)備份備份與還原

2010-09-14 09:53:52

sql server還

2011-03-24 09:07:11

SQL Server數(shù)備份

2009-08-05 09:38:28

SQL Server數(shù)

2021-05-17 06:57:34

SQLServer數(shù)據(jù)庫

2010-07-08 11:05:14

SQL Server數(shù)

2010-07-06 09:08:07

SQL server差

2015-08-21 10:40:10

SQL Server備份還原

2010-06-17 10:02:12

SQL Server數(shù)

2011-01-19 09:51:25

SQL Server

2010-07-08 11:09:54

SQL Server數(shù)

2011-08-03 16:02:25

2010-05-17 15:58:05

MySQL Admin

2009-09-04 17:29:01

C#創(chuàng)建SQL Ser

2011-05-06 16:36:48

SQL備份還原

2010-07-08 11:23:41

SQL Server還

2011-03-15 09:55:07

SQL Server2數(shù)據(jù)庫崩潰還原數(shù)據(jù)庫

2010-04-09 15:35:28

Oracle數(shù)據(jù)庫
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號