A. SQL如何備份大容量資料庫
資料庫備份介紹
1、備份位置
在SQL Server上,有多種備份位置可以選擇,如本地磁碟,網路磁碟,遠程地址,磁帶等。
各種備份位置均有自己的優點和缺點。
2、邏輯備份設備
在SQL Server上,可以通過創建邏輯備份設備來完成備份。使用邏輯備份設備的好處是,當變更備份地址時,不需要更改備份腳本,只需要更改邏輯備份設備的定義即可。
創建邏輯備份設備的腳本如下:
SQL code EXEC sp_addmpdevice @devtype=』disk』,@logicalname=』MYBackup』,@physicalname=』D:\backup\mydb.bak』
刪除備份設備的腳本:
SQL code Sp_dropdevice @logicalname=』MYBackup』
上述腳本只是刪除邏輯備份設備的定義,下述腳本將同時刪除備份文件:
SQL code Sp_dropdevice @logicalname=』MYBackup』,@devfile=』DELFILE』
使用邏輯備份設備的方法如下:
SQL code Backup database mydb to MYBackup
當然,還可在邏輯備份設備上指定過期時間等備份屬性,如:
SQL code Backup database mydb to MYBackup WITH EXPIREDATE=』13/01/2010』
或:
SQL code BACKUP DATABASE mydb to MYBackup WITH RETAINDAYS=7
3、備份集與存儲集
每一份備份包含於一個備份集,而一個備份集包含於一個存儲集。通過系統GUI進行備份時,SQL Server會自動指定備份集和存儲集,目的則是為了簡化管理。用T-SQL顯示指定則用如下語法:
SQL code BACKUP DATABASE mydb to MYBackup WITH RETAINDAYS=7,
NAME=』FULL』,
MEDIANAME=』ALLBackups』
NAMEs是指備份集名稱,MEDIANAME是指存儲集名稱。
4、全備份
不管恢復模式是哪一個,所有的備份都必須要有一個全備份,特別是日誌備份和差異備份,如果沒有全備份的話,將無法進行恢復。
簡單的全備份腳本如下所示,也可以通過維護計劃來指定全備份:
SQL code BACKUP DATABASE mydb to DISK=』D:\Backup\mydb.bak』
但需要注意的是,上述命令是將資料庫備份附加到當前的存在的文件上,如果不存在則創建它,並不會覆蓋原有文件。要覆蓋同名的備份文件,需要指定INIT參數。
SQL code BACKUP DATABASE mydb to DISK=』D:\Backup\mydb.bak』 WITH INIT
5、日誌備份
在完全恢復模式或者大容量日誌恢復模式下,日誌備份不僅僅是恢復的需要,同時也是手工管理事務日誌文件的一種方式。如果從不進行備份的話,在完全恢復模式或者大容量恢復模式下,事務日誌將會持續增長,直至消耗完所在磁碟。
日誌備份的腳本如下:
SQL code BACKUP LOG mydb_log TO DISK=』D:\backup\mydb.trn』
需要養成使用.trn為日誌備份的擴展名的習慣。
每個在資料庫上的動作都會被安排一個Log Sequence Number (LSN)。如果需要還原到指定的時間點,需要有持續的LSN記錄。也就是說,在完全恢復模式或者大容量日誌模式下,一個不被打斷的事務日誌備份鏈是恢復資料庫的基本要求。
6、差異備份
使用日誌備份來恢復時,無疑是一個很慢的過程,特別是上一個全備份的歷史比較悠久時。使用差異備份,便能縮短恢復時間。事實上,差異備份只是BACKUP DATABASE的一個選項,如下:
SQL code BACKUP DATABASE mydb TO DISK=』D:\backup\mydb.dif』 WITH DIFFERENTIAL,INIT
進行資料庫恢復時,先恢復資料庫全備份,再恢復資料庫差異備份,最後才恢復日誌備份。
差 異備份是與上一次全備份緊密相連的,不管期間有多少次日誌備份和差異備份,差異備份還是會從上一次全備開始備份。因此,經常會遇到這樣的一種情況,在生產 庫上需要臨時使用資料庫時,便用BACKUP DATABASE … TO DISK=』..』進行了一個備份,下一次的差異備份便會以這回的全備為准,如果過後把這個臨時全備刪除掉後,後面的差異備份就沒用了。
差異備份並不意味著磁碟空間肯定會少,這取決於實際情況。當期間大量操作發生時,差異備份還是會變得很大。
7、錯誤檢測
在備份過程中,備份進程會同時驗證數據,或者校驗不完整頁(torn page),或者驗證校驗和(checksum)。要使用該功能,需要激活該選項。
不完整頁檢測(Torn-page dection)僅僅檢查每一個頁看是否已經寫完成。如果發現一個頁只有部分被寫入,那麼就將其標記為torn。
校驗和驗證(checksum validation)是一種新的頁驗證機制。它會為每個頁添加一個值來表明該頁實際的大小。雖然看起來是個代價很高影響性能的操作,但事實上,它的效率非常高,與torn-page差不多。
備份進程在備份資料庫時,會通過比較在資料庫里的和隨著備份頁寫入硬碟時這兩個之間的值來進行驗證。但是,這個驗證並不是自動完成的,需要顯示指定,在GUI頁面上是個選項。如果通過T-SQL來備份的話,語句如下:
SQL code BACKUP DATABASE mydb TO DISK=』D:\data\mydb.bak』 WITH CHECKSUM
如果備份過程中,發現了錯誤,SQL Server會錯誤信息寫入MSDB上的SUSPECT_PAGE表裡面。同時,在默認情況下,備份行為會停止的(STOP_ON_ERROR),以便管理員排查錯誤。
但 備份過程中的校驗和驗證還有另外一個選項(CONTINUE_ON_ERROR),也就是說,如果發現錯誤,備份過程並不會中斷,而是將錯誤頁信息記錄在 MSDB..SUSPECT_PAGE上而已。需要注意的是,SUSPECT_PAGE表是有行限制的,最多隻能達到1000行,如果達到了的話,備份同 樣會失敗。
激活校驗和驗證的話,很明顯會影響備份的性能。但還是很有必要的。
8、安全備份
完全備份和日誌備份語句還支持使用密碼屬性,如:
SQL code BACKUP DATABASE mydb TO DISK=』D:\mydb.bak』 WITH PASSWORD=』mydb』
所指定的密碼是很容易破解的。因此,如果確實需要對某些備份數據進行加密的話,可以將備份存放於加密的文件系統或者其它安全的存儲設備上。
同時,SQL Server還提供了對真實列進行加密的功能。該加密功能是工業標准。
9、條帶備份
有些情況下,單獨一個硬碟無法存儲一個完整的資料庫備份時,可以將資料庫備份分成多個部分存儲在不同的磁碟上,這種備份方式成為條帶備份。使用條帶備份的優點很明確,就是能很好的利用空間,但如果某部分備份丟失或者損壞,那整個備份將無效。
其語句如下:
SQL code BACKUP DATABASE mydb TO DISK=』D:\mydb.bak』,
DISK=』E:\mydb.bak』 WITH INIT,CHECKSUM,
CONTINUE_ON_ERROR
上述D盤和E盤上的備份是不可分割的。
10、鏡像備份
與條帶備份在多個磁碟上保留同一份備份不同的是,鏡像備份是在不同磁碟上保留多份備份。其語句如下:
SQL code BACKUP DATABASE mydb TO DISK=』D:\mydb.bak』
MIRROR TO DISK=』E:\mydb.bak』
WITH INIT,CHECKSUM,CONTINUE_ON_ERROR
在實際情況下,對日誌備份採取鏡像備份方式會比較合適。
11、COPY-ONLY 備份
在差異備份里曾提到過,差異備份是建立在上一個全備份的基礎上的。因此如果在一個事先安排好的備份計劃里,如果在全備份和差異備份之間再進行了一次全備份後,其差異備份會被打斷,如果把臨時全備份刪除掉後,就產生了數據丟失。
在SQL SERVER 2005以後,SQL SERVER提供了一個選項-only.使用-only選項進行的全備份便不會打算原先的備份計劃,語句如下:
SQL code BACKUP DATABASE mydb TO DISK=』D:\mydb.bak』
WITH INIT,CHECKSUM,COPY_ONLY
三、文件和文件組備份
在SQL SERVER 7.0以後,SQL Server提供了filegroup的概念。文件組不僅僅提供了一個邏輯的存儲地址,還允許將不同的表和索引放在不同的文件組上來提高性能和減少備份時間。
在數據存儲概述上,提到了資料庫有三類數據文件,一般來說,資料庫至少需要兩個(.mdf和.ldf)或者更多的文件。SQL Server不僅允許有多個文件存在(.ldf),還允許多個文件組存在。
一個文件組可以有多個文件,每個文件需要仔細規劃好初始大小及增量。
1、默認文件組
在創建對象時,如果未明確指定文件組,那麼該對象將會存放在默認的文件組上。在默認情況下,默認的文件組是primary,但由於primary文件組不僅可以包含用戶數據,同時還存儲著資料庫結構等技術信息,因此一般建議添加額外的一個文件組,並將其指定為默認文件組。
SQL Server只能有一個默認的文件組。
修改默認文件組的語句如下:
SQL code ALTER DATABASE mydb MODIFY FILEGROUP mydb DEFAULT;
2、為對象指定文件組
當創建表或者索引時,不管是用戶還是系統都需要將表或索引放在某個文件組上。如果在創建表或索引時指定文件組,那麼表或索引將會存儲在指定的文件組上,而不是默認的文件組。
其指定語句如下:
SQL code CREATE TABLE test( [id] int,[notes] text) on mydbdata
也可以通過GUI創建表的頁面來指定文件組。
3、將對象遷移至指定文件組
如果需要變更對象的存儲位置,最簡單的方式則是通過GUI屬性頁面來進行修改通過該方法,可以直觀的看到對象的遷移過程。
同時也可以通過T-SQL來修改,例如:
SQL code ALTER TABLE test drop constraint PK_test WITH (MOVE TO DATA)
4、備份數據文件
備份數據文件同樣可以通過BACKUP DATABASE語句來實現。如下:
SQL code BACKUP DATABASE mydb FILE=』D:\Data\mydb.ndf』 TO DISK=』E:\Backup\mydbdata.bak』
上述語句相當於數據文件級別的全備份,與資料庫級別的備份類似,文件級別上的備份也有差異備份,當然前提是要有相對應的文件全備份。
差異備份的語句如下:
SQL code BACKUP DATABASE mydb FILE=』D:\Data\mydb.ndf』
WITH DIFFERENTIAL
TO DISK=』E:\Backup\mydbdata_dif.bak』
5、備份文件組
與單獨備份文件類似,也可以對文件組進行類似的備份操作。備份文件組的方式也有兩種,一種是通過GUI界面指定,一種則是通過T-SQL。
T-SQL的語句如下:
SQL code BACKUP DATABASE mydb FILEGROUP=』PRIMARY』 TO DISK=』E:\Backup\mydbpri.bak』
6、不完全備份(partial backup)
在文件組備份上,不完全備份其實相當於完全備份,可以通過指定關鍵字READ_WRITE_FILEGROUPS來實現不完全備份。
語句如下:
SQL code BACKUP DATABASE mydb READ_WRITE_FILEGROUPS TO DISK=』D:\mydb.bak』
那不完全備份到底是什麼意思呢?什麼時候需要不完全備份?如果對一個文件組設置了只讀,而這只讀的文件組又需要進行一次備份,這時,可以不用BACKUP DATABASE語句進行備份,只需要挑個時間停止實例,然後執行不完全備份。
B. 教你如何用SQL備份和還原資料庫
資料庫的備份和恢復 一、備份資料庫1、打開SQL企業管理器,在控制台根目錄中依次點開 Microsoft SQL Server2、SQL Server組--雙擊打開你的伺服器--雙擊打開資料庫目錄3、選擇你的資料庫名稱(如論壇資料庫Forum)--然後點上面菜單中的工具--選擇備份資料庫4、備份選項選擇完全備份,目的中的備份到如果原來有路徑和名稱則選中名稱點刪除,然後點添加,如果原來沒有路徑和名稱則直接選擇添加,接著指定路徑和文件名,指定後點確定返回備份窗口,接著點確定進行備份 二、還原資料庫1、打開SQL企業管理器,在控制台根目錄中依次點開 Microsoft SQL Server2、SQL Server組--雙擊打開你的伺服器--點圖標欄的新建資料庫圖標,新建資料庫的名字自行取3、點擊新建好的資料庫名稱--然後點上面菜單中的工具--選擇恢復資料庫4、在彈出來的窗口中的還原選項中選擇從設備--點選擇設備--點添加--然後選擇你的備份文件名--添加後點確定返回,這時候設備欄應該出現您剛才選擇的資料庫備份文件名,備份號默認為1(如果您對同一個文件做過多次備份,可以點擊備份號旁邊的查看內容,在復選框中選擇最新的一次備份後點確定)--然後點擊上方常規旁邊的選項按鈕5、在出現的窗口中選擇在現有資料庫上強制還原,以及在恢復完成狀態中選擇使資料庫可以繼續運行但無法還原其它事務日誌的選項。在窗口的中間部位的將資料庫文件還原為這里要按照你SQL的安裝進行設置(也可以指定自己的目錄),邏輯文件名不需要改動,移至物理文件名要根據你所恢復的機器情況做改動,如您的SQL資料庫裝在D:/Program Files/Microsoft SQL Server/MSSQL/Data ,那麼就按照您恢復機器的目錄進行相關改動改動,並且最後的文件名最好改成您當前的資料庫名(如原來是zw0001.mdf ,現在的資料庫是zw0002 ,就改成zw0002.mdf),日誌和數據文件都要按照這樣的方式做相關的改動(日誌的文件名是 .ldf結尾的),這里的恢復目錄您可以自由設置,前提是該目錄必須存在(如您可以指定 d:/sqldata/zw0002.mdf或者d:/sqldata/zw0002.ldf ),否則恢復將報錯6、修改完成後,點擊下面的確定進行恢復,這時會出現一個進度條,提示恢復的進度,恢復完成後系統會自動提示成功,如中間提示報錯,請記錄下相關的錯誤內容並詢問對SQL操作比較熟悉的人員,一般的錯誤無非是目錄錯誤或者文件名重復或者文件名錯誤或者空間不夠或者資料庫正在使用中的錯誤,資料庫正在使用的錯誤您可以嘗試關閉所有關於SQL窗口然後重新打開進行恢復操作,如果還提示正在使用的錯誤可以將SQL服務停止然後重起看看,至於上述其它的錯誤一般都能按照錯誤內容做相應改動後即可恢復 三、設定每日自動備份資料庫1、打開企業管理器,在控制台根目錄中依次點開
C. 資料庫SQL 如何完全備份
第1步,依次單擊「開始」→「所有程序」→Microsoft
SQL
Server→「企業管理器」,打開「企業管理器」控制台窗口。
第2步,在企業管理器控制台窗口的左窗格中依次展開「Microsoft
SQL
Servers/SQL
Server組/local」目錄樹。然後用滑鼠右鍵單擊「資料庫」選項,在彈出的快捷菜單中執行「所有任務」→「備份資料庫」命令。
第3步,打開「SQL
Server
備份」對話框,然後單擊「資料庫」右側的下拉三角,從中選擇要備份的資料庫名稱(本例採用默認的Master資料庫)。在「名稱」編輯框中可以鍵入備份生成的文件名稱。接著單擊「添加」按鈕。
第4步,在打開的「選擇備份目的」對話框中,單擊「文件名」編輯框右側瀏覽按鈕,打開「備份設備位置」對話框。在該對話框中找到本地硬碟中用於保存備份資料庫文件的文件夾(本例為L:\SQLBackup文件夾),然後在「文件名」編輯框中為備份文件鍵入一個合適的名稱。設置完成以後單擊「確定」按鈕。
第5步,回到「選擇備份目的」對話框,可以在「文件名」編輯框中看到剛才所作的設置,單擊「確定」按鈕即可。
第6步,SQL
Server開始按照指定的備份目的對資料庫進行備份,備份完成後會給出提示,單擊「確定」按鈕即可,